FFmpeg在Windows系統下的編譯過程

由于FFMpeg是基于Linux開發的開源項目,源代碼和Windows下最常見的Visual Studio提供的C/C++編譯器不兼容,因此它不能使用MSVC++編譯。要想使用FFMpeg,最先要解決的問題就是在Windows下配置一個類似Linux的編譯環境,將FFMpeg編譯為二進制庫以后,再利用其進行進一步開發。
  MSVC++并不嚴格的遵循C標準,所以整個編譯過程必須使用MSys+MinGW系統來完成。如果選擇編譯動態鏈接庫(dll),這些庫將和其他的動態鏈接庫一樣在使用上沒什么差別,可以使用MSVC++來鏈接這些庫到自己的程序,只有這種情況下MSVC++是被支持的。
  FFmpeg在Windows系統下的編譯過程如下:


準備MSys+MinGW系統?
  1)安裝MSys
  到http://sourceforge.net/project/showfiles.php?group_id=2435下載文件:
  bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
  msysCORE-1.0.11-2007.01.19-1.tar.bz2
  (可能會有版本變化,以下同)
  解壓msysCORE-1.0.11-2007.01.19-1.tar.bz2,比如解壓到D:/msys(以下內容都使用該路徑描述)。
  解壓bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,產生一個名為bash-3.1的目錄,在該目錄下有一個子目錄名為bin,其他的目錄不需要關心。復制bin目錄中的所有文件到D:/msys/bin,提示是否要覆蓋sh.exe的時候,選擇是。
  到“D:/msys/postinstall”目錄下執行pi.bat,在出現的提示中輸入n回車后,按任意鍵退出即可。
  2)安裝MinGW
  同樣是到http://sourceforge.net/project/showfiles.php?group_id=2435下載文件:
  binutils-2.17.50-20060824-1.tar.gz
  gcc-core-3.4.5-20060117-1.tar.gz
  gcc-g++-3.4.5-20060117-1.tar.gz
  w32api-3.9.tar.gz
  mingw-runtime-3.12.tar.gz
  把它們全部解壓到D:/msys/mingw。
  3)修改“msys.bat”
  用文本編輯器打開D:/msys/msys.bat,由于打算用MSVC++編譯程序,所以需要有.lib文件才能鏈接到FFmpeg的庫,這些.lib文件可以使用微軟的工具鏈中lib命令產生。為此,機器上必須已經安裝了微軟的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路徑替換成機器上vcvars32.bat實際存在的路徑,比如我的在“D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin”,于是就添加:
  call "D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin/vcvars32.bat"
  4)系統整合
  復制D:/msys/etc/fstab.sample為D:/msys/etc/fstab,用文本編輯器打開D:/msys/etc/fstab編輯。(需要使用一個支持Unix換行風格的編輯器,比如Notepad++),把下面這行:
  d:/mingw /mingw
  改為:
  d:/msys/mingw /mingw
  完成以上步驟,MSys+MinGW系統就配置完成了。

用SVN方式獲取FFmpeg?
  由于FFmpeg的源代碼存放在SVN倉庫里,所以必須使用命令行程序或是圖形界面程序來訪問。為了方便,我使用TortoiseSVN這個圖形界面程序,因為它和Windows資源管理器結合的非常好。
  首先到http://sourceforge.net/project/showfiles.php?group_id=138498下載TortoiseSVN并安裝,安裝結束后需要重新啟動才可以使用。如果希望使用中文版本,可以下載LanguagePack-version-win32-zh_CN.exe,這樣軟件就變成熟悉的中文界面了。
  由于TortoiseSVN完全整合到了Windows資源管理器中,所以我們只要開啟資源管理器,在希望存放代碼的目錄上右擊選擇“SVN檢出...”就可以啟動TortoiseSVN。我把FFmpeg源代碼存儲在“D:/ffmpeg”目錄下,所以右擊該目錄,選擇“SVN檢出...” ,然后在出現的對話框中填寫如下內容:


圖1

  點擊確定就會開始下載過程,TortoiseSVN會把最新版本的FFmpeg源代碼下載到本地目錄中,等待下載結束,就可以開始編譯過程。
  由于FFmpeg的維護人員較多,下載的版本難免會有錯誤,甚至于當前下載的版本根本就無法編譯,所以要經常更新。更新的方法很簡單,右擊FFmpeg所在的目錄,選擇“SVN更新”即可。

編譯?
  首先通過MSys安裝目錄下的msys.bat啟動MSys,這時會出現一個命令行窗口,它是一個運行著bash的rxvt程序,如下圖:


