2013-11-14 65 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