У меня есть файл с разрешением 3840x1632, но мой телевизор растягивает картинку по вертикали, чтобы заполнить все 2160 пикселей по высоте. Можно ли использовать ffmpeg для добавления пустой/черной высоты при сохранении качества видео и звука?
Попытался сделать это, что, похоже, сработало (заняло около 2 часов, такая же продолжительность видео), но значительно уменьшило размер файла/качество видео):
ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280" -c:a copy my_output_video.mkv
Есть ли переключатель, чтобы сказать «оставить все как есть»?
Спасибо!
Вам придется вручную установить параметры кодирования.
ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280,setsar=1" -crf 18 -preset faster -c:a copy my_output_video.mkv
Опция CRF устанавливает компромисс между размером и качеством. Меньшие значения дают лучшее качество, но файлы большего размера. Предустановка увеличит скорость, но при том же качестве размер файла будет больше.
Фильтр setsar был добавлен в качестве меры предосторожности на тот случай, если ваш проигрыватель считывает SAR, хранящийся в файле, и растягивает видео на основе этого значения.
Вы можете выполнять преобразования с помощью -c:v libx264 -crf 0
X264, у него есть режим без потерь, в который он входит с помощью -crf 0
. Они реализовали реальное кодирование видео без потерь, об этом мало кто знает, но работает отлично.
Я использую это все время.
Будьте готовы - это занимает гигабайты - особенно для видео из реальной жизни (не графика и т. д.)
Выполнение записи экрана для программ и графических изображений в -crf 0
— идеальное решение — оно очень хорошо их сжимает и использует относительно небольшую мощность процессора.
Вы также можете контролировать сложность используемого сжатия с помощью предустановок ( fast
, veryslow
... и т. д.). И вы также можете рекомпрессировать файлы без потерь в более сжатые файлы без потерь.
Для без потерь все то же самое, что и для всех x264, за исключением того, что это настоящий без потерь.
ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280,setsar=1" -c:a copy -c:v libx265 -x265-params lossless=1 my_output_video.mkv
----------111111111----------------2222-3333-4-555----------------------------------------------------------6666666666666666666
Legend
1 - input filename
2 - Target X dimension
3 - Target Y
4 - Bar's target X pos. Best: Floor( (Target X - Current X) / 2) . If the value is 0, no vertical baps will be present.
5 - Bar's target Y pos. Best: Floor( (Target Y - Current Y) / 2) . If the value is 0, no horizontal baps will be present.
6 - output filename
Notes
-c:a copy is to maintain lossless-ness
-x265-params lossless=1 option is for lossless encoding. Adding -crf 0 is not required.
-c:v libx265 - added to reduce output video quality while maintaining lossless-ness
Floor() - means to floor DOWN where applicable (ideally, no non-integer calculations occur)
Мой пример команды для добавления полос от 1660x780 до 1920x1080,
ffmpeg -i input.mp4 -filter:v "pad=1920:1080:130:150,setsar=1" -crf 0 -c:v libx265 -x265-params lossless=1 my_output_video.mp4
Гьян
crf/qp 0
требуется.Антон Латуха