圖2

  這是一個類似Linux的shell并且在Windows上運行,就像是在使用一個真正的Linux shell。不過使用這個shell時需要注意:
  →目錄名使用正斜杠來分割,而不是Windows所使用的反斜杠(比如說要寫成"D:/ffmpeg"而不是"D:/ffmpeg")。
  →盤符(例如"C:/")可以從根目錄處訪問(像這樣"/C/")。
  →文件名或目錄名中如果帶有空格,必須用雙引號括起(例如這樣"/C/Program Files",帶有雙引號)。
  下面切換到存放FFmpeg源代碼的目錄,方法是輸入:"cd /D/ffmpeg"。
  接下來要配置FFmpeg,選擇編譯時包含的庫,對于如何加入對第三方庫的支持,請看后續描述,這里先輸入:
  ./configure --enable-memalign-hack
  --enable-memalign-hack選項是FFmpeg在Windows上編譯成功所必須指定的,待配置完成后,將回到命令提示符,看到下圖所示的畫面:


圖3

  如果沒有錯誤的話,就可以"make"具有基本功能的FFmpeg了,在提示符后輸入:"make"。
  編譯的過程將持續很長時間。如果一切正常,結束后將返回提示符,并有如下的輸出畫面:


圖4

  這時程序已經編譯好了,在存放FFmpeg源代碼的目錄下可以找到ffmpeg.exe這個文件。
  之后,如果希望把FFmpeg安裝到系統中,可以執行安裝步驟:"make install",這將會復制所有生成的重要文件到MSys的local文件夾下。
  由于我只是調用FFmpeg,所以沒有安裝,而是把ffmpeg.exe復制到需要的目錄下,作為一個模塊使用。
  如果希望使用FFmpeg包含的libavcodec庫開發多媒體文件處理程序,還需要編譯libavcodec的dll動態鏈接庫,編譯過程和上述過程稍有差別,如下所述:
  首先切換到FFmpeg的源代碼目錄,在開始編譯前先使用"make distclean"清理上一次留下的中間文件,然后向configure腳本多傳遞兩個參數:
  ./configure --enable-shared --disable-static --enable-memalign-hack
  最后執行"make"命令就可以了。
  這種編譯方式能夠得到供MSVC++使用的文件,從而使用MSVC++進行進一步開發。

鏈接?
  在FFmpeg目錄下有三個子目錄名字分別為:libavutil、libavcodec和libavformat,如果在前述步驟中成功生成了動態鏈接庫,那么在這三個目錄下都有一個SLIBNAME_WITH_MAJOR.lib這樣的文件,例如我生成的是avcodec-51.lib、avformat-51.lib 和 avutil-49.lib,MSVC++可以從這些文件中知道dll的導出函數。
  現在通過包含FFmpeg的頭文件,和使用上述三個lib文件進行鏈接,就能夠編寫具備FFmpeg功能的應用程序了。

加入對第三方庫的支持?
  我以加入對mp3lame的支持為例,說明加入第三方庫的方法。
  首先需要下載mp3lame,這里有兩個方案可以選擇:
  →到http://sourceforge.net/project/showfiles.php?group_id=290下載lame-3.97.tar.gz,使用以下命令編譯并安裝到MinGW的庫中:
  ./configure --prefix=/static --disable-shared --enable-static
  make
  make install
  或者將mp3lame編譯為動態鏈接庫:
  ./configure --prefix=/shared
  make
  make install
  →到http://oss.netfarm.it/mplayer-win32.php下載已經編譯的mp3lame庫,解壓后復制到“D:/msys/mingw”文件夾下。
  接下來和前述步驟類似,切換到存放FFmpeg源代碼的目錄,在傳遞配置參數時要加入“--enable-libmp3lame” ,即使用以下命令配置:
  ./configure --enable-static --enable-shared --enable-memalign-hack --enable-libmp3lame
  配置后顯示的信息如下圖:


圖5

  可以看到這時libmp3lame已經為enabled,下面只要使用"make"命令編譯就可以了。
  最終我的FFmpeg配置為:
--enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-liba52 --enable-avisynth --enable-libdts --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libogg --enable-libtheora --enable-libvorbis --enable-x264 --enable-xvid --enable-amr_nb --enable-amr_wb --cpu=i686 --enable-memalign-hack --extra-ldflags=-static
===============華麗的分隔線=========
本文參考了http://www.aurora-x.net/wiki/CompileFFmpegWindows和FFmpeg工程組的有關內容,并針對已經過時的部分稍加修改,感謝網絡上無私奉獻的朋友們。星塵☆回憶tag:blogger.com,1999:blog-399668078016494547.post-35850969380399542382007-05-21T22:08:00.000+08:002007-05-21T23:33:28.932+08:00為了寫畢業論文,我不得不把繁瑣至極的FFmpeg編譯過程又重復了一遍。累啊!

