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,最后拼装成上面的答案。
另外,如果使用ffmpeg进行图片压缩也是可以的:
ffmpeg -i image_source -vf scale=width:height out_source
居中裁剪视频
ffmpeg -i video.mp4 -vf crop="100:100:(iw)/2:(ih)/2" video_crop.mp4
附录:
- 部分mp4视频在ios浏览器上无法播放
- What are the specifics of the video and audio formats supported
- FFmpeg基础知识之-—— H264编码profile & level控制 - 这个里边的指令并没有作用,但是可以学习一下
- FFMPEG常用命令 同上,但是发现了其他有意思的指令
- FFmpeg 不完全实战 同上
- ffmpeg Documentation - 这个是官方文档
- FFmpeg命令大全 - 这个里边也有pix_fmt的指令,印证了使用方式
- FFmpeg工具使用及参数说明
- Why does 10-bit save bandwidth (even when content is 8-bit)?