9

Я записываю свой рабочий стол с помощью avconv (он же ffmpeg), а затем масштабирую его до 720p.

Я недавно добавил в свой сценарий, чтобы они могли выбрать окно с xwininfo, и оно будет записывать это специально.

Однако, если выходной формат не делится на 2, кодер выходит из строя, и я не получаю свое видео.

Есть ли способ исправить это внутри ffmpeg, чтобы мне не пришлось делать кучу ручной математики в bash для установки значений шкалы?

Можно ли заставить фильтр масштаба вычитать / добавлять один к ширине / высоте, если они неравномерны? (круглый?)

Можно ли применить другой фильтр после исходного масштаба, который мог бы достичь этого? (Это будет округлять видео с неравным входным размером и без масштабирования)

#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@

Некоторые старые списки рассылки предлагают функцию round() вы можете использовать в фильтре, но я не могу понять синтаксис правильно. Если это scale=round(iw,2):round(ih,2) примененный в конце, решит все мои проблемы сразу. iw и ih , кажется, не работают.

3 ответа3

9

Поскольку деление на 2 иногда происходит в нечетных числах, оно должно быть:

-vf scale="trunc(oh*a/2)*2:720"

Это выполняет то, что нужно с синтаксисом -1:720 (сохранить исходное соотношение сторон)

7

После долгих экспериментов выглядит, как следующий фильтр, примененный после того, как другие фильтры масштаба округляют ширину и высоту до 2.

scale=trunc(in_w/2)*2:trunc(in_h/2)*2

В основном это деление, округление, умножение, у меня просто не было правильного синтаксиса.

6

На самом деле фильтр может справиться с этим напрямую. Вам нужно только передать -2 вместо -1 фильтру: например, -vf scale = "- 2: 720"

Я был удивлен, узнав об этом в отчете об ошибке 3 года назад.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .