FFmpeg音频定时播放异常求助:指定时间播放却全部起始播放
问题分析与解决方案
原命令的核心问题有两个:
-itsoffset仅偏移输入文件的起始时间戳,但amix滤镜默认会忽略所有输入的时间偏移,强制将所有音频从时间0点开始混合amix=inputs=5参数设置错误,实际音频输入数量远大于5,导致大部分音频未被纳入混合处理
修正后的命令
使用 adelay 滤镜为每个音频添加指定延迟(单位:毫秒,1秒=1000毫秒),amix 会尊重延迟后的时间戳,实现音频按设定时间播放:
-y -i ./temp/background.mp4 \ -i ./temp/tts/0.mp3 \ -i ./temp/tts/1.mp3 \ -i ./temp/tts/10.mp3 \ -i ./temp/tts/11.mp3 \ -i ./temp/tts/12.mp3 \ -i ./temp/tts/13.mp3 \ -i ./temp/tts/14.mp3 \ -i ./temp/tts/2.mp3 \ -i ./temp/tts/3.mp3 \ -i ./temp/tts/4.mp3 \ -i ./temp/tts/5.mp3 \ -i ./temp/tts/6.mp3 \ -i ./temp/tts/7.mp3 \ -i ./temp/tts/8.mp3 \ -i ./temp/tts/9.mp3 \ -filter_complex " [1:a]adelay=1000|1000[a1]; [2:a]adelay=3000|3000[a2]; [3:a]adelay=4000|4000[a3]; [4:a]adelay=7000|7000[a4]; [5:a]adelay=8000|8000[a5]; [6:a]adelay=10000|10000[a6]; [7:a]adelay=12000|12000[a7]; [8:a]adelay=14000|14000[a8]; [9:a]adelay=15000|15000[a9]; [10:a]adelay=18000|18000[a10]; [11:a]adelay=20000|20000[a11]; [12:a]adelay=22000|22000[a12]; [13:a]adelay=23000|23000[a13]; [14:a]adelay=25000|25000[a14]; [15:a]adelay=27000|27000[a15]; [0:a][a1][a2][a3][a4][a5][a6][a7][a8][a9][a10][a11][a12][a13][a14][a15]amix=inputs=16:duration=longest[a] " \ -map 0:v -map [a] -c:v copy -c:a aac ./temp/withoutsubs.mp4
关键说明
adelay=X|X:第一个X是左声道延迟毫秒数,第二个是右声道;如果是单声道音频,可简化为adelay=Xamix=inputs=16:对应1个背景视频音频 + 15个MP3音频的总输入数量,需与实际音频输入数一致duration=longest:确保混合后的音频长度匹配视频或最长音频的长度,避免提前截断- 若无需保留背景视频的原音频,可删除
[0:a]输入,并将amix=inputs改为15
内容的提问来源于stack exchange,提问作者Kaeden
相关产品推荐
相关产品推荐

