Files
ffui/main.go
T

96 lines
2.0 KiB
Go
Raw Normal View History

2022-03-19 02:35:23 +02:00
package main
import (
2022-10-08 02:36:15 +03:00
"fmt"
2022-03-19 02:35:23 +02:00
"log"
"os"
"path/filepath"
"strings"
tea "github.com/charmbracelet/bubbletea"
"github.com/gabriel-vasile/mimetype"
ffmpeg "github.com/u2takey/ffmpeg-go"
)
func main() {
if len(os.Args) < 2 {
log.Fatal("No directory or file provided.")
}
path := os.Args[1]
if path == "" {
log.Fatal("No directory or file provided.")
}
absolutePath, err := filepath.Abs(path)
if err != nil {
log.Fatal(err)
}
fileInfo, err := os.Stat(absolutePath)
if err != nil {
log.Fatal(err)
}
ffui := initialModel(fileInfo, absolutePath)
p := tea.NewProgram(ffui)
ffui.Program = p
f, err := tea.LogToFile("ffui.log", "ffui")
defer f.Close()
if err != nil {
log.Fatal(err)
}
err = p.Start()
if err != nil {
log.Fatal(err)
}
}
2022-10-08 02:36:15 +03:00
func encode(fullFilePath string, fileName string, teaP *tea.Program, cfg ParsedConfig) {
2022-03-19 02:35:23 +02:00
mType, err := mimetype.DetectFile(fullFilePath)
if err != nil {
log.Fatal(err)
}
if !strings.HasPrefix(mType.String(), "video/") {
log.Fatalf("%s is not a valid video file\n", fileName)
}
parentDir := filepath.Dir(fullFilePath)
extensionIndex := strings.LastIndex(fileName, ".")
newFileName := fileName[:extensionIndex]
extension := fileName[extensionIndex:]
2022-10-08 02:36:15 +03:00
newFileFullPath := filepath.Join(parentDir, newFileName+fmt.Sprintf(" [%s] [%s]", cfg.VideoEncoder, cfg.AudioEncoder)+extension)
if _, err := os.Stat(newFileFullPath); err == nil {
if cfg.SkipEncodedVid {
log.Printf("%s already exists with the exact same encodings (crf and preset might be different though), skipping.", newFileFullPath)
teaP.Send(finishedEncodingVideo{})
return
} else {
os.Remove(newFileFullPath)
}
}
2022-03-19 02:35:23 +02:00
2024-09-05 15:56:29 +02:00
err = ffmpeg.Input(fullFilePath).
Output(newFileFullPath, ffmpeg.KwArgs{
2022-10-08 02:36:15 +03:00
"c:v": cfg.VideoEncoder,
"crf": cfg.CRF,
"preset": cfg.Preset,
"c:a": cfg.AudioEncoder,
2022-03-19 02:35:23 +02:00
"b:a": "128k"}).
GlobalArgs("-progress", "unix://"+getProgressSocket(fullFilePath, teaP)).
Run()
2022-10-08 02:36:15 +03:00
if err != nil {
teaP.Send(errQuitMsg{msg: fmt.Sprintf("FFmpeg quit with error: %s", err)})
}
2022-03-19 02:35:23 +02:00
}