当前位置: 移动技术网 > IT编程>网络>音视频 > FFmpeg将有序帧(图片)转换成视频(解决了生成视频后播放闪烁的痛点)

FFmpeg将有序帧(图片)转换成视频(解决了生成视频后播放闪烁的痛点)

2020年07月13日  | 移动技术网IT编程  | 我要评论

引言

随着目标检测算法在工程中的广泛应用,视频和批量图片的处理成为重要的环节。在对视频进行目标识别标记,主要采用opencv,每次读取一帧图像,然后送入网络,得到目标物所属类别,框的坐标信息和置信度,然后绘制到图像中,并把此帧图像实时显示。但无法保存带识别标记的视频(本人浅薄,暂且未找到opencv中合适方法)故本博客提出一种基于FFmpeg的批量标记帧图像生成视频方法。本文把识别好的每一帧图像按序号保存至某一独立文件夹,在运用FFmpeg将文件夹中的有序帧图像合成视频。

FFmpeg下载与安装

方法一:官网下载(非常慢)

FFmpeg官方下载地址

方法二:我在外网下载好,提供网盘链接

链接:ffmpeg-20200628-4cfcfb3-win64-static.zip
提取码:mmtx

安装FFmpeg

下载zip文件,解压,把bin目录下的ffmepg.exe,所在路径加入到系统环境变量path中,即可。参考博客

验证安装成功

win + R 打开,输入cmd,打开终端
输入ffmpeg -version
出现下图,安装成功。
安装成功

探索解决方案

在对监控视频取帧进行目标识别+存储有序帧后,先后从两大方向,多个角度尝试,皆效果不理想。

  1. 运用opencv来实现有序帧转视频(转换后的视频播放出现帧间闪烁)
  2. 用Win10自带视频编辑器处理(手动调节每一帧播放时间,费时费力)
  3. PR视频剪辑软件生成(对帧的序号有严格要求,如000.jpg、001.jpg·······199.jpg)(而我在目标识别后保存的序号是1.jpg、2.jpg、3.jpg ···50.jpg、51.jpg···198.jpg、199.jpg;是按数字递增的并没有保持序号宽度一致)
    当然,python熟练的可以在保存帧的时候,统一命名为序列宽度一致,并保存。

最终解决方案

运用FFmpeg针对有序帧转化为视频。

前提准备

安装好ffmpeg
带有有序标号的标记好的帧图像的文件夹(我的有序命名为 fram1.jpg、fram2.jpg、fram3.jpg···fram712.jpg )

命令行输入指令

当运用ffmpeg压缩视频时,推荐用libx264编码格式,根据经验,这样得到的视频,分辨率体积小。不同版本的ffmpeg会得到不同的输出文件。
例如文件夹中图像格式(fram1.jpg, fram2.jpg…. etc)此时运用以下指令:

ffmpeg -r 60 -f image2 -s 1920x1080 -i fram%d.jpg -vcodec libx264 -crf 25  -pix_fmt yuv420p test.mp4

主要修改 帧率、输入图片帧命名格式、输出

%04d 表示用零来填充直到长度为4,i.e 0001…0020…0030…2000 and so on.
如果没有填充,需要相应更改,如 pic%d.png or %d.png

-r 帧率(fps)
-f image2 图像合成视频默认设置
-crf 画质,数值小意味着画质高,通常设置为15-25 
-s 分辨率(1920x1080)
-pix_fmt yuv420p 像素格式
test.mp4 输出在当前文件夹,输出结果为test.mp4

参考资料

[1]https://blog.csdn.net/kaikai136412162/article/details/80746961
[2]

本文地址:https://blog.csdn.net/weixin_37939906/article/details/107281060

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网