Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Конвертация видео: форматы и кодеки

Конвертация видео: контейнер, кодек и совместимость

Конвертация видео: отличие контейнера от кодека, выбор кодека под задачу, совместимость с устройствами и проверка результата.

Прямой ответ

Контейнер определяет упаковку потоков, а кодек — способ сжатия, поэтому файл может менять контейнер без перекодирования видео.

Понятие Что определяет
Контейнер Формат упаковки видео и аудио
Видеокодек Способ сжатия видеопотока
Аудиокодек Способ сжатия аудиопотока
Профиль кодека Набор возможностей кодека
ffmpeg -i input.mkv -c copy output.mp4

Копирование потоков меняет контейнер без перекодирования, поэтому длительность и качество сохраняются. О кодеках и битрейте — в статье про сжатие видео.

Контейнер против кодека

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

Контейнер. Формат упаковки определяет, как потоки видео и аудио размещаются в файле, поэтому контейнер задаёт структуру файла.

Видеокодек. Способ сжатия определяет, как кадр кодируется, поэтому размер и качество зависят от кодека.

Расширение файла. Расширение соответствует контейнеру, поэтому расширение не указывает кодек видеопотока.

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

Отдельный аспект — смена контейнера без перекодирования. Потоки копируются в новый контейнер без декодирования, поэтому качество не меняется, но набор допустимых сочетаний кодека и контейнера ограничен.

Выбор кодека под задачу

Кодек выбирается по требованию к совместимости и объёму, поэтому универсального кодека для всех задач нет.

Широкая совместимость. Кодек с поддержкой большинством устройств выбирается при требовании воспроизведения без ограничений.

Эффективное сжатие. Кодек нового поколения даёт меньший объём при том же качестве, поэтому объём хранилища сокращается.

Поддержка аппаратного ускорения. Кодек, кодируемый аппаратно, обрабатывается быстрее, поэтому время кодирования сокращается.

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

Профиль кодека и проверка результата

Профиль кодека определяет набор возможностей, поэтому воспроизведение зависит от поддержки профиля устройством.

Профиль и уровень. Профиль задаёт возможности кодека, уровень ограничивает параметры потока, поэтому сочетание определяет совместимость.

Чтение параметров. Параметры выходного файла читаются отдельно, поэтому кодек, профиль и разрешение подтверждаются по факту.

Проверка воспроизведения. Файл проверяется на целевом устройстве, поэтому совместимость подтверждается, а не предполагается.

Практическое следствие: файл, закодированный профилем без поддержки устройством, не воспроизводится, хотя параметры выглядят корректно.

О командах обработки — в статье про FFmpeg; о потоковом транскодировании — в статье про транскодирование видео.

Практика: конвертация видео

1. Определяйте требуемый контейнер и кодек отдельно. Расширение файла соответствует контейнеру, поэтому кодек указывается явно.

2. Меняйте контейнер копированием потоков, когда сочетание допустимо. Качество не меняется, поскольку перекодирование не выполняется.

3. Выбирайте кодек по требованию к совместимости. Кодек с эффективным сжатием может не поддерживаться старыми устройствами.

4. Учитывайте аппаратное ускорение при объёмной обработке. Время кодирования сокращается при поддержке кодека аппаратно.

5. Задавайте профиль и уровень под целевое устройство. Воспроизведение зависит от поддержки профиля.

6. Читайте параметры выходного файла. Кодек, профиль и разрешение подтверждаются по факту.

7. Проверяйте воспроизведение на целевом устройстве. Совместимость подтверждается проверкой, а не параметрами.

Рекомендации:

  1. Не определяйте кодек по расширению файла. Расширение указывает контейнер, поэтому способ сжатия видеопотока остаётся неизвестным.
  2. Учитывайте ограничения сочетания кодека и контейнера. Не каждое сочетание допустимо при копировании потоков.
  3. Сопоставляйте эффективность сжатия с совместимостью. Кодек нового поколения сокращает объём, но может не воспроизводиться везде.
  4. Фиксируйте параметры кодирования в скрипте. Повторная конвертация даёт одинаковый результат.
  5. Пересматриваем выбор кодека при изменении целевых устройств. Новый набор устройств может требовать иного профиля.

Практический сценарий: файл не воспроизводился на целевом устройстве

Контекст: сконвертированный файл открывался на рабочем компьютере, но не воспроизводился на телевизоре, при этом параметры выглядели корректно.

  1. Диагностика. Чтение параметров показало, что видеопоток закодирован профилем высокого уровня, который целевое устройство не поддерживало. Контейнер и разрешение соответствовали требованиям, поэтому причина не была очевидна.
  2. Причина. Профиль и уровень кодека не задавались явно, поэтому кодирование выполнялось с параметрами по умолчанию, не поддерживаемыми устройством.
  3. Действия. (а) Задали профиль и уровень кодека явно под требования целевого устройства; (б) пересобрали конвертацию с параметрами совместимости и проверили воспроизведение на устройстве; (в) добавили чтение параметров выходного файла в скрипт, чтобы профиль подтверждался по факту; (г) зафиксировали допустимое сочетание контейнера и кодека для целевых устройств; (д) проверили несколько файлов и убедились в едином профиле кодирования.
  4. Результат. Файлы воспроизводятся на целевом устройстве, поскольку профиль кодека соответствует поддерживаемому.

Вывод: профиль и уровень кодека определяют совместимость с устройством, поэтому кодирование с параметрами по умолчанию может дать файл, не воспроизводимый на целевом устройстве. Явное задание профиля и проверка воспроизведения подтверждают совместимость.

FAQ

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

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

Как выбрать видеокодек? По требованию к совместимости и объёму. Кодек с эффективным сжатием сокращает объём, но может не поддерживаться старыми устройствами.

Почему файл может не воспроизводиться при корректных параметрах? Профиль либо уровень кодека не поддерживается устройством. Совместимость подтверждается проверкой воспроизведения.

Источники: FFmpeg codecs, FFmpeg formats, FFmpeg H.264 encoding guide — ссылки в шапке.