ffmpeg在淡入和淡出的歌曲上叠加语音

时间:2016-10-20 08:58:41

标签: ffmpeg overlay

我有淡入淡出问题并在代码下方使用,但未完全解决。 我的声音为voice.mp3,长度为voice_length秒,声音最大的歌曲。 我希望与start_mix_time时间的歌曲混音。 当语音起始音量应为0.2且语音结束时,音量将返回1.0

例如,如果我有一个长度为10秒的歌曲和一首歌曲,歌曲开始播放并且在3秒位置,开始淡出为0.2,然后在5秒时,语音从歌曲开始,10秒后,歌曲淡入第1卷并播放结束。

以下是一个示例:

ffmpeg -i song1.mp3 -i voice2.mp3  -filter_complex "[0]asplit[a][b]; \
        [a]atrim=duration=voice_length,volume='1-max(0.25*(t-start_mix_time-2),0)':eval=frame[pre]; \
        [b]atrim=start=start_mix_time,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

@Mulvya

2 个答案:

答案 0 :(得分:0)

对于给出的示例 - 在t = 3&之间,音量从1减小到0.2。 5然后从t = 15到17逐渐消失。

ffmpeg -i song.mp3 -i voice.mp3  -filter_complex 
        "[0]volume='1-max((t-start_fade_t)*0.8/2,0)':eval=frame:enable='between(t,3,5)',volume=0.4:eval=frame:enable='between(t,5,15)',volume='0.2+max((t-end_fade_t)*0.8/2,0)':eval=frame:enable='between(t,15,17)'[song]; \
         [1]adelay=5000|5000[vo]; \
         [song][vo]amix=inputs=2:duration=first:dropout_transition=0.01" \
       output.mp3

三首音量过滤器应用于歌曲 - 一个用于淡入,一个用于淡出,一个用于叠加。由于amix滤波器会减小其输入音量,因此叠加音量滤波器值将设置为所需音量的两倍。

答案 1 :(得分:0)

最后,通过这个解决了参数:

ffmpeg -i song.mp3 -i voice.mp3  -filter_complex \
    "[0]volume='1-((t-start_song_fade_out)*fade_power) + min_song_volume':eval=frame:enable='between(t,start_song_fade_out,end_song_fade_out)', \
    volume=min_song_volume:eval=frame:enable='between(t,end_song_fade_out,end_song_fade_out + voice_duration - 1)', \
    volume='(t-end_song_fade_out + voice_duration - 1)*fade_power + min_song_volume' \
    :eval=frame:enable='between(t,end_song_fade_out + voice_duration - 1,start_song_fade_in_back + end_song_fade_out-start_song_fade_out)' \
    [song]; [1]adelay='(end_song_fade_out*1000)'|'(end_song_fade_out*1000)'[vo]; \
    [song][vo]amix=inputs=2:duration=first:dropout_transition=0.01" -id3v2_version 3 output.mp3