? ? ? ? 之前在學習FFmpeg時,都是網上零零散散的知識點拼湊起來,沒有經過系統(tǒng)地學習,最近時間比較多,于是決定開始深入學習FFmpeg,從自己動手編譯源碼開始。
本文記錄了在自己編譯過程中踩的坑,以及完整的編譯安裝流程,建議先看踩過的坑里面最后一條
目錄
環(huán)境準備
安裝MSYS2及編譯工具鏈
FFmpeg源碼下載
x264源碼下載
SDL下載
編譯和安裝
踩過的坑
參考文章
環(huán)境準備
- 安裝并配置MYSY2
- 下載FFmpeg源碼
- 下載x264源碼
- 下載SDL源碼(可選,在編譯FFplay.exe時需要)
安裝MSYS2及編譯工具鏈
? ? ? ? MSYS2 是 Windows 下的一組編譯套件,它可以在 Windows 系統(tǒng)中模擬 Linux 下的編譯環(huán)境,如使用 shell 運行命令、使用 pacman 安裝軟件包、使用 gcc (MinGW) 編譯代碼等。簡單來說,使用 MSYS2 ,你可以通過在 Linux 下非常熟悉的各種命令,來編譯 Windows 下的軟件。MSYS2官網下載exe安裝包,管理員權限安裝,安裝后會有6個shell程序
?啟動MSYS2 MINGW64,依次輸入以下命令行開始安裝mingw64編譯鏈和基本依賴
sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
pacman -Sy #提高下載速度,將下載源換成中科大的
pacman -S mingw-w64-x86_64-toolchain # mingw64編譯工具鏈,win下的gcc,用于編譯64位的庫
pacman -S mingw-w64-i686-toolchain # 用于編譯32位的庫
pacman -S base-devel # 一些基本的編譯工具
pacman -S yasm nasm # 匯編器
FFmpeg源碼下載
在FFmpeg官網下載源碼
?
三個包都可以下載
x264源碼下載
去x264官網下載
SDL下載
去SDL官網下載
?
編譯和安裝
? ? ? ? 將下載好的安裝好放在同一個目錄(路徑中不能有空格和中文),解壓所有文件到當前目錄,為了區(qū)分源碼目錄和庫的安裝目錄,建議修改下名稱(非必要)
?新建編譯安裝腳本文件.sh,復制以下命令,其中./configure編譯參數可打開對應源碼目錄下的configure文件查看,這里參數僅供參考,參數含義可查看FFmpeg編譯參數分析 - 掘金
#!/bin/sh
#進入執(zhí)行腳本所在目錄
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
#進入h264源碼目錄
cd ${basepath}/x264-src # 根據路徑名稱自行修改
pwd
#配置編譯參數
./configure --prefix=${basepath}/x264-install --enable-shared
#開始16線程編譯
make -j16
#將編譯后的文件拷貝到--prefix參數配置目錄
make install
#進入ffmpeg源碼目錄
cd ${basepath}/ffmpeg-5.1.2-src # 根據路徑名稱自行修改
pwd
#指定PKG_CONFIG_PATH變量,告知編譯器x264庫的路徑
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${basepath}/x264-install/lib/pkgconfig
echo ${PKG_CONFIG_PATH}
#配置編譯參數
./configure --prefix=${basepath}/ffmpeg-5.1.2-install \
--enable-gpl \
--enable-libx264 \
--disable-static \
--enable-shared \
--enable-sdl2 \
--enable-ffplay \
--enable-ffprobe \
--enable-ffmpeg \
--disable-vulkan \
--extra-cflags=-l${basepath}/x264-install/include \
--extra-ldflags=-L${basepath}/x264-install/lib
#開始16線程編譯
make -j16
#將編譯后的文件拷貝到--prefix參數配置目錄
make install
打開SDL源碼中的sdl2-config文件
修改其中的prefix路徑,具體路徑根據你文件所在位置確定,不能直接復制文件資源管理器中的路徑,需要修改為以下格式
prefix=/e/shell/SDL2-2.26.3/x86_64-w64-mingw32
打開FFmpeg源碼目錄中的configure文件
修改SDL2_CONFIG路徑,規(guī)則同上
SDL2_CONFIG="/e/shell/SDL2-2.26.3/x86_64-w64-mingw32/bin/sdl2-config"
?
?打開MSYS2 MINGW64,進入腳本所在目錄,執(zhí)行腳本,等待編譯安裝完成,大概十分鐘左右
cd /e/shell
./build-ffmpeg-5.1.2.sh
?編譯安裝完成后就可以在install目錄下看到庫文件了
踩過的坑
1.源碼所在目錄路徑中含有中文,會導致在編譯FFmpeg時提示找不到x264庫,如下圖
2.未修改SDL源碼中sdl2-config文件和FFmpeg源碼configure文件中的SDL相關路徑,會在編譯FFmpeg時提示找不到SDL庫,如下圖
3.配置FFmpeg編譯參數時,未添加--disable-vulkan,在編譯時會報錯,未知原因,暫不知道禁用這個模塊會有什么影響(又給自己挖了個坑)
4.編譯32位時提示無法找到c編譯器,解決方法參考linux 下 編譯 x264 遇到的 No working C compiler found 錯誤_老姚---老姚的博客-CSDN博客
?5.本文用的是mingw編譯器來編譯FFmpeg,這樣編譯出來的庫只能在使用mingw編譯器的工程中使用,否則會出問題,我本來是打算用VS+Qt+FFmpeg庫來做一個項目的,使用msvc編譯器,引入上述方法編譯的庫之后,程序無法啟動,查了下才知道m(xù)ingw編譯器與msvc無法兼容,而且VS還不能使用mingw編譯器,只好再找找用msvc編譯器編譯FFmpeg的方法了,好在沒花多久就找到了解決方法,看了這位大佬的文章才知道,新版本的FFmpeg自帶h264編解碼器,不需要額外下載h264源碼自己編譯,另外,如果不需要編譯ffplay.exe的話,SDL源碼也不需要下載了,這樣編譯的流程就簡化了很多,且基本無坑,一遍就能通過,后面會整理下自己用msvc編譯ffmpeg的過程發(fā)出來
參考文章
win10編譯ffmpeg和ffplay - 簡書
win10編譯ffmpeg和ffplay - 簡書 (jianshu.com)
FFmpeg編譯參數分析 - 掘金
linux 下 編譯 x264 遇到的 No working C compiler found 錯誤_老姚---老姚的博客-CSDN博客
解決Android NDK編譯FFmpeg 4.2.2的x86 cpu版時的問題 – K-Res的Blog文章來源:http://www.zghlxwxcb.cn/news/detail-640968.html
window10_ffmpeg-msys2-msvc編譯_h264_mf_Loken2020的博客-CSDN博客?文章來源地址http://www.zghlxwxcb.cn/news/detail-640968.html
到了這里,關于Windows下FFmpeg庫編譯安裝指南的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!