[作为测试用例,我有两个mp4视频:它们似乎编码相同,但是其中一个在Firefox中有效,而一个在Firefox中却没有:
((注-我以为上面的“视图”链接会使用浏览器的内置播放器打开它们,但是看起来它们使用的是Dropbox的视频播放器,它确实在firefox中起作用。因此,要在firefox中查看它,请下载然后将其拖到Firefox中,或右键单击并从“打开方式”中选择Firefox-谢谢!)
它们都在Chrome中播放。
在Mozilla错误跟踪网站上,有关一个相关问题的讨论很长:https://bugzilla.mozilla.org/show_bug.cgi?id=1130450
所以,我需要回答三个问题:
1)bad.mp4有什么问题?
2)如何以编程方式(即在Linux命令行上)检测视频库中的哪些视频会出现此问题?
3)如何以编程方式(例如,使用FFMPEG)修复它。
我注意到的一件事是,好的视频中,视频流0和音频流1,而坏视频则相反。我尝试交换流,但似乎无济于事。
首先,对mp4曲目进行排序与此无关。第二,在带有Firefox 52.5.3版本的Win10上,bad.mp4可以正常工作。但是,在使用Firefox 69.03的MacOS上,bad.mp4也可以播放,但有很多人工制品。
H.264比特流似乎还可以。我用MP4Box MP4Box -raw 2 bad.mp4
对坏的mp4进行了多路分解,得到bad_track2.h264
,然后用reference software对其进行了解码。解码就好了,没有任何问题,因此比特流似乎不是问题。
因此它必须是mp4的包装。的确,如果我再次使用MP4Box -add bad_track2.h264 repackage.mp4
将比特流打包回去,它的播放效果很好。因此,这是个好消息,因为您无需重新编码(转码)视频,这样可以节省大量时间。当然,如果您不想使用MP4Box进行转码,也可以解决ffmpeg -i bad.mp4 transcode.mp4
。
要回答2和3。不能100%确认所有视频是否相同,但是good.mp4和bad.mp4之间的区别是可以通过compatible_brands
获得ffprobe
。您可以编写脚本查找与bad.mp4品牌相同的视频,然后使用ffprobe
,MP4Box
重新打包每个视频。
我希望这会有所帮助。