2

Сегодня я заметил, что я могу кодировать или транскодировать видео и аудио потоки, используя ffmpeg без указания кодека, потому что кажется, что это подразумевает, что видео или аудио кодек кодируется или транскодируется из расширения вывода. Это означает, что:

ffmpeg "input.mp3" -c:a aac "output.m4a"

... можно заменить на:

ffmpeg "input.mp3" "output.m4a"

К тому же:

ffmpeg "input.dts" -c:a copy -ac 2 "output.dts"

... можно заменить на:

ffmpeg "input.dts" -ac 2 "output.dts"

Учитывая, что всегда явное включение кодека является наиболее популярным способом использования ffmpeg который я видел - в частности, на этом сайте - я задался вопросом, были ли причины для этого.

Есть ли какие-либо возможные подводные камни, которые следует учитывать при использовании ffmpeg для такого кодирования? Можно ли предположить, что это приведет к тому же преобразованию, что и явное указание кодека?

2 ответа2

3

Лучше всего указать кодировщик

  • Некоторые из вариантов по умолчанию являются устаревшими или странными. Например:

    • flv1 выбран для выхода FLV. Большинство людей ожидают H.264 (libx264).

    • flac выбран для вывода OGG/OGA. Большинство людей ожидают Vorbis (libvorbis).

  • Кодировщик, используемый по умолчанию для выходного формата, может зависеть от того, какие параметры конфигурации использовались для компиляции вашего ffmpeg . Так что если ваш ffmpeg не имеет --enable-libx264 , то для MP4 вместо libx264 (видео H.264) используется кодер mpeg4 (видео MPEG-4 Part 2). Большинство людей используют сборки ffmpeg с поддержкой самых популярных библиотек, но это случается иногда.

  • Это не так много работы, чтобы быть конкретным.

Но иногда ты можешь быть ленивым

Если вы знаете, какие кодировщики будут выбраны, или если вы проверяете и проверяете, то вы можете сохранить несколько нажатий клавиш, если хотите. Обратитесь к Stream mapping в выводе консоли, чтобы увидеть, какие кодеры использует ffmpeg . Пример:

ffmpeg -i input.foo output.mp4
...
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
  Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))

В этом случае он использует libx264 для видео (-c:v libx264) и собственный кодер AAC для аудио (-c:a aac).

Вы можете просмотреть сведения о конкретном мультиплексоре, чтобы увидеть, какие кодеки будут использоваться по умолчанию:

ffmpeg -h muxer=mp4
...
Muxer mp4 [MP4 (MPEG-4 Part 14)]:
    Default video codec: h264.
    Default audio codec: aac.
1

Можно ли предположить, что это приведет к тому же преобразованию, что и явное указание кодека?

Не обязательно. Это "безопасно" в том, что вы получите файл, который работает. Ffmpeg выберет предпочтительный кодек, который работает с этим контейнером. Однако, используя другое расширение файла, МОЖЕТ выбрать другой кодек. Также предпочтительный кодек может измениться в будущем или в зависимости от того, как был скомпилирован Ffmpeg.

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