В этой статье в основном объясняются знания, связанные с FFmpeg, а также компиляция и использование исходного кода FFmpeg под Windows.
ffmpeg — широко используемое мультимедийное решение. Это не только инструмент для кодирования аудио и видео, но и набор комплектов для разработки аудио и видео кодеков. В качестве комплекта для разработки кодеков он предоставляет разработчикам богатый интерфейс вызова для обработки аудио и видео. .
Он включает в себя ведущую на данный момент библиотеку кодирования аудио/видео libavcodec.
ffmpeg обеспечивает инкапсуляцию и декапсуляцию нескольких форматов мультимедиа, включая несколько кодировок аудио и видео, потоковое мультимедиа с несколькими протоколами, несколько преобразований цветовых форматов, несколько преобразований частоты дискретизации, несколько преобразований скорости кода и т. д. С момента своего создания ffmpeg использовался во многих проектах с открытым исходным кодом.
Базовые компоненты платформы ffmpeg включают AVFormat, AVCodec, AVFilter, AVDevice, AVUtil и т. д.
AVFormat: библиотека формата файлов и протоколов. Этот модуль является одним из наиболее важных модулей. Он инкапсулирует уровни протокола, демультиплексора и мультиплексора, делая протокол и формат прозрачными для разработчиков.
AVFormat реализует большинство текущих форматов инкапсуляции мультимедиа в области мультимедиа, включая инкапсуляцию и декапсуляцию, такие как MP4, FLV и другие форматы инкапсуляции файлов, RTMP, HLS и другие форматы инкапсуляции сетевых протоколов. Поддерживает ли ffmpeg определенный формат упаковки, зависит от того, включена ли во время компиляции библиотека упаковки этого формата.
Он применяется для генерации и анализа различных форматов инкапсуляции аудио и видео, включая получение информации, необходимой для декодирования, для создания структур контекста декодирования и чтения аудио- и видеокадров. Протокол анализа аудио- и видеоформатов обеспечивает независимое аудио или видео для libavcodec. проанализировать источник видеопотока.
Библиотека кодирования и декодирования. Этот модуль также является одним из наиболее важных модулей, инкапсулирующих уровень кодека.
AVCodec реализует большинство широко используемых форматов кодеков в области мультимедиа, поддерживая как кодирование, так и декодирование. Помимо поддержки собственного формата декодирования мультимедиа, AVCodec также поддерживает кодеки сторонних производителей, такие как кодирование H.264, которое требует использования кодировщика MP3 x264, что требует использования кодировщика libmp3lame; Если вы хотите добавить свой собственный формат кодирования или аппаратный кодек, вам необходимо добавить соответствующий модуль кодека в AVCodec. (Некоторые кодеки имеют свои собственные лицензии. FFmpeg по умолчанию не добавляет библиотеки, такие как libx264, FDK-AAC, lame и т. д. Однако FFmpeg похож на платформу и может добавлять другие сторонние кодеки в виде плагинов. Заходите и предоставьте разработчикам единый интерфейс)
Эта библиотека является ядром кодирования и декодирования аудио и видео. Библиотека avcodec включена или используется другими основными декодерами, такими как ffdshow, Mplayer и т. д.
AVFilter предоставляет общую структуру обработки фильтров для аудио, видео, субтитров и т. д. Этот модуль обеспечивает обработку, включая специальные эффекты аудио и видео. В процессе кодирования и декодирования с использованием API FFmpeg это очень удобный и эффективный способ напрямую использовать этот модуль для обработки специальных эффектов аудио- и видеоданных.
Модуль swscale предоставляет API-интерфейс преобразования изображений высокого уровня. Например, он позволяет масштабировать изображение и конвертировать формат пикселей, масштабировать видеосцену, конвертировать цветовое пространство или формат изображения, например преобразование между gb565, rgb888 и yuv420 и т. д. .
Модуль swresample предоставляет высокоуровневый API передискретизации звука. Он может конвертировать различную базовую информацию, такую как количество каналов, формат данных и частоту дискретизации цифрового звука. Например, он позволяет манипулировать аудиосэмплами, преобразовывать расположение аудиоканалов и настраивать расположение.
Этот модуль является одним из самых простых модулей, и многие другие модули используют эту библиотеку для выполнения некоторых основных операций по обработке аудио и видео.
Аппаратное приобретение, ускорение, отображение. Библиотека устройств ввода и вывода, например, если вам нужно скомпилировать инструмент ffplay для воспроизведения звука или видео, вам необходимо убедиться, что модуль открыт, а также необходимо предварительно скомпилировать libSDL, поскольку модуль устройства использует библиотеку устройств ввода и вывода. библиотека libSDL для воспроизведения звука и видео.
ffmpeg собрал три часто используемых набора инструментов: ffmpeg.exe, ffprobe.exe и ffplay.exe. С помощью этих трех инструментов вы можете использовать команды для управления мультимедийным файлом.
Вот ссылка на то, что я писал ранееизблог:Общие инструменты для разработки аудио и видео
Windows 11 64-битная Программное обеспечение и инструменты, которые необходимо установить:
Помимо установки VS, вам также необходимо установить MSYS2 — программное обеспечение, имитирующее Linux под Windows. FFmpeg компилируется в этом программном обеспечении, а компилятор (cl.exe) и компоновщик (link.exe), используемые во время компиляции, предоставляются Visual Studio.
MSYS2 Вы можете скачать его здесь: Связь:https://pan.baidu.com/s/1fWcS_5Xlxv1Bja4354JnvA Код извлечения: worc
Я установил его здесь, в каталог D:\msys64.
После того, как среда компиляции готова, нам необходимо загрузить последнюю версию исходного кода FFmpeg, которую можно скачать с помощью Git. Сначала установите команду Git, а затем выполните следующую команду.
cd /d/Git-Space
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
Код загружается в каталог ffmpeg на диске D:\Git-Space.
ffmpeg Исходный кодтакже Вы можете скачать его здесь: Связь:https://pan.baidu.com/s/1gjsDtEn_E4yCwnbT3TVUWQ Код извлечения: dlvx
Сначала введите каталог установки MSYS2. Например, я установил MSYS2 в каталог D:\msys64. Откройте файл msys2_shell.cmd в этом каталоге и откройте комментарий к строке 17 файла, то есть удалите ключевое слово rem, как показано ниже:
Причина включения этого комментария заключается в том, что MSYS2 может наследовать переменные среды консоли Windows.
После этого найдите окно командной строки x64 Native Tools для VS 2022:
Введите следующую команду в командном окне, чтобы запустить программное обеспечение MSYS2.
# Входитьприезжать MSYS2 в каталоге
cd D:\msys64
# запускать MSYS2
msys2_shell.cmd
В это время появится окно команд MSYS2. Далее введите в этом окне следующую команду, чтобы установить необходимые инструменты компиляции:
pacman -S diffutils make pkg-config yasm
Среди них pacman — инструмент установки пакетов MSYS2, а diffutils, make… — все инструменты компиляции, необходимые при компиляции FFmpeg;
После установки инструмента компиляции выполните следующую команду в командном окне MSYS2, чтобы войти в каталог исходного кода FFmpeg:
cd /d/Git-Space/ffmpeg
Затем запустите сценарий настройки в исходном каталоге FFmpeg, чтобы создать файл Makefile. Команда выглядит следующим образом:
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-shared --disable-ffprobe --toolchain=msvc
Смысл приведенной выше команды заключается в использовании mscv в качестве цепочки инструментов компиляции FFmpeg; скомпилированная библиотека FFmpeg помещается в каталог /usr/local/ffmpeg; скомпилированная библиотека является динамической библиотекой, которая представляет собой библиотеку DLL в Windows; ffprobe не генерируется во время компиляции программы.
После выполнения приведенного выше сценария вы сможете найти дополнительный файл Makefile в исходном каталоге FFmpeg. С помощью этого файла мы можем скомпилировать FFmpeg. Команда компиляции выглядит следующим образом:
make -j4 && make install
Произошло много ошибок:
fftools/opt_common.c(206): error C2065: “slib”: необъявленный идентификатор
fftools/opt_common.c(206): error C2296: “%”: Недопустимо, поскольку левый операнд имеет тип «char». [138]”
Решение:
Проблема связана с Не распознается под Windows CC_IDENT В результате просто включите CC_IDENT Просто закомментируйте строку кода, содержащую ключевое слово.
Продолжить компиляцию
make -j4 && make install
На данный момент компиляция прошла
После выполнения этой команды вы сможете найти скомпилированную библиотеку FFmpeg и команды FFmpeg в каталоге D:\MSYS64\usr\local\ffmpeg.
После компиляции библиотеки FFmpeg мы можем ссылаться на нее в VS.
существовать Щелкните правой кнопкой мыши по проекту -> свойство -> C/C++ -> общепринятый -> Дополнительные каталоги включения
Добавить FFmpeg головадокумент Местосуществоватьпуть。
Сначала позвольте мне кое-что объяснить,якомпилироватьпублично заявитьиз Библиотекадокументжитьсуществовать В D:\msys64\usr\local\ffmpeg\bin в каталоге
существовать Щелкните правой кнопкой мыши по проекту -> свойство -> компоновщик -> общепринятый -> Дополнительный каталог библиотеки
Добавить FFmpeg Библиотека Местосуществоватьпуть。
существовать Щелкните правой кнопкой мыши по проекту -> свойство -> компоновщик -> входить -> дополнительные зависимости
Укажите тот, который вы используете в FFmpeg Библиотека
Укажите все следующее:
avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib
Когда вышеуказанная работа завершена, мы можем существовать main(...) Вызывается в функции FFmpeg API, например, вызов функции журнала FFmpeg Библиотека середина:
#include <iostream>
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
int main()
{
av_log_set_level(AV_LOG_DEBUG);
av_log(NULL, AV_LOG_INFO, "Hello World!\n");
return 0;
}
Подобная ошибка возникает во время выполнения. Причина в том, что дасуществовать не может найти требуемую динамическую библиотеку при запуске.
Решение первое: Воля D:\msys64\usr\local\ffmpeg\bin в каталогеиз avutil-58.dll Скопируйте файлы в C:\Windows\System32 в каталоге
Результаты копирования следующие:
Запустите программу еще раз, и вы увидите следующие результаты.
Решение второе: Просто Воля нам, прежде чем компилировать добро из FFmpeg Библиотека, что означает: «невозможно найти из» .dll Библиотека,скопировать «Программа выполнения идентична» каталоге, чтобы исполняющая программа могла найти Библиотеку и правильно ее выполнить.
много разяихсуществоватькомпилировать FFmpeg Библиотеке также необходимо добавить еще несколько библиотек, например SDL、x264 и т. д. Если хотите Воля, эти Библиотеки добавьте в FFmpeg , сначала нам нужно скомпилировать Windows Ниже представлена информация, соответствующая Библиотеке.
Сначала получите исходный код SDL с github, команда выглядит следующим образом:
git clone https://github.com/libsdl-org/SDL.git
git checkout release-2.26.x
Следует отметить, что SDL сейчас выпустил версию 3.0, а ffmpeg в настоящее время может использовать только версию SDL2, поэтому после извлечения кода вам необходимо переключиться на версию 2.26.
Вы можете забрать его здесь SDL-2.26.x Связь:https://pan.baidu.com/s/1n_wMhIsBb9yaDhAL8NHZ8Q Код извлечения: qqbh
Скачано SDL2 После исходного кода нам нужно использовать CMake сгенерировать для этого VS работает и Воля устанавливает его на Windows в системе.
Вы можете забрать его здесь CMake Инсталляционный пакет Связь:https://pan.baidu.com/s/1pQ7hh3WA6ES8pdBTpds1_Q Код извлечения: et4t
Об установке CMake здесь: установите каталог CMake в системный каталог для всех пользователей.
И Воля установит его D:\CMake\ в каталоге
открыть после CMake-GUI,существовать CMake-GUI указано в SDL Исходный код Местосуществоватьпуть(D:/Git-Space/SDL)а такжекомпилировать из пути вывода (D:/CMake/usr/local/)
Затем выполните
Configure -> Generate -> Open Project
Создайте проект VS. С помощью проекта VS мы можем скомпилировать SDL через VS2022.
соответственносуществовать Release и Debug режим, перегенерировать его All_BUILD подпроект.
Если нет проблем SDL Он скомпилирован и можно идти. D:\Project\VS_Project\sdl_test\Debug и D:\Project\VS_Project\sdl_test\Release в каталог Посмотрите, есть ли соответствующие из lib документ
Каталог D:\CMake\usr\local\sdl\Debug выглядит следующим образом:
Каталог D:\Project\VS_Project\sdl_test\Release выглядит следующим образом
Чтобы удовлетворить это требование, нам нужно указать вывод в Создано каталоге lib Оглавление,и Воля SDL2.lib и SDL2.dll Скопируйте файлы в lib в каталоге。в то же времясуществовать lib в Создано каталоге pkgconfig Оглавление,Воля sdl2.pc Скопируйте файлы в Должен Оглавлениесередина。
Окончательная полная структура каталогов выглядит так:
/usr/local/sdl2
|------------ lib
| |-- sdl2.lib
| |-- sdl2.dll
| |-- pkgconfig
| |----- sdl2.pc
|------------ include
Кроме того, нам также необходимо изменить sdl2.pc В содержимом путь Волявиз Библиотека изменяется на указанный выходной путь.
x264 Библиотекаизкомпилировать также относительно просто, и SDL Точно так же мы должны сначала получить его исходный код, который можно получить с помощью следующей команды x264 Исходный код:
git clone https://code.videolan.org/videolan/x264.git
Вы можете забрать его здесь x264 Исходный код Связь:https://pan.baidu.com/s/17HyuJBrka04DXoS4WOa3tQ Код извлечения: oqrb
Исходный После получения кода вы можете напрямую существовать MSYS2 скомпилирован в среде Windows Издинамическая библиотека доступна ниже, конкретные шаги заключаются в следующем:
# от ВС X64 Native... Откроется окно MSYS2
cd D:\msys64
msys2_shell.cmd
cd /d/Git-Space/x264/ # существоватьMSYS2середина Входитьx264Исходный код Оглавление
pacman -S automake autoconf libtool # Установите инструмент Makefileiz
CC=cl ./configure --prefix=/usr/local/x264 --enable-shared --disable-asm
make -j 4 && make install
Вы можете использовать приведенную выше команду для Воли. x264 Скомпилировано. х264 После компиляции структура выходного каталога такая же,как и ffmepg да Такой жеиз,существовать /usr/local/x264 включен в include、lib、bin и т. д. каталог.
Чтобы подчеркнуть из маленького да в частности, нам нужна Воля lib в каталогеиз libx264.dll.lib Название документа изменено на libx264.lib, иначе ffmpeg Отчитаюсь при составлении «Библиотека не найдена» ошибка.
fdk-aac скомпилировано с SDL Аналогично, он также использует CMake генерировать VS Инженерная документация, затем сдать VS компилировать Должен Библиотека。
Сначала получите следующую команду fdk-aac Исходный код:
git clone https://github.com/mstorsjo/fdk-aac.git
Вы можете забрать его здесь fdk-aac Исходный код: Связь:https://pan.baidu.com/s/1ViuYEtEFFh71w9ZRgLaesA Код извлечения: hwf5
открыть после CMake-GUI,существовать CMake-GUI указано в SDL Исходный код Местосуществоватьпуть(D:/Git-Space/fdk-aac)а такжекомпилировать из пути вывода (D:/CMake/usr/local/fdk-aac)
Затем выполните
Configure -> Generate -> Open Project
генерировать VS проект. Понятно VS Инженерное дело, мы можем пройти VS2022 компилировать FDK-AAC .
соответственносуществовать Release и Debug режим, перегенерировать его All_BUILD подпроект.
Если нет проблем FDK-AAC Он скомпилирован и можно идти. D:\CMake\usr\local\fdk-aac\Debug и D:\CMake\usr\local\fdk-aac\Release в каталог Посмотрите, есть ли соответствующие из lib документ
Каталог D:\CMake\usr\local\sdl\Debug выглядит следующим образом:
D:\CMake\usr\local\fdk-aac\Release Каталог выглядит следующим образом:
Чтобы удовлетворить это требование, нам нужно указать вывод в Создано каталоге lib Оглавление,и Воля fdk-aac.lib и fdk-aac.dll Скопируйте файлы в lib в каталоге。в то же времясуществовать lib в Создано каталоге pkgconfig Оглавление,Воля fdk-aac.pc Скопируйте файлы в Должен Оглавлениесередина。
Но да нашел здесь проблему, дав каталоге Нет include Оглавление
Для решения этой проблемы я использовал MSYS2+mingw перекомпилировал следующим образом fdk-aac, таким образом можно ограничить include головадокументиз
①.Открыть MSYS2 MINGW64
②、существовать fdk-aac в каталоге Выполните следующую команду
pacman -S mingw-w64-x86_64-gcc
./autogen.sh
./configure --prefix=/usr/local/fdk-aac --enable-shared
make -j4
make install
Затем Волягенерироватьизголовадокумент Руководствоскопировать в /usr/local/fdk-aac в каталоге Вот и все。
Окончательная полная структура каталогов выглядит так:
/usr/local/fdk-aac
|------------ lib
| |-- fdk-aac.lib
| |-- fdk-aac.dll
| |-- pkgconfig
| |----- fdk-aac.pc
|------------ include
Кроме того, нам также необходимо изменить fdk-aac.pc В содержимом путь Волявиз Библиотека изменяется на указанный выходной путь.
Во-первых, нам нужно установить переменные среды PKG_CONFIG_PATH, через который сообщает FFmpeg Где я могу найти вышеупомянутую Библиотеку?,специфическийиз Метод настройки следующий:
существовать MSYS2 открыть в окне .bashrc
pacman -S vim
vim ~/.bashrc
существовать ~/.bashrc Установите переменные среды в
export PKG_CONFIG_PATH=/d/CMake/usr/local/sdl/lib/pkgconfig:/usr/local/x264/lib/pkgconfig:/d/CMake/usr/local/fdk-aac/lib/pkgconfig:$PKG_CONFIG_PATH
:wq #Сохраняем и выходим из vim
Пусть изменения окружающей среды вступят в силу
source ~/.bashrc
Следующий,сновагенерировать FFmpeg из Makefile документ,исновакомпилировать
Сначала введите ffmpeg Исходный код Оглавление,Выполните следующую команду
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-ffprobe --disable-doc --enable-x264 --enable-gpl --enable-fdk-aac --enable-nonfree --toolchain=msvc
make clean
make -j 4 && make install
наконец,Воля sdl из dll、x264 из dll а также fdk-aac из dll скопировать в ffmpeg из bin в каталоге, чтобы его можно было правильно оформить ffmpeg.exe или ffplay.exe Заказ.
Входить ffmpeg/bin в каталоге,Выполните следующую команду,Если вы можете вывести информацию о версии,Это значит нормально
./ffmpeg.exe -version