Но мне интересно, есть ли способ определить "хороший" целевой битрейт…
Хорошая целевая скорость передачи - это скорость передачи, которая либо:
- поддерживается сетью, из которой вы транслируете материал (например, сеть 3G, домашний WiFi и т. д.), которую довольно легко рассчитать
- выглядит хорошо для вас, что является очень субъективной мерой
22 Мбит / с или 45 Мбит / с действительно достаточно высоки для среднего пользователя, особенно для уже сжатого видео, такого как h.264. Вы можете определенно пойти дальше и снизить скорость передачи данных до "нормального" значения, всегда в зависимости от того, какой объем памяти вы можете себе позволить и какое качество вы хотите потерять.
Вы также можете изменить размер видео 1080p до 720p, если вам действительно не нужен размер или нет возможности обработки для его редактирования.
... или если есть смысл пытаться сделать переменную битрейт
Суть постоянной скорости передачи данных заключается в адаптации к сценарию потокового мультимедиа, в котором существует узкое место, ограничивающее максимальную скорость передачи передаваемого видео. В современном мире мультимедиа это уже не обязательно имеет смысл.
Когда вы сжимаете видео в постоянное количество бит в секунду, вы в основном указываете кодировщику всегда использовать одинаковое количество бит для кодирования одного и того же временного кадра. Это лучший подход? Как вы уже догадались, это не так. Цитирую руководство по CRF от Handbrake (я вернусь к этому позже):
Глаз воспринимает больше деталей в неподвижных объектах, чем когда они находятся в движении. Из-за этого видео компрессор может применять большее сжатие (отбрасывать больше деталей), когда вещи движутся, и применять меньшее сжатие (сохранять больше деталей), когда вещи все еще остаются. Субъективно видео будет казаться более качественным.
Таким образом, имеет смысл использовать переменную скорость передачи данных , когда вы можете. Это сделает видео лучше, даже при том же размере файла видео с постоянной скоростью.
Более того, большинство кодеров - самый известный из которых x264 - часто работают очень плохо, когда вы говорите им использовать постоянную скорость передачи данных. Лучше дать им немного больше "свободы" в том смысле, сколько бит они хотят потратить на кадр. В конце концов, это работа кодировщика, а не вас. И это называется "постоянное качество".
Достаточно этого - что это означает на практике? Если вы используете FFmpeg для кодирования видео, то вы уже используете достаточно хороший инструмент. Если у вас теперь также установлен x264, и вы используете последнюю версию обоих, то вы используете один из лучших кодеров, который в настоящее время доступен бесплатно. Вместо кодирования с фиксированной скоростью передачи, пусть x264 выбирает, сколько он хочет потратить. Сделайте это с помощью параметра Коэффициент постоянной скорости .
В очень простом случае это означает установку значения между 17 и 23. Я выбрал MP4 в качестве выходного контейнера вместо MOV, потому что есть лучшие инструменты для ремультиплексирования:
ffmpeg -i input.mov -c:v libx264 -crf 22 output.mp4
Чем ниже значение, тем лучше качество и тем больше выход. И наоборот, чем выше, тем ниже качество. В то же время вы, конечно, уменьшите необходимую среднюю скорость передачи данных. Обратитесь к руководству по кодированию x264 для получения дополнительной информации о ffmpeg
.
Ваша задача сейчас найти значение CRF, которое:
- снижает общую скорость передачи данных до уровня, который вы можете себе позволить
- не слишком сильно снижает качество, поэтому видео выглядит хорошо
Да, это требует большого количества кодирования и проб и ошибок, но это ежедневный бизнес, когда вы настраиваете и кодируете видео.
Да, и если вам не нравится командная строка, Handbrake - это бесплатный кроссплатформенный инструмент, который делает то же самое. Он даже имеет слайдер CRF: