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
这是我的要求
所以输出视频的音频应该包含
- 前 10 秒 (12:50 - 13:00) 是录制事件视频的音频
- 接下来的 20 秒 (13:00 -13:20) 是合并的音频(原始音频 + 原始视频,其中原始视频的音量为 .3)
- 视频剩余10秒(13:21-13:30)将播放视频的剩余音频
我通过上面的命令得到了什么
- 前 10 秒 (12:50 - 13:00) 是录制事件视频的音频 已实现
- 接下来的 20 秒 (13:00 -13:20) 是合并的音频(原始音频 + 原始视频,其中原始视频的音量为 .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]"
我想要这样的输出视频,其中输出的音频是使用 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
这是我的要求
所以输出视频的音频应该包含
- 前 10 秒 (12:50 - 13:00) 是录制事件视频的音频
- 接下来的 20 秒 (13:00 -13:20) 是合并的音频(原始音频 + 原始视频,其中原始视频的音量为 .3)
- 视频剩余10秒(13:21-13:30)将播放视频的剩余音频
我通过上面的命令得到了什么
- 前 10 秒 (12:50 - 13:00) 是录制事件视频的音频 已实现
- 接下来的 20 秒 (13:00 -13:20) 是合并的音频(原始音频 + 原始视频,其中原始视频的音量为 .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]"