.
背景
在计算视觉应用中,经常涉及到以下流程:
- 对视频文件进行抽帧
- 视频帧逐帧进行图像处理
- 再写回视频文件
涉及到视频的编解码就绕不开成熟的工具ffmpeg,因为最近经常用到ffmpeg来对视频抽帧、编码写回视频,故用博客记录一下,以便之后反复查看,省去了搜索引擎反复折腾的时间。
接下来开始吧!
.
解码抽帧
我的应用场景下需要对视频中所有帧数据进行处理,所以不设置抽帧间隔,使用默认的参数如下:
// using ffmpeg to decode a specified video .mp4 file
ffmpeg -i input.mp4 ./input_frame/%d.png
其中具体参数说明如下,
-i:指定解码的视频文件路径,样例指令中视频文件就在当前目录下,所以直接写为input.mp4
。
第二个参数为解码视频帧保存的文件路径,注意指定的路径必须真实存在,否则会报错,样例中输出路径指定为当前路径下的文件夹input_frame
,解码出的视频帧会以数字顺序命名保存在本地。
.
编码写入视频
对视频帧进行了对应的处理后,需要写回视频文件,且希望视频质量不被压缩,易于观察图像处理的感观效果,则可使用指令如下:
// using ffmpeg to encode local images into an output video file
ffmpeg -framerate 30 -i ./input_frame/%d.png -codec copy output.mkv
其中具体参数说明如下:
-framerate:样例代码中指定的是30fps,这个参数可以去掉,默认使用25fps的帧率进行编码。
-i:指定待编码图像文件夹路径,对应解码路径为文件夹input_frame
下的图像,也可以修改为其他的文件夹。这里需要注意图像文件名称,须按照数字顺序排列,ffmpeg会自动读取写入,如果顺序不对,写出的视频文件会出现帧序错乱的问题。
-codec copy:编码器传入参数为copy
则说明进行无损编码,写入视频文件。
使用以上指令得到的视频文件都会比较大,对于验证模型效果比较有效,但在实际应用场景中还得根据情况调整编码模式。
.
以上。欢迎大家在评论区指正~ 多多讨论!