ffmpeg:结合filter_complex trim,overlay和concat

时间:2015-10-01 09:16:23

标签: video filter ffmpeg overlay

我尝试将不同的视频和音频剪辑与修剪和顶部的徽标结合起来。

我的语法如下:

ffmpeg -i "$introVid" -i "$introAud" -i "$mainVid" -i "$mainAud" -i "$outroVid" -i "$outroAud" -i "$logo" -i "$mainVid" -i "$mainAud" \
-filter_complex \
"[2:0]trim=0.4:60[trimV1]; \
 [3:0]atrim=0.4:60[trimA1]; \
 [trimV1][6:v]overlay=main_w-overlay_w-20:15,fade=in:s=2:d=0.5:alpha=1,fade=out:s=60:d=0.5:alpha=1[fade]; \
 [7:0]trim=60.2:72[trimV2]; [8:0]atrim=60.2:72[trimA2]; \
 [0:0] [1:0] [fade] [trimA1] [4:0] [5:0] [trimV2] [trimA2] concat=n=4:v=1:a=1[cv][a]; \
 [cv]scale=864:480:flags=gauss:interl=0[scal]" \
-map "[scal]" -map "[a]" -pix_fmt yuv420p -c:v libx264 -preset fast -y "$out"

它主要起作用,但问题是我在第3个地方获得了与主视频相同长度的黑色视频。有趣的是,当我观察ffmpeg过程时,它会在1:26分钟的时间内短暂停留,然后跳到2:40分钟。通常,完整的测试视频大约需要1:30分钟。

我得到的输出目前是:

([intro][trimmed main with logo][black video][outro][credits])< - 黑色视频部分很多。

1 个答案:

答案 0 :(得分:2)

没有新的pts,ffmpeg在修剪后计算错误的时间。当视频中的某些部分需要放置更多次时,也无需多次输入它们。

所以这是正确的语法:

ffmpeg -i "$introVid" -i "$introAud" -i "$mainVid" -i "$mainAud" \ 
-i "$outroVid" -i "$outroAud" -i "$logo" -filter_complex "\
[2:v]trim=0.4:$cut,setpts=PTS-STARTPTS[trimV1]; \
[3:a]atrim=0.4:$cut,asetpts=PTS-STARTPTS[trimA1]; \
[trimV1][6:v]overlay=main_w-overlay_w-20:15, \
fade=in:0:25,fade=out:$cuf:25[fade]; \
[2:v]trim=$cut:$len,setpts=PTS-STARTPTS[trimV2]; \
[3:a]atrim=$cut:$len,asetpts=PTS-STARTPTS[trimA2]; \
[0:v] [1:a] [fade] [trimA1] [4:v] [5:a] [trimV2] [trimA2] \ 
concat=n=4:v=1:a=1[cv][a]; \
[cv]scale=864:480:flags=gauss:interl=0[scal]" \
-map "[scal]" -map "[a]" -pix_fmt yuv420p -c:v libx264 -preset fast -y "out.mp4"