FFMPEG 用 filter_complex 替换视频音频

FFMPEG replace video audio with filter_complex

我想要这样的输出视频,其中输出的音频是使用 ffmpeg -filter_complex 机制创建的,

/usr/local/Cellar/ffmpeg/3.2.2/bin/ffmpeg 
-i /uploads/videos/1487684390-lg9htt0RW2.mov 
-i /uploads/audios/1487664761-SCPbo6Tkac.mp3 
-filter_complex "
[0:a]atrim=0:8.70824980736,asetpts=PTS-STARTPTS[aud1]; 
[1:a]atrim=0:12.9567301273,asetpts=PTS-STARTPTS[aud2];
[0:a]volume=0.3,atrim=start=8.70824980736:21.6649799347,asetpts=PTS-STARTPTS[slow_aud]; 
[aud2][slow_aud] amerge=inputs=2[a_merged];
[0:a]atrim=start=21.6649799347:31.6410098076 [remaining_audio]; 
[aud1][a_merged][remaining_audio]concat=n=3:v=0:a=1[aout]" 
-map 0:v -map "[aout]" -c:v copy -acodec mp3 
/uploads/output/1487684390-lg9htt0RW2.mov

基于 UTC 时间戳录制的原始音频与基于 UTC 时间戳录制的原始视频

            13:00-------- Original Event Audio -------- 13:20
       12:50------------- Event Video Recorded --------------13:30

这是我的要求

所以输出视频的音频应该包含

  1. 前 10 秒 (12:50 - 13:00) 是录制事件视频的音频
  2. 接下来的 20 秒 (13:00 -13:20) 是合并的音频(原始音频 + 原始视频,其中原始视频的音量为 .3)
  3. 视频剩余10秒(13:21-13:30)将播放视频的剩余音频

我通过上面的命令得到了什么

  1. 前 10 秒 (12:50 - 13:00) 是录制事件视频的音频 已实现
  2. 接下来的 20 秒 (13:00 -13:20) 是合并的音频(原始音频 + 原始视频,其中原始视频的音量为 .3)已实现
  3. 视频剩余 10 秒(13:21-13:30)将播放视频的剩余音频未实现

您没有按照 concat 过滤器的要求重置剩余音频的时间戳。所以,应该是

[0:a]atrim=start=21.6649799347:31.6410098076,asetpts=PTS-STARTPTS[remaining_audio]; 

获得相同结果的更短方法是

-filter_complex
"[1:a]adelay=12956.7301273|12956.7301273[mp3];
 [0:a]volume=0.3:enable='between(t,8.70824980736,21.6649799347)'[vid];
 [vid][mp3]amix[aout]"