?

另外一篇文章:

1、下載
SVN 客戶端 TortoiseSVN
http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.msi

MinGW + MSYS
http://sourceforge.net/project/showfiles.php?group_id=2435
MinGW-5.1.3.exe (安裝時,根據選項會自動下載相關編譯器等)
MSYS-1.0.11-20071204.tar.bz2 (解壓bin里面的文件,覆蓋到安裝好的MSYS相應目錄)
bash-3.1-MSYS-1.0.11-1.tar.bz2 (解壓bin里面的文件,覆蓋到安裝好的MSYS相應目錄)
coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 (需要bin里面的pr.exe,拷貝到MSYS相應目錄,configure時候會用到這個工具)

http://gd.tuwien.ac.at/gnu/mingw/?fisel=0-9,a-z,A-Z
MSYS-1.0.11-2004.04.30-1.exe (MSYS安裝程序)

2、安裝
安裝 MinGW-5.1.3.exe
安裝 MSYS-1.0.11-2004.04.30-1.exe
配置 MSYS 的 etc 下的 fstab,指定 MinGW 的位置

3、獲取 FFmpeg 源碼
用 TortoiseSVN 將 FFmpeg 源碼 checkout 到本地
svn://svn.mplayerhq.hu/ffmpeg/trunk

4、編譯
./configure ....................................(各種參數)
make
make install


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453882.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453882.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos 文件夾網絡連接_centos8 安裝后網絡不通及網絡配置

一 修改配置文件設置網絡時首先打開配置文件,配置文件默認如下所示,如果使用dhcp自動獲取ip,只需將ONBOOTno修改為ONBOOTno即可。#網卡配置文件按默認配置TYPEEthernetPROXY_METHODnoneBROWSER_ONLYnoBOOTPROTOdhcpDEFROUTEyesIPV4_FAILURE_F…

STM32 HAL庫詳解 及 手動移植

源: STM32 HAL庫詳解 及 手動移植轉載于:https://www.cnblogs.com/LittleTiger/p/8044047.html

Python 內置函數之 open (文件操作)

