FFMPEG - ширина / высота не делится на 2 (масштабирование для генерации вывода MBR) - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать несколько вариантов видео в моей библиотеке (форматы Mp4), и у меня запланированы передачи в диапазоне от 1080p до 240p и популярные размеры между ними. Для этого я снимаю видео с разрешением AxB, а затем запускаю код (на bash), который масштабирует их до желаемых следующих размеров - 426x240 640x360 842x480 1280x720 1920x1080, с разными битрейтами, конечно, и затем снова сохраняет как Mp4.

Теперь, это прекрасно работает, если исходное видео имеет высоту и ширину, кратные 2, но код разбит на следующую строку для видео с нечетной шириной и высотой: -vf scale=w=${width}:h=${height}:force_original_aspect_ratio=decrease"

Где ' width 'и' height '- это желаемые (и жестко заданные) для каждой итерации: например, "426x240" и "640x360"

Ошибка: [libx264 @ 00000187da2a1580] width not divisible by 2 (639x360) Error initializing output stream 1:0 -- Error while opening encoder for output stream #1:0 - maybe incorrect parameters such as bit_rate, rate, width or height

Теперь подходы, описанные в этом, не работают для меня, так как я масштабирую - FFMPEG (libx264) "высота не делится на 2"

И я попробовал это тоже, но кажется, что все качества приобретают одинаковый размер - ffmpeg: ширина не делится на 2 (при соблюдении пропорций)

  • Вот как я пытался использовать вот этот: scale='bitand(oh*dar,65534)':'min(${height},ih)'

Пожалуйста, предложите, как решить эту проблему, учитывая, что: 1. У меня очень большая библиотека, и я не могу выполнить ручную замену для каждого видео 2. Мне нужно масштабировать видео и сохранять соотношение сторон

Спасибо!

PS: [Редактировать] Один из способов, который я вижу, это заполнение всех нечетных видео рост / вес с использованием второго сценария заранее. Это, однако, удваивает мое рабочее время и нагрузку. Я бы предпочел сохранить это в одном сценарии. Вот скрипт, который я вижу, который я могу использовать для заполнения: `` `ffmpeg -r 24 -i -vcode c libx264 -y -an -vf" pad = ceil (iw / 2) * 2: ceil (ih / 2) * 2 "` `(от: FFMPEG (libx264)" высота не делится на 2 ")

1 Ответ

0 голосов
/ 15 апреля 2020

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

например, для пэда,

scale=w=...,pad='iw+mod(iw\,2)':'ih+mod(ih\,2)'"

, например, для урожай,

scale=w=...,crop='iw-mod(iw\,2)':'ih-mod(ih\,2)'"
...