Big thanks to:
barsanuphe for goexiftool wrapper.
xfrr for goffmpeg wrapper.
Wrapper uses ffprobe to get mediafile info, so there is default args:
ffprobe -show_format -show_streams -pretty -print_format json -hide_banner -i %file_name%
This command produce output in json format, so we can unmarshall it to Info struct.
Defaults for ffmpeg command:
ffmpeg -y -v error -stats -i %file_name% %out_file_name%
-y
for answer yes on file rewrite
-v error
verbose with only errors
-stats
show transcoding status
-i
input file
func main(){
// Initialize
m, err := ffmpegwraper.NewMediaFile("./test/test.MOV")
if err != nil {
panic(fmt.Errorf("Failed get file info : %s", err))
}
// Data from ffprobe
fmt.Println(m.Info)
// ffmpeg params
ffmpParams := "-ss 00:01:30 -crf 20 -bufsize 4096k -vf scale=1280:800:force_original_aspect_ratio=decrease"
out, err := m.Convert("pre_test.mov", strings.Split(ffmpParams, " "));
if err != nil{
panic(fmt.Errorf("Failed convert file : %s", err))
}
// Getting status of transcoding
for msg := range out {
fmt.Println(msg)
}
}
-ss
flag with arg will be moved befote -i flag