FFmpeg filter_complex concat 仅给出裁剪的第一个输入

Posted

技术标签:

【中文标题】FFmpeg filter_complex concat 仅给出裁剪的第一个输入【英文标题】:FFmpeg filter_complex concat gives only first input on crop 【发布时间】:2018-09-20 14:59:16 【问题描述】:

我在使用多输入多输出的 concat 和crop 时遇到了问题。这里是

ffmpeg -y \
-i input_1.mp4 \
-i input_2.mp4 \
-i input_3.mp4 \
-i input_4.mp4 \
-filter_complex "[0:v][1:v][2:v][3:v]concat=n=4:v=1:a=0[v];\
[v]crop=3840:1080:960:0[center];\
[v]crop=960:1080:0:0[left];\
[v]crop=960:1080:4800:0[right]" \
-map "[center]" -c:v libx264 -preset faster -b:v 20000k -an -pix_fmt yuv420p -tune zerolatency -tune fastdecode "Output_Center.mp4" \
-map "[left]" -c:v libx264 -preset faster -b:v 20000k -an -pix_fmt yuv420p -tune zerolatency -tune fastdecode "Output_Left.mp4" \
-map "[right]" -c:v libx264 -preset faster -b:v 20000k -an -pix_fmt yuv420p -tune zerolatency -tune fastdecode "Output_Right.mp4"

因此我将 4 个输入连接到 1 个流 [v],然后将某些部分裁剪为 [center]、[left] 和 [right]

对于第一个输出(中心),它按预期工作,输出视频持续时间是正确的(1 + 2 + 3 + 4 个输入持续时间),但对于左右输出持续时间完全匹配第一个输入的持续时间。

我也尝试使用 [v1] 作为 concat 的输出,但没有帮助

【问题讨论】:

【参考方案1】:

中间过滤器垫输出不能重复使用。对于多次使用,为输出添加具有不同标签的拆分,即

-filter_complex "[0:v][1:v][2:v][3:v]concat=n=4:v=1:a=0,split=3[v1][v2][v3];\
[v1]crop=3840:1080:960:0[center];\
[v2]crop=960:1080:0:0[left];\
[v3]crop=960:1080:4800:0[right]" \

【讨论】:

有趣的是为什么我不能使用这个输入两次,因为裁剪工作得很好,但只有第一次输入。看起来 split 不会对性能产生太大影响。无论如何,谢谢你的回答 @Gyan 如果我想同时使用splitasplit 怎么办? -filter_complex "[0:v][1:v][2:v][3:v]concat=n=4:v=1:a=1,split=3[v1][v2][v3],asplit=3[a1][a2][a3] 产生错误 too many inputs for split [0:v][1:v][2:v][3:v]concat=n=4:v=1:a=1[v][a];[v]split=3[v1][v2][v3];[a]asplit=3[a1][a2][a3]

以上是关于FFmpeg filter_complex concat 仅给出裁剪的第一个输入的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg filter_complex concat 仅给出裁剪的第一个输入

FFmpeg命令行语法之-filter_complex (Android环境)

ffmpeg - 使用 -filter_complex 对视频素材进行颜色分级并将原始源显示为画中画

ffmpeg画中画效果

FFMPEG使用filter-complex的多个命令

FFmpeg教程(超级详细版)