<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Window 下 FFmpeg 和 LibX264 的編譯和配置

          共 3161字,需瀏覽 7分鐘

           ·

          2021-12-26 22:02

          博客原文地址:https://glumes.com

          周末在家折騰 Windows 平臺(tái)下 FFmepg 和 LibX264 庫(kù)的編譯,長(zhǎng)期以來(lái)都是在 Mac 平臺(tái)下做開(kāi)發(fā),切換到 Windows 平臺(tái)下還是踩了不少坑。

          參考了網(wǎng)上很多編譯文章,質(zhì)量也是參差不齊,版本也是五花八門,但歸根到底還是 Window 下編譯環(huán)境太坑爹了。

          由于 Windows 上的命令行工具不好用,所以需要安裝 MSYS 或者 Cygwin 這樣的軟件,它們的作用就是模擬 Linux 環(huán)境,其中 MSYS 還分 1.0 和 2.0 版本,有的博客文章比較久遠(yuǎn),還使用的 1.0 版本了。

          機(jī)智地沒(méi)有選擇走 Cygwin 這條路線,節(jié)省了不少時(shí)間,但還是踩了 MSYS 1.0 版本的坑。

          如果你看到的文章是安裝 ?MSYS 1.0 版本,并且還需要額外安裝 MinGW 軟件,那么請(qǐng)退出來(lái),重新找個(gè) MSYS 2.0 版本的文章吧,這樣還能繞過(guò) MinGW 單獨(dú)下載太慢的問(wèn)題(別問(wèn)為什么我知道,你懂的)。

          使用 MSYS 2.0 版本,就不需要額外安裝 MinGW 軟件了,它提供了 pacman 軟件管理器,通過(guò)它來(lái)安裝依賴的軟件。

          官網(wǎng)地址:https://www.msys2.org/

          MSYS 2.0 安裝軟件的時(shí)候,如果網(wǎng)速很慢,可以考慮更新鏡像源,使用國(guó)內(nèi)的源。

          搞定軟件之后,先編譯 libx264 ,在編譯 FFmpeg 。

          MinGW 和 MSVC 的作用

          在實(shí)際編譯的時(shí)候,我們也是用不上 MinGW 的,看了一些文章用 MinGW 來(lái)編譯,最后編譯出來(lái)的靜態(tài)庫(kù)是個(gè) .a 的形式。

          一開(kāi)始還沒(méi)反應(yīng)過(guò)來(lái),Windows 下的靜態(tài)庫(kù)不是 .lib 嘛,直接用 CMake 去鏈接 .a 庫(kù)肯定不行啊。

          還看到一些文章說(shuō)先把 .a 庫(kù)轉(zhuǎn)成 .def 文件,然后再把 .def 文件轉(zhuǎn)成 .lib 文件,甚至再把 .lib 文件轉(zhuǎn)成 .dll 的動(dòng)態(tài)庫(kù),這么來(lái)回折騰一下又是大坑,還好沒(méi)跳進(jìn)去。

          轉(zhuǎn)念一想,我要用 CLion 開(kāi)發(fā)工程,編輯器直接用 MSVC 就好了,也用不上 gcc 來(lái)編譯代碼,干嘛用 MinGW 去編譯個(gè) .a 庫(kù)呢,直接編譯出 .lib 不好嘛。

          瞬間思路就打開(kāi)了,調(diào)整方向,谷歌直接搜索 compile ffmpeg with msvc ,很快就找到了答案(谷歌搜英文會(huì)過(guò)濾掉很多網(wǎng)上各種抄襲復(fù)制的無(wú)效文章)。

          LibX264 編譯

          首先下載好 LibX264 源碼。

          然后在開(kāi)始菜單中找到并打開(kāi) x64 Native Tools Command Prompt for VS 2019 :

          在打開(kāi)的命令行終端中,進(jìn)入到 MSYS 安裝目錄,打開(kāi) msys2_shell.cmd ,如下命令:

          注意后綴有個(gè) -use-full-path 。

          這時(shí)會(huì)打開(kāi) MSYS 的新窗口,先把一些匯編依賴安裝好:

          pacman?-Syu
          pacman?-S?make
          pacman?-S?diffutils
          pacman?-S?yasm
          pacman?-S?nasm

          然后,在該窗口中進(jìn)入到 LibX264 的源碼目錄下,把如下代碼保存成 .sh 文件并執(zhí)行:

          OPTIONS="--enable-shared"

          CC=cl?./configure?$OPTIONS?--enable-shared?--prefix=$BUILD_DIR/

          make?-j?16
          make?install
          make?clean

          執(zhí)行后就開(kāi)始編譯了,注意 configure 命令前綴有個(gè) CC=cl ,代表使用 MSVC 來(lái)編譯了。

          編譯后內(nèi)容如下:

          將編譯后的 libx264.dll.lib 改成 libx264.lib,這就是靜態(tài)庫(kù)了。

          FFmpeg 編譯

          繼續(xù)在 MSYS 2.0 窗口中進(jìn)入到下載好 FFmpeg 的源碼目錄,將如下代碼保存成 .sh 文件并執(zhí)行:

          OPTIONS="--toolchain=msvc?\
          ?????????--arch=x86_64?\
          ?????????--enable-yasm??\
          ?????????--enable-asm?\
          ?????????--enable-shared?\
          ?????????--disable-static?\
          ?????????--disable-programs?\
          ?????????--enable-swresample?\
          ?????????--enable-swscale?\
          ?????????--enable-libx264?\
          ?????????--enable-gpl?\
          ?????????"

          X264_INCLUDE=$libx264_path/include
          X264_LIB=$libx264_path/lib

          CC=cl?./configure?$OPTIONS?--extra-cflags="-I$X264_INCLUDE"?--extra-ldflags="-LIBPATH:$X264_LIB"?--prefix=$BUILD_DIR/
          make?-j?16
          make?install
          make?clean

          要將代碼中的 libx264_path 路徑改成上面編譯的 libx264 路徑,F(xiàn)Fmpeg 的編譯需要依賴 libx264 的庫(kù)。

          一番等待后,就編譯出了動(dòng)態(tài)庫(kù):

          CMake 依賴 FFmpeg 和 LibX264

          最后就是在 Clion 中使用 CMake 去依賴 FFmpeg 和 LibX264 了。

          定義了兩個(gè)宏函數(shù)去鏈接頭文件和庫(kù)的目錄:

          macro(link_ffmpeg)
          ? ? include_directories(${ffmpeg}/${platform}/${arch}/include)
          ? ? link_directories(${ffmpeg}/${platform}/${arch}/bin)
          endmacro()

          macro(link_libx264)
          ? ? include_directories(${libx264}/${platform}/${arch}/include)
          ? ? link_directories(${libx264}/${platform}/${arch}/lib)
          endmacro()

          注意,F(xiàn)Fmpeg 鏈接庫(kù)用的是 bin 目錄下的,libx264 用的是 lib 目錄下的。

          在最后這一步反而卡主了:

          target_link_libraries(demo libx264 avcodec avformat)

          要么提示找不到 libx264,要么找不到 avcodec-59,這個(gè)時(shí)候還需把 ffmpeg 編譯結(jié)果的 bin 目錄添加到系統(tǒng)環(huán)境變量中,為了保險(xiǎn)起見(jiàn),把 libx264 的 bin 目錄也添加了。

          加完之后,跑一段代碼測(cè)試一下:

          #include?

          extern?"C"{
          #include?"libavformat/avformat.h"
          #include?"libavcodec/avcodec.h"
          #include?"x264.h"
          }

          int?main()?{
          ????x264_param_t?param;
          ????x264_param_default(¶m);
          ????auto?codec?=?avcodec_find_encoder(AV_CODEC_ID_H264);
          ????if?(codec){
          ????????std::cout?<"success!!!"?<std::endl;
          ????}
          ????return?0;
          }

          果然就成功了,這下可以在 Windows 上開(kāi)發(fā)學(xué)習(xí) FFmpeg 了。

          參考

          1. https://www.cnblogs.com/wswind/p/10650126.html
          2. https://blog.csdn.net/qq_18453581/article/details/120005712
          3. https://www.roxlu.com/2016/057/compiling-x264-on-windows-with-msvc
          4. https://www.roxlu.com/2019/062/compiling-ffmpeg-with-x264-on-windows-10-using-msvc


          技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。

          私信領(lǐng)取相關(guān)資料

          推薦閱讀:

          音視頻開(kāi)發(fā)工作經(jīng)驗(yàn)分享 || 視頻版

          OpenGL ES 學(xué)習(xí)資源分享

          開(kāi)通專輯 | 細(xì)數(shù)那些年寫(xiě)過(guò)的技術(shù)文章專輯

          Android NDK 免費(fèi)視頻在線學(xué)習(xí)!?。?/span>

          你想要的音視頻開(kāi)發(fā)資料庫(kù)來(lái)了

          推薦幾個(gè)堪稱教科書(shū)級(jí)別的 Android 音視頻入門項(xiàng)目

          覺(jué)得不錯(cuò),點(diǎn)個(gè)在看唄~

          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲色图另类图片 | 国产成人精品电影 | 午夜操 | 韩国久久| 黄色影院日本 |