Я использую 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 автоматически, я хочу, чтобы команда могла сравнивать установленное разрешение. Если исходное разрешение видео меньше, просто пропустите его, нет смысла создавать или масштабировать файл, размер которого больше исходного разрешения. Выводите только то же или меньшее разрешение, сохраняя соотношение сторон (уменьшите, чтобы соответствовать). Было бы здорово, если бы вы могли помочь мне в этом, спасибо еще раз.
источник
Ответы:
Это можно сделать, используя фильтр обрезки, который не будет работать, если обрезанные выходные размеры будут больше, чем входные. Если команда не выполняется, выходной файл будет создан, но его размер будет равен 0.
Каждый вариант нужно будет конвертировать с помощью отдельной команды. Невозможно использовать одну команду, так как при сбое одного из конвейеров вся команда отменяется.
Фильтр обрезки должен использоваться следующим образом:
Ширина обрезки совпадает с шириной ввода. Высота обрезки устанавливается на максимум входной высоты и целевой высоты. Если высота ввода меньше целевой, инициализация фильтра обрезки завершится неудачно, и команда будет прервана. Если входная высота равна или больше, то полная ширина и высота передаются в фильтр масштаба.
источник