Какие параметры я должен смотреть, чтобы уменьшить размер файла .MOV?

12

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

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

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

Уорд - Восстановить Монику
источник

Ответы:

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:

введите описание изображения здесь

slhck
источник
Что касается детализации движущегося объекта, не слишком ли часто она преувеличивается при сжатии видео, или я просто помню плохие примеры? Как заметное увеличение детализации после того, как камера перестает панорамировать и т. Д.
Даниэль Бек
На самом деле это довольно распространенное явление, известное как «стабилизирующие» проблемы. Например, когда вы видите исчезновение блочности. Это типично для сценария с низкой скоростью передачи битов, когда изменение разницы в движении происходит слишком быстро, чтобы управление скоростью могло адаптироваться. Я бы предположил, что двухпроходное кодирование может помочь здесь, но, вероятно, не так много. Я не знаю, возможно ли полностью избавиться от подобных артефактов.
slhck
В прошлом я использовал Handbrake, конвертируя DV avis из видеокамеры в DivX и mp4, но мне было проще работать с командной строкой, когда я пытался выяснить варианты перехода с .mov на h264 mp4s. Есть ли эквивалент -crf при создании DivX? (или это должен быть другой вопрос?)
Уорд - Восстановить Монику
@Ward Вы можете использовать -qscale. Для mpeg * шкала является линейной в диапазоне от 1 до 31 (31 - наихудшее качество), и удвоение значения приведет к получению примерно половины битрейта. Значение 2 можно считать примерно визуально без потерь. 3-5, как правило, хороший баланс, но, конечно, качество субъективно, и вам просто нужно его попробовать.
Llogan
Ницца! Некоторые вопросы. (1) что означает число, за которым следует «p» в «видео 1080p до 720p»? (2) x264 использует переменный битрейт, но почему параметр в ffmpeg называется коэффициентом постоянной скорости? Благодарность!
Тим
2

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

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

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

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

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

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

Натан Лонг
источник