2013-11-14 126 views
0

我创建了一堆脚本来轻松使用ffmpeg。ffmpeg过滤器的可变大小

所有我的剧本现在的工作,但很多的值是硬编码,这使他们想确切大小的视频(854x240,我的测试视频大小)

一个很好的例子是比长解释更好:

ffmpeg -i 0.mp4 -vf " 
scale=854/2:-1 [low]; 
[email protected]: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(在这种情况下将有尺寸最大(高度)×(2xmax(宽度)),因此在这种情况下为854×1040),黑色背景。

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

['color'](http://ffmpeg.org/ffmpeg-filters.html#color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc)视频源过滤器不使用'iw'和'ih '。也许你可以改用['pad'](http://ffmpeg.org/ffmpeg-filters.html#pad)视频过滤器。如果您包含完整的ffmpeg控制台输出以及代表您所需输出的图像,我可能会给出一个确切的命令。 – LordNeckbeard

+0

@LordNeckbeard此脚本的目标是从已知(但变量)维度的两个mp4视频开始,将它们并排放置(一个在左侧,一个在右侧,高视频的宽度和宽度= 2x宽度更高的视频),黑色背景。 – DrakaSAN

+0

@LordNeckbeard请参阅编辑 – DrakaSAN

回答

1

它看起来像工具在使用这些ihiw符号,使它们失效的一些限制。显而易见的事情就是绕过所有的错误,并用脚本语言进行算术运算,将结果插入命令行。举例来说,如果你在编写脚本的Bash:

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

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

+0

我将继续这样做,脚本将用于bash之外的其他语言,因此我只需告诉其他develloper在字符串命令中替换thoses值。 – DrakaSAN