【问题标题】:Variable size for ffmpeg filterffmpeg 过滤器的可变大小
【发布时间】:2013-11-15 17:06:06
【问题描述】:

我正在创建一堆脚本来轻松使用 ffmpeg。

我的所有脚本现在都可以工作,但是很多值都是硬编码的,这使得他们想要视频的精确尺寸(854x240,我的测试视频的尺寸)

一个好例子胜于冗长的解释:

ffmpeg -i 0.mp4 -vf "
scale=854/2:-1 [low];
color=c=black@1.0:s=854x240:r=29.97:d=30.0 [bg];
movie=1.mp4, scale=854/2:-1 [high];
[bg][high] overlay=0:0 [bgh];
[bgh][low] overlay=854/2:-1" leftright.mp4

它需要 0.mp4 和 1.mp4 并将它们并排放在同一个视频中。但是维度值是硬编码的。但它有效。

我知道我可以使用 iw 和 ih 作为第一个比例过滤器的“输入宽度”和“输入高度”,但是当我尝试将其他任何东西作为颜色背景的尺寸时,它只会给我一个错误:

Unable to parse option value "iw:ih" as image size
Unable to parse option value "iw:240" as image size
Unable to parse option value "860*2:240" as image size

最后我又放了 1720x240,这真的很糟糕。

有没有办法绕过这个,或者输入依赖值?

编辑:

从视频 1.mp4 (854x240) 和 2.mp4 (520x520)(示例值)开始,将它们并排放在 out.mp4 中(在这种情况下,尺寸为 max(height)x(2xmax( width)),因此在本例中为 854x1040),背景为黑色。

  ax
<---->
.____.^
|    ||
|  1 ||
|    ||ay
|    ||
|____|V

    bx
<-------->
.________.^
|   2    ||by
|________|V

最终会变成

ay>ax
bx>by

    bx        bx
<--------><-------->
xx.____.xxxxxxxxxxxx^
xx|    |xxxxxxxxxxxx|
xx|  1 |xx.________.|
xx|    |xx|    2   ||ay
xx|    |xx|________||
xx|____|xxxxxxxxxxxxV

【问题讨论】:

  • color 视频源过滤器不使用iwih。也许您可以改用pad 视频过滤器。如果您包含完整的 ffmpeg 控制台输出和代表您所需输出的图像,我可能会给您一个确切的命令。
  • @LordNeckbeard 这个脚本的目标是,从两个已知(但变量)维度的 mp4 视频开始,将它们并排放置(一个在左侧,一个在右侧,高度高视频和宽度 = 高视频的 2 倍宽度),背景为黑色。
  • @LordNeckbeard 查看编辑

标签: video ffmpeg


【解决方案1】:

看起来该工具在使用这些 ihiw 符号方面存在一些限制,导致它们无用。显而易见的事情是绕过所有这些繁琐的工作,并在您的脚本语言中进行算术运算,将结果插入到命令行中。例如,如果您在 Bash 中编写脚本:

x=42
y=53
command "--option=$((2 * x + y))" # pass twice x plus y as value to --option

您可以运行ffmpeg -i &lt;videofile&gt; 来获取有关文件的信息,例如大小,并将其从工具的输出中解析出来。使用它来设置一些 shell 变量,并计算您需要的任何因变量,然后在执行转码的 ffmpeg 命令行中的所有正确位置替换变量或 $(( ...)) 公式。

【讨论】:

  • 我会继续这样做,脚本将用于 bash 以外的其他语言,所以我只需要告诉其他开发人员替换字符串命令中的那些值。
猜你喜欢
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 2015-04-27
相关资源
最近更新 更多