如何通过编程检查MP4文件是否损坏?

3
我希望能够通过编程检查MP4文件是否可播放。我非常有兴趣通过编程解决这个问题。
手动操作时,我可以轻松验证损坏的MP4文件,但是我不想为此观看2-3小时的电影,而且我的驱动器中有500多个视频。:/
对于我来说,什么是损坏的文件呢?
当我播放MP4文件时,会出现故障,有时会出现播放错误,例如“无法播放此视频”。有时视频播放时没有抛出任何错误,但我看不到或听不到任何内容。这是一种随机的损坏。
我相信,编写视频播放器的人一定遇到/处理过这种问题。
我该如何通过编程找到这样的文件?
2个回答

3

除非您完全解码文件,否则无法找出问题所在。您可以进行解码而不显示。因此,使用类似ffmpeg的工具来解码到/dev/null。如果没有错误消息并且未在中途中止,则一切正常。如果有错误消息,则说明文件存在某种类型的损坏。

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


1
我同意av501的观点,如果你想以编程方式实现它,那么你需要从使用ffmpeg打开文件开始,然后开始解码每一帧并在过程中检查错误。你将能够找到每个音频和视频帧的错误,并相应地做出决定。 - praks411
我使用ffmpeg对MP4文件进行了编码,它可以在mplayer和Chrome中播放,但是Firefox拒绝播放,并显示文件损坏。我尝试了以下命令:ffmpeg -i <infile> -s 960x540 -c:a none -c:v libx264 -crf 18 out.mp4。有没有一种安全的方式使用ffmpeg编码文件以在主要浏览器中播放? - Luis A. Florit
@LuisA.Florit,这不是mp4的问题,而可能是编解码器的问题。Firefox仅在有第三方解码器的情况下支持h264。https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats。因此,回答您的问题,不能使用一个编码适用于所有浏览器,您需要为不同的浏览器进行不同的编码。我假设您在这里使用html5视频标签。 - av501
实际上,我在这里找到了帮助:https://dev59.com/yWEi5IYBdhLWcg3wjcvE#24468585。结果发现添加 -pix_fmt yuv420p 可以修复视频文件,并且可以在 Firefox 中正常播放。我没有使用 <video> 标签,而是使用旧的 <a> 标签。 - Luis A. Florit
@LuisA.Florit,这意味着您的输入不是yuv420p格式。不幸的是,如果没有FFmpeg输出消息,就无法知道这一点。是的,420p是所需的标准格式。有些播放器可能会播放422p,但这可能过于依赖第三方解码器。 - av501

1
你可以开始寻找mp4解析库并使用它,看看是否失败。 可能有一些只读取moov头的库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接