firefox - 无法在 Firefox 中播放的视频:如何检测以及如何修复?
问题描述
作为测试用例,我有两个 mp4 视频:它们的编码似乎相同,但一个在 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 上,而在坏视频上则相反。我尝试交换流,但似乎没有帮助。
编辑:重新基线配置文件
有人建议 FF 可能不喜欢 Baseline 个人资料视频。我能够识别出一些有效的基线个人资料视频和一些无效的,所以我认为这不是关键问题。这里还有几个示例:
解决方案
首先,排序 mp4 曲目与此无关。其次,在带有 Firefox 版本 52.5.3 的 Win10 上,您的 bad.mp4 可以正常工作。但是在使用 Firefox 69.03 bad.mp4 的 MacOS 上也可以播放,但有很多人工制品。
H.264 比特流似乎没问题。我用 MP4Box 解复用了坏的 mp4,并用参考软件MP4Box -raw 2 bad.mp4
对其进行了bad_track2.h264
解码。解码很好,没有任何问题,所以比特流似乎没有问题。
所以它必须是包装成mp4。事实上,如果我再次使用 将比特流打包回来MP4Box -add bad_track2.h264 repackage.mp4
,它的播放效果就很好。所以这是一个好消息,因为您不必重新编码(转码)您的视频,这将为您节省大量时间。当然ffmpeg -i bad.mp4 transcode.mp4
,如果您不想使用 MP4Box 进行转码,也可以解决它。
回答 2 和 3。不是 100% 确定这是否对您的所有视频都相同,但 good.mp4 和 bad.mp4 之间的区别是compatible_brands
您可以得到的ffprobe
。ffprobe
您可以编写一个脚本来查找与 bad.mp4 中具有相同品牌的视频,然后使用,重新打包每个视频MP4Box
。
我希望这有帮助。
编辑
为了解决@llogan 的回答中提出的关于基线 AVC配置文件的问题。恕我直言,这不太可能不支持基线配置文件,但不能 100% 确定它,因为它可能取决于运行 Firefox 的平台。
1:Firefox 对 AVC 的支持取决于操作系统内置或预装的 AVC 编解码器及其容器,以避免专利问题。
推荐阅读
- javascript - 仅显示 localStorage 数据数组中的第一项
- jquery - 支持 jQuery 和 HTML 的 fetch 响应类型
- linux - sed:包括一个由正则表达式指定的外部文件
- java - java中的ModelMapper Class Not Found错误问题
- java - 如何正确比较排序方法快速排序和合并排序之间的运行时间?
- javascript - 为什么我的视频背景不会通过我的组件出现?
- typescript - 如何将函数声明为具有强制参数的类型
- ibm-cloud - 在 Watson 助手中保存用户输入(字符串)
- node.js - 从nodejs中的孩子更新全局变量值
- python - 永久更改 Mac 终端中的目录?(自动化无聊的东西第 6 章)