在我目前的工作中,我试图使用FFMPEG的C库将一些图像编码为h264视频。生成的视频在VLC中播放良好,但没有预览图像。该视频可以在ubuntu上的VLC和Mplayer中播放,但不能在Mac或PC上播放(事实上,它会在Mac上导致"VTDecoderXPCService意外退出"错误)。
如果我使用命令行通过FFMPEG运行生成的文件,则生成的文件将具有预览图像,并且在所有位置都能正确播放。
显然,我从程序中得到的文件在某个奇怪的地方被损坏了,但在编译或运行过程中,我没有任何输出来指示位置。我现在不能分享我的代码(工作代码还没有开源:-(),但我已经尝试了很多东西:
- 只写入标题和尾部数据(av_write_trear),不写入帧
- 只写入减去尾部的帧(使用avcodec_encode_video2和av_write_frame)
- 调整我们的time_base和frame pts值以每秒仅编码一帧
- 删除所有可变帧速率代码
- 我不会在这里打扰你的许多其他变体
在创建我的项目时,我还遵循了以下教程:
- Dr。Anger的FFMPEG教程
- FFmpeg自己的教程
- FFmpeg的旧教程
并查阅了已弃用的ffmpeg函数列表
并根据官方文档在ubuntu上编译了FFMPEG
并咨询了许多StackOverflow问题:
- 使用libavcodec的mpegts容器中的原始H264帧
- 如何使用MediaCodec将位图编码到视频中
- 如何从YUV420p转换RGB用于ffmpeg编码器
- 使用FFmpeg C API对H.264视频进行编码
- ffmpeg:如何将h264原始数据保存为mp4文件
但每次运行程序都会遇到完全相同的问题。
我的问题是,是否有任何明显的原因导致FFMpeg的程序运行与控制台运行不同(例如,不完整的定稿、一些线程问题等)?比如控制台运行可以修复损坏的文件的一些明显原因或者是否有一种合适的工具/方法来检查视频文件并找到损坏点?
让它运行一下:http://forum.doom9.org/showthread.php?t=123076看看你得到了什么。