Что такое ffmpeg, avcodec, x264?

Из wiki я прочитал, что

FFmpeg - это проект свободного программного обеспечения, который создает библиотеки и программы для обработки мультимедийных данных. Наиболее заметными частями FFmpeg являются libavcodec, библиотека аудио/видео кодеков, используемая несколькими другими проекты, libavformat, мультия аудио/видео контейнеров и библиотека demux, и программу командной строки ffmpeg для перекодировки мультимедийных файлов.

Итак, ffmpeg является оберткой avcodec? И я часто слышу, что люди кодируют видео с помощью x264 с помощью ffmpeg. Итак, ffmpeg также является оберткой x264?

Как они связаны?

1 ответ

Прежде всего, чтобы очистить некоторые термины:

  • FFmpeg - это программный проект с большим количеством вовлеченных людей, Wiki, трекер ошибок, некоторое финансирование и т.д.
  • ffmpeg - один из инструментов, которые они предлагают (например, другие ffplay и qt-faststart).
  • Libav является вилкой проекта FFmpeg, который предоставляет двоичный файл avconv. Они оба развиваются независимо, но FFmpeg обычно сливается с Либавом, а не наоборот. (Некоторые могут сказать, что Libav страдает от NIH). Некоторые дистрибутивы решили отправить Libav вместо программ FFmpeg, в частности Ubuntu, что вызвало некоторую путаницу в переходный период, когда команда Libav по-прежнему была названа ffmpeg. Теперь Ubuntu снова использует "реальный" ffmpeg.

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

В то время как разработчики FFmpeg часто предоставляют свои собственные кодеры и декодеры, вы можете включить сторонние библиотеки, у которых есть обертки в libavcodec, чтобы "склеить" вместе FFmpeg и, скажем, x264, который является самым популярным кодировщиком H.264. Это часто делается, когда просто нет смысла "изобретать колесо", что было бы, если бы кто-то решил написать новый кодер H.264 с целью быть лучше, чем x264. В других случаях некоторые библиотеки могут не поставляться с конструкцией ffmpeg по причинам, связанным с лицензированием, например libfaac. В этом случае ffmpeg предлагает собственный кодер AAC.

Общие внешние кодеры включают в себя:

  • libx264
  • libvpx (для видео VP8 и VP9)
  • libfaac, libfdk-aac, libvo-aacenc для аудио AAC
  • libmp3lame
  • libvorbis
  • libxvid

Для всех из них вы найдете обертки под libavcodec, например. для libx264, файл libx264.c содержит необходимый код, чтобы вывести видео из внутреннего формата FFmpeg в кодировщик x264, а затем передать это на libavformat для записи это в файл. Фактическое кодирование выполняется через libx264.

Как уже упоминалось ранее, другие кодеры, такие как для MPEG-4, являются родными для FFmpeg и вообще не полагаются на внешние библиотеки.

Наконец, существует несколько программ, в которых используются инструменты и библиотеки FFmpeg, будь то с помощью исполняемого файла ffmpeg или путем выбора частей libavcodec и библиотеки libavformat. Это разрешено по лицензии и делает FFmpeg самой популярной коллекцией мультимедийных инструментов сегодня.

licensed under cc by-sa 3.0 with attribution.