1

Мне нужно преобразовать набор неподвижных изображений (статические камеры, направленные на дорогу) в видео.

Я рассмотрел видео кодеки, такие как Theora, H.264, VP8, VP9, HEVC, Snow.

Видео должно иметь минимальный размер с максимальным качеством изображения. Теперь из всех доступных аргументов командной строки я использую частоту кадров (fps), b:v (битрейт) и s (ширина * высота). Также для H.264 и HEVC есть -crf и -preset .

Какие еще аргументы командной строки могут быть полезны для достижения того, что мне нужно? В ffmpeg десятки аргументов командной строки и их синтаксический анализ могут занять много времени.

1 ответ1

4

Если вам нужно высочайшее качество и минимальный размер файла, вы должны использовать кодек с эффективным сжатием. Однако сначала нужно подумать о том, хотите ли вы (математически) выполнить кодирование без потерь, визуально без потерь или с потерями:

  • Кодирование без потерь , конечно, приведет к увеличению размера файла, но дает преимущество сохранения исходных данных. Затем вы можете извлечь отдельные кадры из видео без потери качества. Здесь можно использовать такие кодеки, как HuffYUV или FFV1 . Они часто используются в архивных целях, где необходимо сохранить оригинальный материал и избежать потери поколения . libx264 (H.264), libx265 (HEVC) и libvpx-vp9 также могут использоваться в режиме без потерь:

    ffmpeg -i <input> -c:v huffyuv output.avi
    ffmpeg -i <input> -c:v ffv1 output.avi
    ffmpeg -i <input> -c:v libx264 -crf 0 output.mp4
    ffmpeg -i <input> -c:v libx265 -crf 0 output.mp4
    ffmpeg -i <input> -c:v libvpx-vp9 -lossless 1 output.webm
    
  • Визуально кодирование без потерь отбрасывает некоторые данные, но сохраняет качество таким образом, что люди, скорее всего, не заметят никакой разницы между исходным и закодированным видео. Для этой цели часто используются так называемые "промежуточные" кодеки, такие как ProRes (см. Здесь). Вы также можете сделать визуально кодирование без потерь с помощью libx265 или libx264 , указав достаточно низкое значение CRF (объяснение CRF здесь), например, между 10 и 18 для x264.

    ffmpeg -i <input> -c:v prores -profile:v 3 output.mov
    ffmpeg -i <input> -c:v libx264 -crf 10 -preset ultraslow output.mp4
    ...
    
  • Потерянные кодеки, их много. Если вы можете пожертвовать качеством, вы можете резко уменьшить размер файла. VP9 и HEVC более эффективны, чем H.264, с точки зрения того, сколько места им требуется, но для их кодирования может потребоваться больше времени. Забудьте про Theora и VP8. С VP9, HEVC и H.264 (по крайней мере, с кодировщиками, доступными в ffmpeg) вы можете установить параметр CRF, который даст вам желаемое качество. Вам необходимо визуально проверить свою продукцию, чтобы убедиться, что сумма потерь не слишком велика для вашей цели. Для libx264 значения CRF между 18 и 23 выглядят "хорошо".

    ffmpeg -i <input> -c:v libx264 -crf 23 -preset ultraslow output.mp4
    ffmpeg -i <input> -c:v libvpx-vp9 -crf 10 -b:v 0 output.webm
    ...
    

Как правило, если вы стремитесь к архивированию контента, вы не должны просто указывать целевой битрейт. Вместо этого вы хотите использовать режим постоянного качества, при котором кодировщик может использовать столько битов, сколько необходимо для сохранения качества изображения (в определенных пределах). Особенно с кодировщиками H.264 или HEVC libx264 и libx265 , использование -b:v для однопроходного кодирования не рекомендуется, так как это может привести к огромным изменениям качества с течением времени. (Я написал статью о различных режимах контроля скорости здесь.) Подводя итог, если вы архивируете, просто выберите постоянное значение CRF.

Также очень важно, чтобы вы не меняли размер видео, так как оно либо приводит к размытию (при масштабировании), либо выбрасывает данные (при уменьшении масштаба). Просто пропустите опцию -s:v если ваши изображения не слишком велики для видео.

Наконец, при выполнении визуального кодирования без потерь или с потерями, вы можете выбирать между скоростью сжатия и эффективностью сжатия. Другими словами, если вы будете ждать дольше, вы можете уменьшить размер файла. Здесь вступают в действие preset параметры: если вы выберете предустановку, такую как ultraslow , процесс кодирования займет много времени, но результирующий файл - при условии заданного CRF - будет меньше, даже если он имеет такое же качество. VP9 имеет различные варианты управления скоростью, см. Здесь.

Еще одна вещь: с libx264 , вы можете использовать -tune stillimage чтобы оптимизировать кодирование для изображений. Кроме того, выбор минимально необходимой частоты кадров поможет, конечно, сохранить размер файла.

Некоторая документация:

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