ffmpeg使用amix和adelay在歌曲上播放广告

时间:2016-04-16 12:46:29

标签: ffmpeg

我有两个mp3文件,一个很长,一个很短(一首歌和一个广告)。我需要广告在歌曲开始15秒后播放歌曲。我还需要在广告之前和之后稍微淡出/淡出歌曲的音量。我尝试过使用amix和adelay,但只是不能正确使用它。

这里有一些接近但又破碎的东西。

ffmpeg -i song.mp3 -i ad.mp3 -filter_complex "amix=inputs=2:duration=first:dropout_transition=2;adelay=0|15000" output.mp3

如何让广告与歌曲正确混合?

1 个答案:

答案 0 :(得分:2)

由于您希望歌曲在广告出现之前淡出一点,因此预先分割歌曲会更方便。

ffmpeg -i song.mp3 -i ad.mp3 \
       -filter_complex "[0]asplit[a][b]; \
                        [a]atrim=duration=15,volume='1-max(0.25*(t-13),0)':eval=frame[pre]; \
                        [b]atrim=start=15,asetpts=PTS-STARTPTS[song]; \
                        [song][1]amix=inputs=2:duration=first:dropout_transition=2[post]; \
                        [pre][post]concat=n=2:v=0:a=1[mixed]" \
       -map "[mixed]" output.mp3

音量表达式1-max(0.25*(t-13),0)从13秒开始以每秒25%的速度减小音量,因此当混音开始时音量减少到一半。由于您不知道amix过滤器在与广告混合时会减少歌曲的音量,如果结果不可接受,您将不得不尝试使用费率因子0.25