2013-11-14 4 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, что очень плохо.

Есть ли способ обойти это или поставить значение, зависящее от ввода?

Edit:

Начиная с видео 1.mp4 (854x240) и 2.mp4 (520x520) (пример значения), положить их бок о бок в out.mp4 (который в этом случае будет иметь размер макс (высота) x (2xmax (ширина)), поэтому в этом случае 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

код [ '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 См. Edit – DrakaSAN

ответ

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>, чтобы получить информацию о файле, такие как размер, и разобрать его выхода инструмента. Используйте это, чтобы настроить некоторые переменные оболочки и вычислить любые зависимые переменные, которые вам нужны, затем замените переменные или $((...)) формулами во всех правильных местах в командной строке ffmpeg, которая выполняет перекодировку.

+0

Я пойду с этим, скрипт будет использоваться на других языках, кроме bash, поэтому мне просто нужно сказать другому develloper, чтобы заменить значение thoses в строковой команде. – DrakaSAN

Смежные вопросы