本文主要是介绍【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件
背景
之前开发调试了个能正常调用ffmpeg解码mp4文件得到yuv数据的testbed(把ffmpeg开源库移植并交叉编译到一个嵌入式平台),用了好几年了,今天用来挂测一批新的采集视频mp4文件,发现必崩溃,定位排查是ffmpeg解码有内存泄露,最后oom了。但是挂测另外一批视频并不会出现内存泄露情况,不过还是查看了下代码,以及完善流程,怎么改调试都会必现,下载最新的源码调试也会,就差对着开源代码查了,想着ffmpeg的广泛性,按理内部不至于有这么大的bug。又问了下两批视频采集的不同之处,对比发现,正常能解码的mp4文件是用potplayer或者公司其他团队基于ffmpeg库开发demo工具采集的,而异常崩溃的视频则是软龙格软件采集的。看来是软龙格公司软件可能又特殊什么操作吧,用ffmpeg命令看了下两种mp4文件信息比对,有个底层encoder版本号不一样。然后想着把会崩溃的mp4文件解码后再重新编码成新的mp4文件挂测试下,发现可以正常了。
解决方案
使用ffmpeg命令把原来的mp4文件重新解码再编码成新的mp4文件,命令如下:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "bframes=0:ref=1" -pix_fmt nv12 output.mp4
总结
任何问题都可以利用简单的输入->处理->输出的模型进行高效分析定位,先从输入定位,对齐输入,看看输入是否一样,如果输入一致,输出不一样,那么处理环节肯定有问题;如果输入不一致,输出完全不符合预期,那处理环节不够健壮,有时间应该完善处理,如果不重要不紧急,可以变成同输入,总之灵活应用;芒格说过,每个人都应该学习掌握100种框架模型,这样可以大大提高做事效率和成功率。确实是的。
这篇关于【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!