正常的文件操作都分三步走:打開文件,操作文件,關閉文件。 python open() 函數用于打開一個文件,創建一個 file 對象,相關的方法才可以調用它進行讀寫 語法 文件句柄 open(文件名,模式) 例如:f open(a…

windows系統下_ffmpeg編譯_2011年

ffmpeg開源庫在linux系統下弄的,是一個很全的音頻和視頻的編解碼庫要在windows下編譯出用于開發的lib庫確實比linux下要麻煩,百度了很久,參照別人的見解終于成功編譯出自己需要的可以用于開發的庫(dll的形式,附帶dll的…

部署WEB項目到服務器(三)安裝mysql到linux服務器(Ubuntu)詳解

突發奇想,想在自己電腦上部署一個web網站。 1,首先是下載一個適合自己已安裝服務器版本的mysql數據庫。 這里使用網上的鏈接http://dev.mysql.com/downloads/mysql/5.6.html#downloads 或者使用代理網站上下載:https://mirrors.huaweicloud.c…

在Windows下編譯ffmpeg完全手冊

本文的內容幾乎全部來自于FFmpeg on Windows,但是由于國內的網絡封鎖,很難訪問這個域名下的內容,因此我一方面按照我自己的理解和實踐做了翻譯,另一方面也是為了能提供一個方便的參考方法。 注: 1. 對于compil…

padding和卷積的區別_TensorFlow筆記1——20.CNN卷積神經網絡padding兩種模式SAME和VALID...

第1種解說:(核心最后一張圖,兩種填充方式輸出的形狀尺寸計算公式)在用tensorflow寫CNN的時候,調用卷積核api的時候,會有填padding方式的參數,找到源碼中的函數定義如下(max pooling也是一樣)&am…

MORMOT數據庫連接池

MORMOT數據庫連接池 MORMOT封裝了一堆的PROPS控件,用于連接各種數據庫。 MORMOT的封裝是武裝到了牙齒的,這堆PROPS控件居然數據庫連接池也封裝好了。這就為我們省了不少事,筆者非常喜歡! 下面拿TOleDBMSSQLConnectionProperties控…

循環神經網絡變形之 (Long Short Term Memory,LSTM)

1、長短期記憶網絡LSTM簡介 在RNN 計算中,講到對于傳統RNN水平方向進行長時刻序列依賴時可能會出現梯度消失或者梯度爆炸的問題。LSTM 特別適合解決這種需要長時間依賴的問題。 LSTM(Long Short Term Memory,長短期記憶網絡)是R…

Windows 系統下使用 MinGW + MSYS + GCC 編譯 FFMPEG

一定要按照順序操作,否則你很可能持續遇到很多奇怪的問題(ffmpeg對編譯系統版本要求比較高)。 1. www.mingw.org: 下載并安裝 MinGW 5.1.4 (http://jaist.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe),安裝時選中 g, m…

eclipse怎樣改編碼格式_Eclipse中各種編碼格式及設置

操作系統:Windows 10(家庭中文版)Eclipse版本:Version: Oxygen.1a Release (4.7.1a)剛看到一篇文章,里面介紹說Ascii、Unicode是編碼,而GBK、UTD-8等是編碼格式。Java中的編碼問題(by 迷失之路):https://www.cnblogs.c…

UE4 ShooterGame Demo的開火的代碼

之前一直沒搞懂按下鼠標左鍵開火之后&#xff0c;代碼的邏輯是怎么走的&#xff0c;今天看懂了之前沒看懂的部分&#xff0c;進了一步 ShooterCharacter.cpp void AShooterCharacter::OnStartFire() {AShooterPlayerController* MyPC Cast<AShooterPlayerController>(Co…

kafka 異常:return ‘<SimpleProducer batch=%s>‘ % self.async ^ SyntaxError: invalid syntax

Python3.X 執行Python編寫的生產者和消費者報錯&#xff0c;報錯信息如下&#xff1a; Traceback (most recent call last): File "mykit_kafka_producer.py", line 9, in <module> from kafka import KafkaProducer File "/usr/local/lib/python3.7/sit…

python 分布式計算框架_漫談分布式計算框架

如果問 mapreduce 和 spark 什么關系&#xff0c;或者說有什么共同屬性&#xff0c;你可能會回答他們都是大數據處理引擎。如果問 spark 與 tensorflow 呢&#xff0c;就可能有點迷糊&#xff0c;這倆關注的領域不太一樣啊。但是再問 spark 與 MPI 呢&#xff1f;這個就更遠了。…

Codeforces 899D Shovel Sale

題目大意 給定正整數 $n$&#xff08;$2\le n\le 10^9$&#xff09;。 考慮無序整數對 $(x, y)$&#xff08;$1\le x,y\le n, x\ne y$&#xff09;。 求滿足 「$xy$ 結尾連續的 9 最多」的數對 $(x,y)$ 的個數。 例子&#xff1a; $n50$&#xff0c;$(49,50)$ 是一個滿足條件的…

Windows系統使用minGW+msys 編譯ffmpeg 0.5的全過程詳述

一.環境配置 1.下載并安裝 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourcef … -5.1.4.exe)&#xff0c;安裝時選中 g, mingw make。建議安裝到c:/mingw. 2.下載并安裝 MSYS-1.0.11-rc-1.exe (http://jaist.dl.sourceforge.net/sourcef … 1-rc-1.exe)&#xff0c;安…

Liunx安裝gogs,mysql,jdk,tomcat等常用軟件

Liunx CentOS系統采用yum安裝Mysql 一.安裝mysql客戶端 yum -y install mysql 二.安裝mysql服務器端 [注意:由于CentOS7下的不自帶mysql-server,所以得先安裝資源包,步驟: 1.wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm (采用wget獲取必須有wge…

stm32單片機端口映射_STM32單片機的重映射與地址映射的使用方法及步驟

重映射STM32中對于一些端口的外設已經被其他引腳所使用&#xff0c;這是就需要用端口重映射來解決了&#xff0c;很方便。以USART1為例重映射的步驟為&#xff1a;打開重映射時鐘和USART重映射后的I/O口引腳時鐘&#xff0c;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_A…

python 第三方模塊 yaml - 處理 YAML (專門用來寫配置文件的語言)

markdown 的配置使用 Yaml —— Yet Another Markup Language &#xff1a;另一種標記語言。 簡介 YAML 是專門用來寫配置文件的語言&#xff0c;非常簡潔和強大&#xff0c;遠比 JSON 格式方便。 YAML在python語言中有PyYAML安裝包。 YAML 語言&#xff08;發音 /?jm?l/ &…

程序員 賺錢

業余編程賺錢 程序員的好方法 現在的人生活水平高了&#xff0c;開銷也大了&#xff0c;同時對于一些技術性人員來說有很多種&#xff0c;有些程序員自己開公司&#xff0c;開發自己的產品&#xff0c;年賺百萬&#xff0c;有些程序員還在給別人打工&#xff0c;每天累死累活的…