由于FFmpeg的amerge滤镜导致的iOS中无法载入视频

当使用ffmpeg的amerge滤镜将单声道视频与立体声音乐混合时,生成的视频在iOS上可能出现无法播放的问题,原因是音频流变成了3声道,而iOS不支持。解决方法是通过ffmpeg将视频强制转码为立体声或单声道。具体命令为:ffmpeg -i issue.mp4 -c:v copy -ac 2 ok.mp4。确保音频声道数兼容iOS设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文出处:http://blog.youkuaiyun.com/chaijunkun/article/details/114550352,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。

amerge引发的问题

一段视频,在合成后可能需要增加一段背景音乐来烘托气氛。然而在使用amerge进行混音时,如果不小心会出现问题。

例如将合成好的视频通过AirDrop发送到iOS(因为这样无损),或者通过其他手段传送到移动设备时,可能会无法播放。
在iOS中可能会看到类似下面的提示:

在这里插入图片描述

如何复现

制作一段视频,其中的音频流一定要为单声道(mono);
准备一段背景音乐,一定要立体声(stereo);
使用ffmpeg进行音视频合成,即给上面的视频尝试增加一个背景音乐。滤镜方面使用amerge滤镜。

具体命令为:

ffmpeg -i video.mp4 -i bgm.mp3 -filter_complex "[0:a][1:a]amerge=imputs=2" issue.mp4

此时将输出的issue.mp4通过AirDrop发送到iOS上,这个问题必现(本例运行版本为:FFmpeg 4.3.1)。而video.mp4发送到iOS上可以正常播放。

分析原因

使用ffprobe查看video.mp4的音频流:

ffprobe -show_streams -of json video.mp4

其中注意音频流的流信息,尤其是声道数:

"channels": 1,
"channel_layout": "mono"

同样使用ffprobe查看背景音乐bgm.mp3的音频流:

ffprobe -show_streams -of json bgm.mp3

其中的音频流声道数为:

"channels": 2,
"channel_layout": "stereo"

再来看看合成后的视频issue.mp4的音频流:

ffprobe -show_streams -of json issue.mp4

其中的音频流声道数为:

"channels": 3,
"channel_layout": "3.0"

问题出现了,合成后的音频并没有像预期中那样,使用立体声或者单声道,而是变成了3声道
iOS无法播放这样一个3声道的音频

解决方法

把视频强制转换成立体声或者单声道就可以了。具体命令为:

ffmpeg -i issue.mp4 -c:v copy -ac 2 ok.mp4

注意:千万不要使用-c copy或者-c:a copy,这样会覆盖-ac强制声道选项。

当然,上面的情况只是一种。本质是视频格式不兼容。如果希望保留内容,解决办法都是建议重新转码。详细的mp4视频在iOS下的兼容情况,可以参阅:iOS流媒体指导FAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值