我正在创建一堆脚本来轻松使用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作为第一个缩放滤镜的“输入宽度”和“输入高度”,但是当我尝试将其他任何东西作为颜色背景的尺寸时,它只会给我一个错误:< / p>
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
答案 0 :(得分:1)
看起来该工具在使用这些ih
和iw
符号时会有一些限制,这些符号会使它们变得无用。显而易见的事情是绕过所有那些残余并用脚本语言进行算术运算,将结果插入到命令行中。例如,如果您使用Bash编写脚本:
x=42
y=53
command "--option=$((2 * x + y))" # pass twice x plus y as value to --option
您可以运行ffmpeg -i <videofile>
以获取有关文件的信息,例如大小,并将其从工具的输出中解析出来。使用它来设置一些shell变量,并计算所需的任何因变量,然后在执行转码的$(( ...))
命令行中的所有正确位置替换变量或ffmpeg
公式。