解决iOS的默认浏览器不能播放部分视频的问题(使用ffmpeg改变H264的Profile和Level)

@hanq  2022年08月08日 14:41

RT,iOS的默认浏览器在播放部分视频的时候,会出现无法播放的问题,从网络上找到的答案为:

苹果在支持H264的编码上仅支持部分压缩率: H.264 Baseline Level 3.0, Baseline Level 3.1, Main Level 3.1, and High Profile Level 4.1

查看视频的编码格式可以使用ffprobe,如果不想下载ffmpeg的情况下可以使用【mediainfo】进行查看。

所以就需要使用工具对视频进行转换,已知“格式工厂 5.12.1” 在转换视频格式的时候不进行profile和level的转换,“万兴优转13.5.4” 通过在iOS设备的播放测试,可以将视频的profile转为main,level转为4.1 ,但是需要收费,所以引出本文,基于ffmpeg修改视频的profile和level,来解决iOS系统浏览器不能播放视频的问题。

验证过的答案

使用ffmpeg 5.1 验证一顿之后,最终答案为(本指令自动覆盖已存在文件,缩放高度为720p):

ffmpeg -i i.mp4 -y -c:v h264 -pix_fmt yuv420p -profile:v high -level 4.1 -vf scale=-1:720 o.mp4

验证过程

首先从网上找到的各种方案:

ffmpeg -i i.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" o.mp4

报警告为:

[libx264 @ 0000028fa86dd580] Error parsing option 'profile = high'.

最终,还是以默认的High 10, level 3.0的方式去转换,iOS无法播放。

ffmpeg -i i.mp4 -profile:v high -level 5.1 o.mp4

这个报错为:

x264 [error]: high profile doesn't support a bit depth of 10
[libx264 @ 0000020e742faec0] Error setting profile high.
[libx264 @ 0000020e742faec0] Possible profiles: baseline main high high10 high422 high444
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

观察这个报错,貌似是跟bit depth有关,通过查找官方文档,搜索带-profile:v的字符端,找到与与之相关的参数:pix_fmt,最后拼装成上面的答案。

附录:


添加新评论