1

Я использую FFMPEG для перекодирования видео, функция которого запускается автоматически. Я пытаюсь уменьшить масштаб видео до нескольких разрешений, сохраняя соотношение сторон (уменьшить до нужного размера). Если исходное разрешение видео меньше, чем разрешение, указанное в команде, пропустите перекодирование и прекратите создание выходного файла для этого конкретного разрешения.

Например:

У меня есть видео с разрешением 1920x1080

Выход:

  • 3840x2160 (Пропустить / Остановить)
  • 2560x1440 (Пропустить / Остановить)
  • 1920x1080 (перейдите к output-1080p.mp4)
  • 1280x720 (перейдите к output-720p.mp4)

Я перепробовал много команд, но ни одна из них не работает. Могу ли я узнать, есть ли команда, которая может этого добиться?

Ниже приведена последняя рабочая команда, которая у меня есть для FFMPEG. Извините, я новичок в FFMPEG, я понимаю, что текущая команда все еще далека от того, к чему я стремлюсь.

ffmpeg -i sample.mp4 -c:a copy -vf scale='min(2160\,iw):-2' -movflags +faststart out2160.mp4 -vf scale='min(1440\,iw):-2' -movflags +faststart out1440.mp4 -vf scale='min(1080\,iw):-2' -movflags +faststart out1080.mp4 -vf scale='min(720\,iw):-2' -movflags +faststart out720.mp4 -vf thumbnail -vf scale='min(500\,iw):-2' -vframes 1 thumb500.png -vf scale='min(270\,iw):-2' -vframes 1 thumb270.png

Если sample.mp4 имеет разрешение 1920x1080p или даже меньше, эта команда выведет следующие файлы:

  • out2160.mp4
  • out1440.mp4
  • out1080.mp4
  • out720.mp4
  • thumb500.png
  • thumb270.png

Поскольку я запускаю FFMPEG автоматически, я хочу, чтобы команда могла сравнивать установленное разрешение. Если исходное разрешение видео меньше, просто пропустите его, нет смысла создавать или масштабировать файл, размер которого больше исходного разрешения. Выводите только то же или меньшее разрешение, сохраняя соотношение сторон (уменьшите, чтобы соответствовать). Было бы здорово, если бы вы могли помочь мне в этом, спасибо еще раз.

1 ответ1

1

Это можно сделать, используя фильтр обрезки, который не будет работать, если обрезанные выходные размеры будут больше, чем входные. Если команда не выполнена, будет создан выходной файл, но его размер будет равен 0.

Каждый вариант нужно будет конвертировать с помощью отдельной команды. Невозможно использовать одну команду, так как при сбое одного из конвейеров вся команда отменяется.

Фильтр обрезки должен использоваться следующим образом:

ffmpeg -i sample.mp4 -c:a copy -vf crop=iw:'max(ih,2160)',scale=-2:2160 -movflags +faststart out2160.mp4 

Ширина обрезки совпадает с шириной ввода. Высота обрезки устанавливается на максимум входной высоты и целевой высоты. Если высота ввода меньше целевой, инициализация фильтра обрезки завершится неудачно, и команда будет прервана. Если входная высота равна или больше, то полная ширина и высота передаются в фильтр масштаба.

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