Существует ли способ установить максимальный заключительный размер для преобразования видео с помощью ffmpeg (или какой-либо другой основанный на CLI видео преобразователь)?
Как то, если я имею видео 100 МБ и хочу преобразовать его в видео 10 МБ с возможным высшим качеством, полагая, что заключительный формат не важен.
Движение от 100 МБ до 10 МБ является немного нереалистичным 90%-м понижением размера, но я дам пример сокращения до 50 МБ, создающих видео H.264, которое является более разумным 50%-м сокращением размера, а также уменьшающий до 40 МБ с помощью HEVC.
Я использую следующий файл примера:
wget http://dl3.h265files.com/TearsOfSteel_720p_h265.mkv
Можно использовать этот файл примера для подтверждения следующих результатов, которые я дал и возможно экспериментирую немного далее сами. MediaInfo показывает следующее для этого загруженного файла:
mediainfo \
--Inform="General;Duration=%Duration/String3%\nFile size=%FileSize/String1%" \
TearsOfSteel_720p_h265.mkv
Duration=00:12:14.058 <-----
File size=101 MiB <-----
Стрелки, конечно, являются моим собственным! У Вас затем, возможно, есть 2 действительно хороших варианта:
1. Повторно закодируйте к H.264 (50 МБ)
H.264 широко принят теперь и был бы отличным выбором для Вашего выходного видеофайла. Формула для вычисления выходной скорости передачи для желаемых 50 МБ затем была бы:
(50 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~558 kBit/s total bitrate
558 - 128 kBit/s (desired audio bitrate) = 430 kBit/s video bitrate
Выполнять это использование следующая команда передачи FFmpeg 2:
ffmpeg -y -i TearsOfSteel_720p_h265.mkv \
-c:v libx264 -b:v 430k -pass 1 \
-c:a libmp3lame -b:a 128k -f mp4 /dev/null && \
ffmpeg -i TearsOfSteel_720p_h265.mkv \
-c:v libx264 -b:v 430k -pass 2 \
-c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4
Получающийся размер файла составляет 49.4 МиБ с довольно разумным, но не удивительный, просматривая качество. Довольно хороший для 50%-го сокращения размера файла и огромного понижения видео скорости передачи на самом деле!
2. Повторно закодируйте к HEVC (40 МБ)
Другой выбор (как предложено emk2203) состоит в том, чтобы повторно закодировать существующий поток HEVC более низкой скоростью передачи, на этот раз стремясь к 40 МБ, поскольку HEVC требует лучшего качества в более низкой скорости передачи.
На этот раз формула была бы:
(40 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~446 kBit/s total bitrate
446 - 128 kBit/s (desired audio bitrate) = 318 kBit/s video bitrate
и командная строка передачи FFmpeg 2:
ffmpeg -y -i TearsOfSteel_720p_h265.mkv \
-c:v libx265 -x265-params pass=1 -b:v 318k \
-c:a libmp3lame -b:a 128k -f mp4 /dev/null && \
ffmpeg -i TearsOfSteel_720p_h265.mkv \
-c:v libx265 -x265-params pass=2 -b:v 318k \
-c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4
И это предоставляет файлу 40 МБ довольно разумное качество.
В заключении:
От них пример можно экспериментировать далее путем уменьшения необходимого мебибайт в формуле и наблюдения последующего качества просмотра.развлекайтесь!!
Ссылки:
Да. Выберите видеокодек (x264 хороший универсальный), и выберите разрешение, оставьте большинство настроек в значении по умолчанию, но сделайте преобразование с 2 передачами со средней скоростью передачи набора.
Быстрый урок в сжатии видео: видео сложность изменяется всюду по видео, поэтому при сжатии до того же визуального уровня качества целого пути через фактическая скорость передачи собирается колебаться вверх и вниз. Если Вы сжимаетесь до фиксированной скорости передачи, качество будет плохим в битах высокой сложности, потому что скорость передачи является слишком низкой, и/или используемая скорость передачи будет слишком высока для частей низкой сложности. Таким образом, как, хотя Вы можете Вы позволять ему стремиться к постоянному качеству и позволить скорости передачи колебаться, как это может. Но если компрессор стремится к конкретному размеру файла, он не знает, собирается ли видео сложность повыситься, или вниз в частях он еще не преобразовал, таким образом, вот почему люди используют 2 преобразования передачи при стремлении к конкретному размеру файла.
Необходимо указать вывод как скорость передачи (аудио, и видео, плюс контейнер имеет небольшие издержки), таким образом, Вам нужен калькулятор для преобразования из размера файла и продолжительности к скорости передачи.