FFmpeg 在文本文件中传递参数

yaz*_*pro 2 ffmpeg

我试图绕过 Windows 中命令行长度的 32767 个字符限制(有时会小于该限制)。我有很多盒子,我想在视频上绘制它们。通常,我可以使用逗号 ( ,) 连接绘制命令,如下所示(以下命令绘制两个框):

ffmpeg -i input.mp4 -vf "drawbox=enable='between(t, 1.5, 4)' : x=100 : y=100 : w=200 : h=200 : color=green,drawbox=enable='between(t, 9, 18)' : x=500 : y=10 : w=150 : h=150 : color=red" -codec:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

然而,由于我有很多框要绘制,整个命令的长度变得太大。

FFmpeg 是否提供了一种在文本文件中传递所有参数而不是文字文本的方法?像这样的东西:

ffmpeg content(ffmpegCmd.txt)
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,是否可以将参数“缓冲”到单独的命令中,同时仅在最后一个命令中导出结果?

llo*_*gan 5

FFmpeg 是否提供了一种在文本文件中传递所有参数而不是文字文本的方法?

使用该-filter_complex_script选项。从文档中:

-filter_complex_script filename(全球的)

该选项与 -filter_complex 类似,唯一的区别是它的参数是要从中读取复杂过滤器图描述的文件的名称。

基本示例:

ffmpeg -i input -filter_complex_script filters.txt output
Run Code Online (Sandbox Code Playgroud)

  • 只是添加了一条让我对此感到困惑的注释。在发现“filter_complex_script”选项之前(它改变了我的生活!-sniff。)我一直通过使用环境变量和批处理构建字符串来构建过滤器图。环境变量的长度似乎有 8k 个字符左右的限制。我花了一些时间来研究这个问题,认为限制来自“FFMpeg”,而实际上是“CMD”导致批处理文件失败。 (2认同)