Я записываю свой рабочий стол с помощью 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
не похоже на работу.
ceil
Вместо этого я использую,trunc
чтобы получить более высокий номер пары в случае 16: 9 480pНа самом деле фильтр может справиться с этим напрямую. Вам нужно только перейти
-2
вместо-1
фильтра: напримерЯ был удивлен, узнав об этом в сообщении об ошибке 3 года назад .
источник
После долгих экспериментов похоже, что следующий фильтр применяется после того, как другие фильтры масштаба округляют ширину и высоту до 2.
Это в основном деление, округление, умножение, у меня просто не было правильного синтаксиса.
источник