Browse Source

不想写了

master
RealXLFD 3 months ago
parent
commit
78226f8da8
  1. 43
      cliapps/ffmpeg/ffmpeg.go
  2. 5
      cliapps/ffmpeg/ffmpeg_external.go
  3. 1
      cliapps/ffmpeg/ffmpeg_internal.go
  4. 27
      cliapps/ffmpeg/options.go
  5. 12
      utils/file/scanner/scanner.go
  6. 137
      utils/file/zip/zip.go
  7. 5
      utils/uncompresser/zip.go

43
cliapps/ffmpeg/ffmpeg.go

@ -0,0 +1,43 @@
package ffmpeg
import (
"os/exec"
"path/filepath"
)
func Process(src, dst string, opts ...Option) error {
err := checkFFMPEG()
if err != nil {
return err
}
options := filterOptions(opts...)
appPath := filepath.Join(
ffmpegPath,
`ffmpeg`,
)
var args []string
args = append(
args,
`-i`,
src,
)
for _, option := range options {
args = append(
args,
option.Option(),
)
}
args = append(
args,
dst,
)
cmd := exec.Command(
appPath,
args...,
)
err = cmd.Run()
if err != nil {
return err
}
return nil
}

5
cliapps/ffmpeg/ffmpeg_external.go

@ -1,5 +0,0 @@
package ffmpeg
func Convert(src, dst string) {
}

1
cliapps/ffmpeg/ffmpeg_internal.go

@ -1 +0,0 @@
package ffmpeg

27
cliapps/ffmpeg/options.go

@ -6,7 +6,7 @@ import (
"strings"
)
func OptionFilter(options ...Option) []Option {
func filterOptions(options ...Option) []Option {
cache := make(map[reflect.Type]Option)
for _, option := range options {
t := reflect.TypeOf(option)
@ -24,30 +24,22 @@ type Option interface {
}
// VideoBitrate the bitrate of the video
type VideoBitrate int
type VideoBitrate string
func (b VideoBitrate) Option() string {
intB := int(b)
if intB <= 0 {
panic("VideoBitrate must be greater than 0")
}
s := strings.Builder{}
s.WriteString(`-b:v `)
s.WriteString(strconv.Itoa(intB))
s.WriteString(string(b))
return s.String()
}
// AudioBitrate the bitrate of the audio
type AudioBitrate int
type AudioBitrate string
func (b AudioBitrate) Option() string {
intB := int(b)
if intB <= 0 {
panic("AudioBitrate must be greater than 0")
}
s := strings.Builder{}
s.WriteString(`-b:a `)
s.WriteString(strconv.Itoa(intB))
s.WriteString(string(b))
return s.String()
}
@ -175,3 +167,12 @@ const (
AcceleratorVulkan = `vulkan`
AcceleratorD3d12va = `d3d12va`
)
type FrameRate int
func (f FrameRate) Option() string {
s := strings.Builder{}
s.WriteString(`-r `)
s.WriteString(strconv.Itoa(int(f)))
return s.String()
}

12
utils/file/scanner/scanner.go

@ -16,6 +16,7 @@ type FileScanner struct {
haveFinished bool
results []string
skips []string
dirs []string
errs []error
root string
ch chan bool
@ -52,8 +53,11 @@ func (s *FileScanner) ScanAll(allowedExts []string) *FileScanner {
err,
)
}
// 如果为路径则继续
if entry.IsDir() {
s.dirs = append(
s.dirs,
path,
)
return nil
}
// 若没有标注允许的后缀名,则将所有文件视为完成
@ -103,12 +107,12 @@ func (s *FileScanner) ScanAll(allowedExts []string) *FileScanner {
}
// GetInfo 获取到文件的信息
func (s *FileScanner) GetInfo() (results, skips []string, errs []error) {
func (s *FileScanner) GetInfo() (results, skips, dirs []string, errs []error) {
s.Wait()
if len(s.errs) == 0 {
return s.results, s.skips, nil
return s.results, s.skips, s.dirs, nil
}
return s.results, s.skips, s.errs
return s.results, s.skips, s.dirs, s.errs
}
func (s *FileScanner) Wait() *FileScanner {

137
utils/file/zip/zip.go

@ -0,0 +1,137 @@
package zip
import (
"archive/zip"
"io"
"os"
"path/filepath"
)
var (
ErrLogger = func(err error) {}
CurrentLogger = func(file string) {}
)
func ZIP(src, dst string) error {
var stat os.FileInfo
var err error
stat, err = os.Stat(src)
if err != nil {
return err
}
var file *os.File
file, err = os.Create(dst)
if err != nil {
return err
}
defer func() {
err := file.Close()
if err != nil {
ErrLogger(err)
}
}()
zipWriter := zip.NewWriter(file)
defer func() {
err := zipWriter.Close()
if err != nil {
ErrLogger(err)
}
}()
if !stat.IsDir() {
err = writeToZip(
zipWriter,
stat,
"",
src,
)
if err != nil {
return err
}
return nil
}
var walker = func(path string, info os.FileInfo, err error) error {
if err != nil {
ErrLogger(err)
return nil
}
CurrentLogger(path)
err = writeToZip(
zipWriter,
info,
src,
path,
)
ErrLogger(err)
return nil
}
err = filepath.Walk(
src,
walker,
)
if err != nil {
return err
}
return nil
}
func UnZIP(src, dst string) error {
return nil
}
func writeToZip(
zipWriter *zip.Writer, info os.FileInfo,
root, src string,
) error {
var header *zip.FileHeader
var writer io.Writer
var srcFile *os.File
var err error
isDir := info.IsDir()
header, err = zip.FileInfoHeader(info)
if err != nil {
return err
}
if root == "" {
if isDir {
header.Name = filepath.Join(
filepath.Base(src),
`/`,
)
} else {
header.Name = filepath.Base(src)
}
} else {
header.Name, err = filepath.Rel(
root,
src,
)
if err != nil {
panic(err)
}
}
writer, err = zipWriter.CreateHeader(header)
if err != nil {
return err
}
if isDir {
return nil
}
srcFile, err = os.Open(src)
if err != nil {
return err
}
defer func() {
err := srcFile.Close()
if err != nil {
ErrLogger(err)
}
}()
_, err = io.Copy(
writer,
srcFile,
)
if err != nil {
return err
}
return nil
}

5
utils/uncompresser/zip.go

@ -1,5 +0,0 @@
package uncompresser
func UnZIP(src, dst string) error {
return nil
}
Loading…
Cancel
Save