作为一个图像算法工程师,有时候也要处理视频。再经过算法处理之前,可能要对视频进行抽帧、格式转换、裁剪、合并等操作,虽然网络上有很多视频处理软件,但是要么是要收费、要么是不好用。其实作为程序员,可以用鼎鼎大名的开源工具FFmpeg来做视频的编辑处理。
在我看来,FFmpeg是最强大的视频编辑处理开源工具,没有之一。其官网是http://ffmpeg.org/,在官网可以下载FFmpeg的源码,也可以下载编译好的、直接运行的可执行文件,大多数人只需要用它就行了,这里是windows 64位可执行文件下载地址。
下载将得到一个压缩包,目录结构如下:
bin里面有三个可执行文件,分别是ffmpeg.exe、ffplay.exe和ffprobe.exe,doc目录是html文档,打开其中的ffmpeg.html就可以查看ffmpeg.exe的使用方法。ffmpeg的功能非常多,本文列举一些常用的命令。执行命令的方法是:以windows为例,进入到上图的bin目录中,按住Shift键,点击鼠标右键,选择“在此处打开命令窗口”,然后输入命令,回车,即可执行。
1. 格式转换
命令:ffmpeg -i testfile.mp4 -codec copy testfile.flv
命令解析:
-i,指定输入视频路径;
-codec copy,填上该参数可以省去解码和编码的过程,使视频格式转换更快,如果加上这个参数时有报错,可以把这个参数去掉;
testfile.flv,是输出视频路径;
2. 视频裁剪
命令:ffmpeg -i testfile.mp4 -ss 00:01:10 -t 10 testfile_v2.mp4
命令解析:
-i,指定输入视频路径;
-ss,表示拖动到某一个时间位置,格式为:时:分:秒;
-t,表示限制从输入文件读取数据的时长,单位为 s;
testfile_v2.mp4,输出视频路径;
3. 视频合并
命令:ffmpeg -f concat -i input.txt testmerge.mp4
命令解析:
-f,指定输入或输出的file format,concat是format的其中一种,表示合并
-i,指定数据的数据源,input.txt 指定了两个文件的路径,格式为 file absolutefilepath,如下所示:
file D:\testfile_1.mp4 file D:\testfile_2.mp4 |
testmerge.mp4,输出视频路径;
常见问题解决
(1)视频格式转换时,报错Too many packets buffered for output stream
原因是有些视频数据有问题,导致视频处理过快,容器封装时队列溢出,解决办法是增加容器封装队列大小,比如在命令之后增加一个参数
-max_muxing_queue_size 1024
作者:ModelArts大赛