本博文基于go语言方式对ffmpeg进行简要学习,内容参考
传送门
ffmpeg的安装
这一步是大前提,打开百度,进入ffmpeg官网
点击,下载,选择windows的第二个,最后点这个,贪图方便,直接传送门
传送门
最后下载好后,解压后,效果这样
然后把bin目录与ffmpeg.exe加入path即可,使用cmd验证效果
文章的练习目录

mp4转avi
这段代码表现了将一个mp4文件转成avi文件
go
package main
import (
"fmt"
"github.com/u2takey/ffmpeg-go"
)
func main() {
err := ffmpeg_go.Input("./assets/woman1.mp4").
Output("./assets/output2.avi", ffmpeg_go.KwArgs{"c:v": "libx264"}).
OverWriteOutput().ErrorToStdOut().Run()
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println("ok")
}
将视频生成1秒钟切片视频
go
func main() {
err := ffmpeg.Input("./assets/woman1.mp4", ffmpeg.KwArgs{"ss": 1}).
Output("./assets/out1.mp4", ffmpeg.KwArgs{"t": 1}).OverWriteOutput().Run()
fmt.Println(err)
fmt.Println("ok")
}
对视频进行增加水印
go
overlay := ffmpeg.Input("./assets/1.png").Filter("scale", ffmpeg.Args{"400:800"})
err := ffmpeg.Filter(
[]*ffmpeg.Stream{
ffmpeg.Input("./assets/woman3.mp4"),
overlay,
}, "overlay", ffmpeg.Args{"50:50"}, ffmpeg.KwArgs{"enable": "gte(t,1)"}).
Output("./assets/out2.mp4").OverWriteOutput().ErrorToStdOut().Run()
fmt.Println(err)
视频生成gif
go
err := ffmpeg.Input("./assets/woman2.mp4", ffmpeg.KwArgs{"ss": "5"}).
Output("./assets/out1.gif", ffmpeg.KwArgs{"s": "2160x2880", "pix_fmt": "rgb24", "t": "2", "r": "3"}).
OverWriteOutput().ErrorToStdOut().Run()
fmt.Println(err)
- ss:开始时间
- t:持续时间
- r:每秒几帧图片
- s:生成gif分辨率
视频切割
go
func main() {
input := ffmpeg.Input("./assets/woman7.mp4").Split()
// get multiple output with different size/bitrate
out1 := input.Get("0").Filter("scale", ffmpeg.Args{"1920:-1"}).
Output("./assets/1920.mp4", ffmpeg.KwArgs{"b:v": "5000k"})
out2 := input.Get("1").Filter("scale", ffmpeg.Args{"1920:-1"}).
Output("./assets/1280.mp4", ffmpeg.KwArgs{"b:v": "2800k"})
err := ffmpeg.MergeOutputs(out1, out2).OverWriteOutput().ErrorToStdOut().Run()
fmt.Println(err)
}