【发布时间】:2017-11-10 20:00:36
【问题描述】:
我们有一个应用程序使用 ffmpeg C API 在 mp4 容器中编码 mpeg-4 (AV_CODEC_ID_MPEG4) 文件。问题是文件无法在 Windows Media Player 或 Windows 10 视频播放器“电影和电视”应用程序中播放。它可以在 VLC、google chrome、Ubuntu 的视频播放器以及我尝试过的所有其他视频播放器中播放。
这两个 Windows 播放器可以播放 mp4 容器中使用 mpeg-4 编码的其他文件。我还使用命令行“ffmpeg”工具测试了将视频文件转码为相同格式的测试,并成功地使用以下命令播放视频:
ffmpeg input.avi -c:v mpeg4 output.mp4
虽然我发现以下命令不起作用:
ffmpeg input.avi -c:v mpeg4 -vtag xvid output.mp4
ffmpeg input.avi -c:v libxvid output.mp4
# the last command wont play with windows media player but VLC can still play it. If the extension of the output file is changed to avi for the last two commands then Windows media player can play it.
我开始查看 ffmpeg src 代码,但它看起来有点大/复杂,我尝试使用更简单的“encode_video.c”示例,它能够编码视频并在 Ubuntu 的默认视频播放器中播放,但 VLC 也没有Windows Media Player 可以播放。
我们需要使用 ffmpeg API,而不是命令行工具对这些进行编码,所以我想知道 ffmpeg 命令行工具在做什么而我不是,或者关于问题可能是什么以及如何解决这个问题的任何想法工作。
谢谢。
【问题讨论】:
-
您能否在使用 API 的地方显示一小段代码,从而创建一个 2 个 Windows 播放器无法读取的文件?这可以帮助我和其他人缩小您的问题范围。
标签: c++ encoding ffmpeg mp4 mpeg-4