《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“7.1.1 添加圖片標誌”介紹瞭如何給視頻添加圖片標誌,比如給視頻畫面添加一張二維碼圖像。不過前提條件是存在二維碼圖片,因為FFmpeg本身不支持根據文本生成二維碼圖像。幸而從FFmpeg 7.0開始,通過第三方的libqrencode和libquirc庫實現了二維碼的讀寫功能,這樣處理視頻中的二維碼圖像就方便多了。
接下來以微軟的視窗系統為例,介紹如何在Windows環境給FFmpeg集成二維碼的編解碼器libqrencode和libquirc,具體的操作步驟説明如下:
一、配置libqrencode
libqrencode是一個快速緊湊的二維碼編碼庫,支持將文本、URL、電話號碼等信息轉換為二維碼圖像。libqrencode的源碼託管頁面在 https://github.com/fukuchi/libqrencode ,最新版為2020年9月推出的libqrencode-4.1.1,下載地址是 https://codeload.github.com/fukuchi/libqrencode/tar.gz/refs/tags/v4.1.1 。
先下載最新的qrencode源碼,再把qrencode源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:
tar zxvf libqrencode-4.1.1.tar.gz
cd libqrencode-4.1.1
然後執行下面命令配置qrencode:
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 ..
配置完畢,會在build目錄下找到QRencode.sln,這就是qrencode的Visual Studio項目工程文件。
二、編譯libqrencode
打開Visual Studio 2022,在歡迎頁面單擊右側的“打開項目或解決方案”,在彈出的文件對話框中選擇libqrencode-4.1.1\build目錄下的QRencode.sln。
打開qrencode工程後,依次選擇頂部菜單:生成→配置管理器,在打開的配置管理器窗口上,找到左上角的“活動解決方案配置”下拉框,把Debug模式改為Release模式,再單擊窗口右下角的關閉按鈕。
依次選擇頂部菜單:生成→Build ALL_BUILD,Visual Studio就開始編譯qrencode模塊。編譯過程可在Visual Studio界面下方觀察,直到編譯完成如下圖所示。
此時可在libqrencode-4.1.1\Release目錄下找到qrencode.lib和qrencode.dll,這兩個文件就是編譯生成的libqrencode庫文件。
三、安裝libqrencode
確保Windows系統已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》第一章“1.3 Windows系統安裝FFmpeg”的説明安裝配置了MSYS,再按照以下步驟在MSYS環境安裝libqrencode。
1、在msys64的/usr/local目錄下新建libqrencode目錄,並在該目錄下創建lib子目錄;
2、把qrencode工程中Release目錄下的qrencode.lib和qrencode.dll兩個文件複製到第一步創建的lib目錄;
3、在lib目錄下創建pkgconfig子目錄,並把qrencode工程的build\libqrencode.pc複製到pkgconfig目錄;然後打開libqrencode.pc,把開頭四行改成下面這樣。
prefix=/usr/local/libqrencode
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
4、在msys64的/usr/local/libqrencode目錄下創建include目錄,然後把qrencode工程的qrencode.h文件複製到剛才創建的include目錄;
經過以上步驟操作後的libqrencode目錄結構如下所示。
/usr/local/libqrencode
|--------------- lib
| |----- qrencode.lib
| |----- qrencode.dll
| |----- pkgconfig
| |----- libqrencode.pc
|--------------- include
| |----- qrencode.h
四、編譯libquirc
libquirc是一個從圖像中提取並解析二維碼的開源庫,它的源碼託管頁面在 https://github.com/dlbeer/quirc ,最新版為2023年5月推出的quirc-1.2,下載地址是 https://codeload.github.com/dlbeer/quirc/tar.gz/refs/tags/v1.2 。
先下載最新的quirc源碼,再把quirc源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:
tar zxvf quirc-1.2.tar.gz
cd quirc-1.2
接着打開quirc源碼目錄下的Makefile,找到下面這行:
all: libquirc.so qrtest
在其後補充下面兩行用於編譯Windows環境需要的dll文件和lib文件:
lib: $(LIB_OBJ)
$(CC) -shared -o quirc.dll $(LIB_OBJ) $(LDFLAGS) -lm -Wl,--out-implib,quirc.lib
保存Makefile文件後執行以下命令編譯quirc:
make lib
編譯完畢會在quirc源碼目錄下生成quirc.dll和quirc.lib兩個文件。
五、安裝libquirc
確保Windows系統已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》第一章“1.3 Windows系統安裝FFmpeg”的説明安裝配置了MSYS,再按照以下步驟在MSYS環境安裝libquirc。
1、在msys64的/usr/local目錄下新建libquirc目錄,並在該目錄下創建lib子目錄;
2、把quirc源碼目錄下的quirc.lib和quirc.dll兩個文件複製到第一步創建的lib目錄;
3、在lib目錄下創建pkgconfig子目錄,並在pkgconfig目錄下新建文件libquirc.pc,給該pc文件填入以下的配置內容。
prefix=/usr/local/libquirc
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libquirc
Description: A QR Code extracting and decoding library
Version: 1.2
Libs: -L${libdir} -lquirc
Libs.private:
Cflags: -I${includedir}
4、在msys64的/usr/local/libquirc目錄下創建include目錄,然後把quirc源碼目錄的lib\quirc.h文件複製到剛才創建的include目錄;
經過以上步驟操作後的libquirc目錄結構如下所示。
/usr/local/libquirc
|--------------- lib
| |----- quirc.lib
| |----- quirc.dll
| |----- pkgconfig
| |----- libquirc.pc
|--------------- include
| |----- quirc.h
六、編譯安裝FFmpeg
先下載最新的FFmpeg源碼(版本號需大於等於7.0),再把FFmpeg源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:
cd /usr/local/src
unzip ffmpeg-n7.1.1.zip
確保MSYS環境已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》該書第八章的“8.1.1 給FFmpeg集成x264”和“8.1.5 給FFmpeg集成x265”安裝了H.264的編碼器libx264和H.265的編碼器libx265,也按照該書第十章的“10.1.1 FFmpeg集成SDL”安裝了Windows系統的SDL2庫,並且按照之前的文章安裝了H.266的編碼器libvvenc,然後執行下面命令配置FFmpeg的編譯環境:
cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/libqrencode/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-libxevd --enable-libxeve --enable-libqrencode --enable-libquirc --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/libquirc/include' --extra-ldflags='-L/usr/local/libquirc/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
配置完畢執行下面命令編譯和安裝FFmpeg,編譯完成的ffmpeg庫將會安裝到configure指定的/usr/local/ffmpeg目錄。
make
make install
cp /usr/local/libqrencode/lib/qrencode.dll /usr/local/ffmpeg/bin
cp /usr/local/libquirc/lib/quirc.dll /usr/local/ffmpeg/bin
七、查看FFmpeg的安裝結果
運行下面命令查看FFmpeg的安裝版本:
ffmpeg -version
上面命令返回的FFmpeg版本信息如下:
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-libxevd --enable-libxeve --enable-libqrencode --enable-libquirc --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --extra-cflags=-I/usr/local/libquirc/include --extra-ldflags=-L/usr/local/libquirc/lib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
根據以上返回的版本信息,可知已安裝的FFmpeg版本號為7.1.1,同時configuration這行找到“--enable-libqrencode --enable-libquirc”,説明FFmpeg已經啓用了二維碼的編解碼器libqrencode和libquirc。
更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。