Введение
Мультимедийный фреймворк FFmpeg — это свободный проект с открытым исходным кодом, состоящий из набора библиотек и программ для работы с видео, аудио и другими мультимедийными файлами и потоками. В его основе лежит инструмент ffmpeg командной строки, предназначенный для обработки видео- и аудиофайлов. Он широко используется для транскодирования форматов, базового редактирования (обрезки и склейки), масштабирования видео, применения эффектов видеопостобработки и обеспечения соответствия стандартам (SMPTE, ITU). FFmpeg также включает в себя другие инструменты: ffplay — простой медиаплеер и ffprobe — инструмент командной строки для отображения информации о медиафайлах. Среди включенных библиотек — libavcodec, библиотека аудио- и видеокодеков, используемая многими коммерческими и бесплатными программными продуктами, libavformat (Lavf), библиотека мультиплексоров и демультиплексоров аудио- и видеоконтейнеров, и libavfilter, библиотека для фильтров улучшения и редактирования, использующая графы фильтров, подобные Gstreamer. FFmpeg является частью рабочего процесса многих других программных проектов, а его библиотеки составляют основу программных медиаплееров, таких как VLC, и используются в основной обработке видео на YouTube и Bilibili. В него включены кодировщики и декодировщики для множества аудио- и видеоформатов, что делает его чрезвычайно полезным для транскодирования как распространенных, так и редких медиафайлов. FFmpeg распространяется под лицензией LGPL 2.1 или более поздней версии, либо под лицензией GPL 2.0 или более поздней версии, в зависимости от выбранных опций.
FFmpeg is a free and open source software project consisting of a suite of libraries and programs for handling video, audio, and other multimedia files and streams. At its core is the command line ffmpeg tool itself, designed for processing of video and audio files. It is widely used for format transcoding, basic editing (trimming and concatenation), video scaling, video post production effects and standards compliance (SMPTE, ITU). FFmpeg also includes other tools: ffplay, a simple media player and ffprobe, a command line tool to display media information. Among included libraries are libavcodec, an audio/video codec library used by many commercial and free software products, libavformat (Lavf), an audio/video container mux and demux library, and libavfilter, a library for enhancing and editing filters through a Gstreamer like filtergraph. FFmpeg is part of the workflow of many other software projects, and its libraries are a core part of software media players such as VLC, and has been included in core processing for YouTube and Bilibili. Encoders and decoders for many audio and video file formats are included, making it highly useful for the transcoding of common and uncommon media files. FFmpeg is published under the LGPL 2.1 or later or GPL 2.0 or later, depending on which options are enabled.
История
Проект был запущен Фабрисом Беллардом. Некоторые разработчики FFmpeg также участвовали в проекте MPlayer. Название проекта вдохновлено группой стандартов видео MPEG, а также аббревиатурой "FF", означающей "быстрая перемотка", поэтому FFmpeg расшифровывается как "Fast Forward Moving Picture Experts Group". Логотип представляет собой зигзагообразный шаблон сканирования, демонстрирующий, как видеокодеки MPEG обрабатывают энтропийное кодирование. 13 марта 2011 года группа разработчиков FFmpeg приняла решение создать форк проекта под названием Libav. Это было связано с проблемами в управлении проектом, в частности с разногласиями разработчиков с руководством FFmpeg. 10 января 2014 года два сотрудника Google сообщили, что за предыдущие два года в FFmpeg было исправлено более 1000 ошибок с помощью фаззинга. В январе 2018 года была удалена программа командной строки ffserver – компонент FFmpeg, существовавший на протяжении долгого времени. Разработчики ранее признали программу устаревшей, ссылаясь на высокие затраты на её поддержку из-за использования внутренних интерфейсов прикладного программирования. В среднем проект выпускает новый релиз каждые три месяца. Хотя релизные версии доступны для загрузки с веб-сайта, разработчики FFmpeg рекомендуют пользователям компилировать программное обеспечение из исходного кода, используя последнюю сборку из их системы контроля версий Git.
История кодеков
В рамках проекта FFmpeg на данный момент созданы два формата видеокодирования с соответствующими кодеками и один контейнерный формат. Два видеокодека – это без потерь FFV1 и кодек Snow, поддерживающий как кодирование без потерь, так и с потерями. Разработка Snow приостановлена, а его формат битового потока еще не завершен, что делает его экспериментальным с 2011 года. Формат мультимедийного контейнера NUT больше не находится в активной разработке, но все еще поддерживается. Летом 2010 года разработчики FFmpeg Фиона Глейзер, Рональд Бултье и Дэвид Конрад объявили о декодере ffvp8. В ходе тестирования они выяснили, что ffvp8 работает быстрее, чем собственный декодер libvpx от Google. Начиная с версии 0.6, FFmpeg также поддерживает WebM и VP8. В октябре 2013 года в FFmpeg были добавлены декодер VP9 и OpenHEVC – декодер с открытым исходным кодом High Efficiency Video Coding (HEVC). В 2016 году нативный кодировщик AAC был признан стабильным, что привело к удалению поддержки двух внешних кодировщиков AAC от VisualOn и FAAC. FFmpeg 3.0 (с кодовым именем "Эйнштейн") сохранил поддержку сборки кодировщика Fraunhofer FDK AAC. С версии 3.4 "Cantor" FFmpeg поддерживает формат изображений FITS. С ноября 2018 года, в версии 4.1 "аль-Хорезми", AV1 можно мультиплексировать в MP4 и Matroska, включая WebM.
Инструменты командной строки
ffmpeg — это инструмент командной строки для преобразования аудио- и видеоформатов. Он также может осуществлять захват и кодирование в реальном времени из различных аппаратных и программных источников, таких как карта видеозахвата. ffplay — простой медиаплеер, использующий SDL и библиотеки FFmpeg. ffprobe — инструмент командной строки для отображения информации о медиафайлах (в формате текста, CSV, XML, JSON), также см. Mediainfo.
Специальное оборудование
Существует множество специализированных интегральных схем (ASIC) для сжатия и декомпрессии аудио/видео. Эти ASIC могут частично или полностью переносить вычислительную нагрузку с центрального процессора. Для использования такого ASIC вместо полной реализации алгоритма требуется только API. Поддерживаемые FFmpeg ASIC и их особенности: AMD UVD – декодирование через VDPAU API и VAAPI. VCE – кодирование через VAAPI, считается экспериментальным. Amlogic – Amlogic Video Engine – декодирование (информация отсутствует). BlackMagicDeckLink – кодирование/декодирование в реальном времени для приема и воспроизведения видео. Broadcom – Crystal HD – декодирование. QualcommHexagon – кодирование/декодирование с аппаратным ускорением (hwaccel). Intel – Intel Clear Video – декодирование (libmfx, VAAPI). Intel Quick Sync Video – кодирование/декодирование (libmfx, VAAPI). Nvidia – PureVideo / NVDEC – декодирование через VDPAU API начиная с FFmpeg v1.2 (устарело), через CUVID API начиная с FFmpeg v3.1. NVENC – кодирование начиная с FFmpeg v2.6.
Также поддерживаются следующие API: DirectX Video Acceleration (DXVA2, Windows), Direct3D 11 (D3D11VA, Windows), Media Foundation (Windows), VideoToolbox (macOS), RockChip MPP, OpenCL, OpenMAX, MMAL (Raspberry Pi), MediaCodec (Android OS), V4L2 (Linux). В зависимости от окружения, эти API могут использовать конкретные ASIC, GPGPU-рутины или SIMD-инструкции процессора.
Форматы изображений
FFmpeg поддерживает множество распространенных и некоторые редкие форматы изображений. Формат изображения PGMYUV — это самодельный вариант двоичного (P5) формата PGM Netpbm. FFmpeg также поддерживает 16-битную глубину цвета форматов PGM и PPM, а также двоичный (P7) формат PAM с альфа-каналом или без него, глубиной 8 или 16 бит для цветовых моделей monob, gray, gray16be, rgb24, rgb48be, ya8, rgba, rgb64be.
Поддерживаемые фильтры
FFmpeg поддерживает, в частности, следующие фильтры.
Поддерживаемые носители и интерфейсы
FFmpeg поддерживает следующие устройства посредством внешних библиотек.
Юридические аспекты
FFmpeg содержит более 100 кодеков, большинство из которых используют те или иные методы сжатия. Многие из этих методов сжатия могут являться объектом юридических претензий, связанных с программными патентами. Эти претензии могут быть применимы в странах, таких как Соединенные Штаты, где программные патенты действуют, но считаются недействительными или неисполнимыми в странах-членах Европейского Союза, например. Срок действия патентов на многие старые кодеки, включая AC3 и все кодеки MPEG 1 и MPEG 2, истек. FFmpeg лицензируется под лицензией LGPL, однако если конкретная сборка FFmpeg связана с какой-либо библиотекой GPL (в частности, x264), то вся бинарная программа лицензируется под лицензией GPL.
Проекты с использованием FFmpeg
FFmpeg используется в таких программах, как Blender, Cinelerra GG Infinity, HandBrake, Kodi, MPC HC, Plex, Shotcut, VirtualDub2 (ответвление VirtualDub), VLC media player, xine и YouTube. Он обеспечивает воспроизведение видео и аудио. Для FFmpeg разработаны графические интерфейсы Google Chrome, включая Multimedia Xpert и XMedia Recode. FFmpeg применяется ffdshow, FFmpegInterop, плагином GStreamer FFmpeg, LAV Filters и OpenMAX IL для расширения возможностей кодирования и декодирования их мультимедийных платформ. В рамках миссии NASA Mars 2020 марсоход Perseverance использует FFmpeg на Марсе для сжатия изображений и видео перед отправкой отснятых материалов на Землю.