12

Мой Canon 60D создает.MOV файлы при записи видео, и я узнал, что.Контейнер MOV имеет видеопоток H264 и аудиопоток PCM.

Я использовал ffmpeg и GSpot, чтобы посмотреть некоторые из моих видео, и я вижу довольно высокие битрейты (22 000 кбит / с для 640x480, 45000 для 1920x1080).

Я хотел бы уменьшить размер файлов, но сохранить качество достаточно высоким. Я поиграл с самой простой вещью, которую я мог придумать, уменьшив скорость передачи данных, и это делает то, что я ожидал: сократить скорость передачи битов вдвое, а размер файла - около половины. Но мне интересно, есть ли способ определить "хороший" целевой битрейт, или есть ли смысл пытаться сделать переменный битрейт.

2 ответа2

21

Но мне интересно, есть ли способ определить "хороший" целевой битрейт…

Хорошая целевая скорость передачи - это скорость передачи, которая либо:

  • поддерживается сетью, из которой вы транслируете материал (например, сеть 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:

2

Попробуйте HandBrake CLI

Я хотел сжать некоторые файлы MOV и не хотел узнать все подробности о видео опциях. HandBrake CLI - это то, что я использовал. Предустановки хороши:

HandBrake предлагает жестко закодированные, заводские пресеты, которые точно соответствуют встроенным пресетам в MacGui.

В моем случае это сработало:

HandBrakeCLI -i input.MOV -o output.mp4 --preset="Normal"

Без предустановок выходной сигнал был очень маленьким, но не хорошего качества. "Обычная" предустановка выглядела хорошо для меня, но вы можете увидеть другие доступные с HandBrakeCLI --preset-list или настроить все параметры самостоятельно, если хотите.

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