【问题标题】:How to check programmatically whether MP4 is corrupted or not?如何以编程方式检查 MP4 是否损坏?
【发布时间】:2013-05-05 11:41:05
【问题描述】:

我想以编程方式检查 MP4 文件是否可播放。我非常有兴趣以编程方式解决这个问题。

手动,我可以轻松验证损坏的 MP4,但我不会为此观看 2-3 小时的电影,而且我的驱动器中有 500 多个视频。:/

什么是我的损坏文件?

好吧,当我播放 MP4 时,我遇到了一些小故障,有时在播放时出现错误,例如“无法播放此视频”。有时视频播放没有任何错误,但我什么也看不到或听不到任何东西。这有点随机损坏。

我敢肯定,编写视频播放器的人一定遇到过/处理过此类问题。

如何以编程方式找到此类文件?

【问题讨论】:

    标签: video media-player mp4 vlc


    【解决方案1】:

    除非您完全解码文件,否则无法找出答案。您可以解码但不显示。所以使用 ffmpeg 之类的东西来解码成 /dev/null。如果没有错误消息并且它没有在中间中止,那么一切都很好。如果你知道你的文件有某种损坏。

    通常,如果它们是可恢复的错误,ffmpeg 将继续。因此,您可以根据错误消息的数量和持续到最后的能力来了解错误的数量或严重程度。

    【讨论】:

    • 我同意 av501,如果您希望它以编程方式执行,那么您需要先使用 ffmpeg 打开文件,然后开始解码每一帧并在此过程中检查错误。您将能够为您解码的每个音频和视频帧找到它们,并据此做出决定。
    • 我用 ffmpeg 编码了一个 MP4 文件,它在 mplayer 和 Chrome 中播放,但 firefox 拒绝,说文件损坏。我做到了:ffmpeg -i <infile> -s 960x540 -c:a none -c:v libx264 -crf 18 out.mp4。使用 ffmpeg 编码文件以在主要浏览器中播放的安全方法是什么?
    • @LuisA.Florit,这不是 mp4 的东西,但可能是编解码器的东西。仅当 3rd 方解码器可用时,Firefox 才支持 h264。 developer.mozilla.org/en-US/docs/Web/HTML/…。因此,要回答您的问题,不,一种编码不能适用于所有浏览器,您需要针对不同的浏览器进行不同的编码。我假设你在这里使用 html5 视频标签。
    • 其实我在这里找到了帮助:http://stackoverflow.com/a/24468585/1483390。事实证明,添加-pix_fmt yuv420p 修复了视频文件,并且它在 Firefox 中播放得很好。我没有使用<video> 标签,而是旧的<a> 标签。
    • @LuisA.Florit,这意味着您的输入不是 yuv420p。不幸的是,如果没有您的 ffmpeg 输出消息,就无法知道这一点。是的,420p 是所需的标准格式。有些播放器可能会播放 422p,但这可能过于依赖第三方解码器。
    【解决方案2】:

    您可以开始查找 mp4 解析器库并使用它,看看它是否失败。 可能有那些只是读取 moov 标头的。

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 2021-07-28
      • 1970-01-01
      • 2012-01-04
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多