FFmpeg示例程序合集-批量編譯腳本

此前做了一系列有關FFmpeg的示例程序,組成了《 最簡單的FFmpeg示例程序合集》,其中包含了如下項目:
simplest ffmpeg player: ? ? ? ? ? ? ? ? ?最簡單的基于FFmpeg的視頻播放器
simplest ffmpeg audio player: ? ? ? 最簡單的基于FFmpeg的音頻播放器
simplest ffmpeg pic encoder: ? ? ? ?最簡單的基于FFmpeg的圖像編碼器
simplest ffmpeg video encoder: ? ?最簡單的基于FFmpeg的視頻編碼器
simplest ffmpeg audio encoder: ? 最簡單的基于FFmpeg的音頻編碼器
simplest ffmpeg streamer: ? ? ? ? ? ? 最簡單的基于FFmpeg的推流器(推送RTMP)
simplest ffmpeg mem handler: ? ? 最簡單的基于FFmpeg的內存讀寫例子
simplest ffmpeg device: ? ? ? ? ? ? ? ? 最簡單的基于FFmpeg的AVDevice例子
simplest ffmpeg format: ? ? ? ? ? ? ? ? 最簡單的基于FFmpeg的封裝格式方面的例子
simplest ffmpeg video filter: ? ? ? ? ?最簡單的基于FFmpeg的AVfilter例子(水印疊加)
simplest ffmpeg swscale: ? ? ? ? ? ? 最簡單的基于FFmpeg的libswscale的示例
?
開始的時候,我只是在VC2010下調試通過了這些程序。去年就有不少朋友跟我提建議希望能把代碼改成跨平臺的。后來我調查了一下也發現FFmpeg確實在各個平臺都有廣泛的應用,因此也產生了把代碼改成跨平臺的意愿。但是改成跨平臺代碼的工作量比較大,所以一直也沒有做出實際行動。今年春節前夕可算是得到了一陣相對自由的時間,于是果斷進行了一陣子“連續戰斗”,終于實現了這些工程在VC++,cl.exe,MinGW,Linux GCC以及MacOS GCC上面順利的編譯。在這個過程中,也寫了各種編譯器的編譯腳本,在這里記錄一下。
本文記錄以下幾種編譯腳本:
VC++:simplest_ffmpeg_demos_compile_devenv_all.bat
CL.exe:simplest_ffmpeg_demos_compile_cl_all.bat
MinGW:simplest_ffmpeg_demos_compile_mingw_all.sh
GCC (Linux/MacOS):simplest_ffmpeg_demos_compile_gcc_all.sh

? ? ? ???? ? ? ? ? ? ?? ? ? ? ? ?

下載地址:
【Github】 https://github.com/leixiaohua1020/leixiaohua1020.github.io/tree/master/batch

?

準備工作

在記錄具體的編譯腳本之前,首先簡單記錄一下在不同平臺下編譯這些FFmpeg工程需要做的準備工作。注意這一步驟針對的是一臺完全空白未做任何配置的“裸機”。如果已經編譯安裝過FFmpeg,就可以直接跳過這一步驟。

PS:一些示例程序需要安裝SDL2,方法類似,不再記錄。

VC++

VC++的編譯是最簡單的,相關的include和lib都已經配置好了,可以直接編譯運行。

CL.exe

基本上等同于使用VC++編譯,可以直接編譯運行。

MinGW

兩種方法:直接安裝和源代碼編譯

直接安裝

(1)從FFmpeg Windows Build (http://ffmpeg.zeranoe.com/) 網站下載最新的shared 和dev版本的FFmpeg。

(2)在Msys安裝目錄下創建“local”文件夾,“local”文件夾下創建“include”和“lib”文件夾。

(3)將FFmpeg的dev版本下的include拷貝至{msys}/local/include;lib拷貝至{msys}/local/lib。

(4)將FFmpeg的shared版本下的Dll拷貝至{mingw}/bin。

源代碼編譯

(1)安裝Yasm

從官網下載yasmXXX.exe,然后重命名為yasm.exe,拷貝至{mingw}/bin

PS:也可以下載源代碼自己編譯,稍微麻煩些,不再記錄。

(2)編譯安裝SDL

PS:注意SDL的安裝路徑如果沒有安裝在{msys}/local目錄下的話,configure的時候設置一下。

(3)編譯安裝libx264

(3)編譯安裝libfaac

(4)編譯安裝FFmpeg

[plain] view plaincopy
  1. ./configure?--enable-shared?--enable-libfaac?--enable-libx264?--enable-gpl?--enable-nonfree??
  2. make??
  3. make?install??


Linux

(0)前期準備

某些Linux沒有安裝gcc/g++,需要先安裝gcc/g++

進入超級管理員“su”

(1)安裝相關的類庫

[Debian/Ubuntu]

[plain] view plaincopy
  1. apt-get?-y?install?yasm?libfaac-dev?libx264-dev?libsdl1.2-dev??

PS:這些類庫也可以下載源代碼手動編譯,稍微麻煩些,不再記錄。

[RedHat/Fedora/CentOS]

需要手動編譯每個類庫

(2)編譯安裝FFmpeg

[plain] view plaincopy
  1. ./configure?--enable-shared?--enable-libfaac?--enable-libx264?--enable-gpl?--enable-nonfree??
  2. make??
  3. make?install??


MacOS

兩種方法:直接安裝和源代碼編譯

直接安裝

(1)安裝Homebrew

[plain] view plaincopy
  1. ruby?-e?"$(curl?-fsSL?https://raw.githubusercontent.com/Homebrew/install/master/install)"??

(2)安裝FFmpeg

[plain] view plaincopy
  1. brew?install?ffmpeg??


源代碼編譯

(1)安裝Homebrew

[plain] view plaincopy
  1. ruby?-e?"$(curl?-fsSL?https://raw.githubusercontent.com/Homebrew/install/master/install)"??

(2)安裝相關的類庫

[plain] view plaincopy
  1. brew?install?yasm?faac?x264?sdl??

(3)編譯安裝FFmpeg

進入超級管理員“su”

[plain] view plaincopy
  1. ./configure?--enable-shared?--enable-libfaac?--enable-libx264?--enable-gpl?--enable-nonfree??
  2. make??
  3. make?install??


VC++



使用devenv.exe進行編譯是最簡單的一種命令行編譯方式。這種編譯方式和使用VC++代開*.sln解決方案文件然后單擊“編譯”按鈕的效果是一樣的。由于項目解決方案中已經做過了include,lib以及相關選項的設置,所以不需要做各種參數的配置。下面這條命令編譯Debug版本程序:
[plain] view plaincopy
  1. devenv.exe?simplest_ffmpeg_player2.sln?/rebuild?Debug??
下面這條命令編譯生成Release版本程序,同時將編譯過程中的日志輸出到“sf_player_release_ compile_log.txt”文件中:
[plain] view plaincopy
  1. devenv.exe?simplest_ffmpeg_player2.sln?/rebuild?Release?/Out?sf_player_release_?compile_log.txt??
使用devenv進行編譯的時候,需要VC++運行環境,有2種方法可以設置:
(1) ? ? ? 批處理調用VC++設置環境的腳本,例如對于VC2010來說,位于“D:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat”
(2) ? ? ? 在“Visual Studio 命令提示符”中運行批處理(或者編譯命令)。“Visual Studio 命令提示符”位于伴隨著VC++安裝,位于“Visual Studio Tools”目錄下。
?
完整的腳本simplest_ffmpeg_demos_compile_devenv_all.bat如下所示。將腳本拷貝至《最簡單的FFmpeg示例程序合集》所在目錄運行,就可以編譯所有項目的Release版本和Debug版本,并且輸出相關的編譯日志。
?
[plain] view plaincopy
  1. @echo?off??
  2. echo?---------------------------------------------??
  3. echo?simplest?ffmpeg?demos?list?----?Devenv?compile?all??
  4. echo?Lei?Xiaohua??
  5. echo?Communication?University?of?China?/?Digital?TV?Technology??
  6. echo?leixiaohua1020@126.com??
  7. echo?http://blog.csdn.net/leixiaohua1020??
  8. echo?---------------------------------------------??
  9. ???
  10. set?logfile=compile_log.txt??
  11. ::VS2010?Environment??
  12. call?"D:\Program?Files\Microsoft?Visual?Studio?10.0\VC\vcvarsall.bat"??
  13. ::=====================================================================================??
  14. echo.??
  15. echo?Compile?simplest_ffmpeg_player...??
  16. cd?simplest_ffmpeg_player??
  17. devenv.exe?simplest_ffmpeg_player2.sln?/rebuild?Debug?/Out?../sf_player_debug_%logfile%??
  18. devenv.exe?simplest_ffmpeg_player2.sln?/rebuild?Release?/Out?../sf_player_release_%logfile%??
  19. cd?..??
  20. ???
  21. ::=====================================================================================??
  22. echo.??
  23. echo?Compile?simplest_ffmpeg_audio_player...??
  24. cd?simplest_ffmpeg_audio_player??
  25. devenv.exe?simplest_ffmpeg_audio_player2.sln?/rebuild?Debug?/Out?../sf_audio_player_debug_%logfile%??
  26. devenv.exe?simplest_ffmpeg_audio_player2.sln?/rebuild?Release?/Out?../sf_audio_player_release_%logfile%??
  27. cd?..??
  28. ???
  29. ::=====================================================================================??
  30. echo.??
  31. echo?Compile?simplest_ffmpeg_picture_encoder...??
  32. cd?simplest_ffmpeg_picture_encoder??
  33. devenv.exe?simplest_ffmpeg_picture_encoder.sln?/rebuild?Debug?/Out?../sf_picture_encoder_debug_%logfile%??
  34. devenv.exe?simplest_ffmpeg_picture_encoder.sln?/rebuild?Release?/Out?../sf_picture_encoder_release_%logfile%??
  35. cd?..??
  36. ???
  37. ::=====================================================================================??
  38. echo.??
  39. echo?Compile?simplest_ffmpeg_video_encoder...??
  40. cd?simplest_ffmpeg_video_encoder??
  41. devenv.exe?simplest_ffmpeg_video_encoder.sln?/rebuild?Debug?/Out?../sf_video_encoder_debug_%logfile%??
  42. devenv.exe?simplest_ffmpeg_video_encoder.sln?/rebuild?Release?/Out?../sf_video_encoder_release_%logfile%??
  43. cd?..??
  44. ???
  45. ::=====================================================================================??
  46. echo.??
  47. echo?Compile?simplest_ffmpeg_audio_encoder...??
  48. cd?simplest_ffmpeg_audio_encoder??
  49. devenv.exe?simplest_ffmpeg_audio_encoder.sln?/rebuild?Debug?/Out?../sf_audio_encoder_debug_%logfile%??
  50. devenv.exe?simplest_ffmpeg_audio_encoder.sln?/rebuild?Release?/Out?../sf_audio_encoder_release_%logfile%??
  51. cd?..??
  52. ???
  53. ::=====================================================================================??
  54. echo.??
  55. echo?Compile?simplest_ffmpeg_streamer...??
  56. cd?simplest_ffmpeg_streamer??
  57. devenv.exe?simplest_ffmpeg_streamer.sln?/rebuild?Debug?/Out?../sf_streamer_debug_%logfile%??
  58. devenv.exe?simplest_ffmpeg_streamer.sln?/rebuild?Release?/Out?../sf_streamer_release_%logfile%??
  59. cd?..??
  60. ???
  61. ::=====================================================================================??
  62. echo.??
  63. echo?Compile?simplest_ffmpeg_mem_handler...??
  64. cd?simplest_ffmpeg_mem_handler??
  65. devenv.exe?simplest_ffmpeg_mem_handler.sln?/rebuild?Debug?/Out?../sf_mem_handler_debug_%logfile%??
  66. devenv.exe?simplest_ffmpeg_mem_handler.sln?/rebuild?Release?/Out?../sf_mem_handler_release_%logfile%??
  67. cd?..??
  68. ???
  69. ::=====================================================================================??
  70. echo.??
  71. echo?Compile?simplest_ffmpeg_device...??
  72. cd?simplest_ffmpeg_device??
  73. devenv.exe?simplest_ffmpeg_device.sln?/rebuild?Debug?/Out?../sf_device_debug_%logfile%??
  74. devenv.exe?simplest_ffmpeg_device.sln?/rebuild?Release?/Out?../sf_device_release_%logfile%??
  75. cd?..??
  76. ???
  77. ::=====================================================================================??
  78. echo.??
  79. echo?Compile?simplest_ffmpeg_format...??
  80. cd?simplest_ffmpeg_format??
  81. devenv.exe?simplest_ffmpeg_format.sln?/rebuild?Debug?/Out?../sf_format_debug_%logfile%??
  82. devenv.exe?simplest_ffmpeg_format.sln?/rebuild?Release?/Out?../sf_format_release_%logfile%??
  83. cd?..??
  84. ???
  85. ::=====================================================================================??
  86. echo.??
  87. echo?Compile?simplest_ffmpeg_video_filter...??
  88. cd?simplest_ffmpeg_video_filter??
  89. devenv.exe?simplest_ffmpeg_video_filter.sln?/rebuild?Debug?/Out?../sf_video_filter_debug_%logfile%??
  90. devenv.exe?simplest_ffmpeg_video_filter.sln?/rebuild?Release?/Out?../sf_video_filter_release_%logfile%??
  91. cd?..??
  92. ???
  93. ::=====================================================================================??
  94. echo.??
  95. echo?Compile?simplest_ffmpeg_swscale...??
  96. cd?simplest_ffmpeg_swscale??
  97. devenv.exe?simplest_ffmpeg_swscale.sln?/rebuild?Debug?/Out?../sf_swscale_debug_%logfile%??
  98. devenv.exe?simplest_ffmpeg_swscale.sln?/rebuild?Release?/Out?../sf_swscale_release_%logfile%??
  99. cd?..??
  100. ???
  101. ::=====================================================================================??

?

CL.exe



cl.exe 是Microsoft C/C++編譯器,和GCC屬于同一個層面的東西。一個基本的調用cl.exe編譯的命令行如下所示:
[plain] view plaincopy
  1. cl.exe?helloworld.cpp??
上述命令執行完后即可在同一目錄下生成一個helloworld.exe的可執行程序。
編譯包含類庫的程序相對來說要復雜一些,下面以Simplest FFmpeg Player為例看一下它的編譯腳本。Simplest FFmpeg Player使用CL.exe編譯的腳本保存在“compile_cl.bat”文件中,如下所示。
[plain] view plaincopy
  1. ::最簡單的基于FFmpeg的視頻播放器?2----命令行編譯??
  2. ::Simplest?FFmpeg?Player?2----Compile?in?Cmd??
  3. ::??
  4. ::雷霄驊?Lei?Xiaohua??
  5. ::leixiaohua1020@126.com??
  6. ::中國傳媒大學/數字電視技術??
  7. ::Communication?University?of?China?/?Digital?TV?Technology??
  8. ::http://blog.csdn.net/leixiaohua1020??
  9. ::??
  10. ::VS2010?Environment??
  11. call?"D:\Program?Files\Microsoft?Visual?Studio?10.0\VC\vcvarsall.bat"??
  12. ::include??
  13. @set?INCLUDE=include;%INCLUDE%??
  14. ::lib??
  15. @set?LIB=lib;%LIB%??
  16. ::compile?and?link??
  17. cl?simplest_ffmpeg_player.cpp?/MD?/link?SDL2.lib?SDL2main.lib?avcodec.lib?^??
  18. avformat.lib?avutil.lib?avdevice.lib?avfilter.lib?postproc.lib?swresample.lib?swscale.lib?^??
  19. /SUBSYSTEM:WINDOWS?/OPT:NOREF??
  20. exit??

這個腳本按照順序做了以下幾點工作:
(1)設置VC++運行環境。這一步通過call "D:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"實現。
(2)設置include目錄。這一步設置FFmpeg以及SDL2的頭文件所在的目錄,通過修改include環境變量實現(在include環境變量前面加上項目文件夾中的“include”目錄)。
(3)設置lib目錄。這一步設置FFmpeg以及SDL2的庫文件所在的目錄,通過修改lib環境變量實現(在lib環境變量前面加上項目文件夾中的“lib”目錄)。
(4) 編譯和鏈接。這一步用于將simplest_ffmpeg_player.cpp編譯生成simplest_ffmpeg_player.exe。在這里需要注意幾點:
a) 鏈接類庫使用/link
b) 使用SDL類庫的時候,務必設置/MD選項(使用動態鏈接的庫)
c) ?使用SDL類庫的時候,務必設置/SUBSYSTEM:WINDOWS
d) ?使用FFmpeg類庫的時候,務必設置/OPT:NOREF
上述腳本運行完城后,生成simplest_ffmpeg_player.exe。
?
完整的腳本simplest_ffmpeg_demos_compile_cl_all.bat如下所示。將腳本拷貝至《最簡單的FFmpeg示例程序合集》所在目錄運行,就可以編譯所有的示例程序。注意這個腳本只是分別調用了各個程序目錄下的compile_cl.bat文件。
?
[plain] view plaincopy
  1. @echo?off??
  2. echo?---------------------------------------------??
  3. echo?simplest?ffmpeg?demos?list?----?CL?compile?all??
  4. echo?Lei?Xiaohua??
  5. echo?Communication?University?of?China?/?Digital?TV?Technology??
  6. echo?leixiaohua1020@126.com??
  7. echo?http://blog.csdn.net/leixiaohua1020??
  8. echo?---------------------------------------------??
  9. ::=====================================================================================??
  10. ???
  11. echo.??
  12. echo?Compile?simplest_ffmpeg_player...??
  13. cd?simplest_ffmpeg_player??
  14. cd?simplest_ffmpeg_player??
  15. start?/wait?compile_cl.bat??
  16. cd?..??
  17. cd?simplest_ffmpeg_player_su??
  18. start?/wait?compile_cl.bat??
  19. cd?..??
  20. cd?simplest_ffmpeg_decoder_pure??
  21. start?/wait?compile_cl.bat??
  22. cd?..??
  23. cd?..??
  24. ???
  25. ::=====================================================================================??
  26. echo.??
  27. echo?Compile?simplest_ffmpeg_audio_player...??
  28. cd?simplest_ffmpeg_audio_player??
  29. cd?simplest_ffmpeg_audio_player??
  30. start?/wait?compile_cl.bat??
  31. cd?..??
  32. cd?..??
  33. ???
  34. ::=====================================================================================??
  35. echo.??
  36. echo?Compile?simplest_ffmpeg_picture_encoder...??
  37. cd?simplest_ffmpeg_picture_encoder??
  38. cd?simplest_ffmpeg_picture_encoder??
  39. start?/wait?compile_cl.bat??
  40. cd?..??
  41. cd?..??
  42. ???
  43. ::=====================================================================================??
  44. echo.??
  45. echo?Compile?simplest_ffmpeg_video_encoder...??
  46. cd?simplest_ffmpeg_video_encoder??
  47. cd?simplest_ffmpeg_video_encoder??
  48. start?/wait?compile_cl.bat??
  49. cd?..??
  50. cd?simplest_ffmpeg_video_encoder_pure??
  51. start?/wait?compile_cl.bat??
  52. cd?..??
  53. cd?..??
  54. ???
  55. ::=====================================================================================??
  56. echo.??
  57. echo?Compile?simplest_ffmpeg_audio_encoder...??
  58. cd?simplest_ffmpeg_audio_encoder??
  59. cd?simplest_ffmpeg_audio_encoder??
  60. start?/wait?compile_cl.bat??
  61. cd?..??
  62. cd?..??
  63. ???
  64. ::=====================================================================================??
  65. echo.??
  66. echo?Compile?simplest_ffmpeg_streamer...??
  67. cd?simplest_ffmpeg_streamer??
  68. cd?simplest_ffmpeg_streamer??
  69. start?/wait?compile_cl.bat??
  70. cd?..??
  71. cd?..??
  72. ???
  73. ::=====================================================================================??
  74. echo.??
  75. echo?Compile?simplest_ffmpeg_mem_handler...??
  76. cd?simplest_ffmpeg_mem_handler??
  77. cd?simplest_ffmpeg_mem_player??
  78. start?/wait?compile_cl.bat??
  79. cd?..??
  80. cd?simplest_ffmpeg_mem_transcoder??
  81. start?/wait?compile_cl.bat??
  82. cd?..??
  83. cd?..??
  84. ???
  85. ::=====================================================================================??
  86. echo.??
  87. echo?Compile?simplest_ffmpeg_device...??
  88. cd?simplest_ffmpeg_device??
  89. cd?simplest_ffmpeg_grabdesktop??
  90. start?/wait?compile_cl.bat??
  91. cd?..??
  92. cd?simplest_ffmpeg_readcamera??
  93. start?/wait?compile_cl.bat??
  94. cd?..??
  95. cd?..??
  96. ???
  97. ::=====================================================================================??
  98. echo.??
  99. echo?Compile?simplest_ffmpeg_format...??
  100. cd?simplest_ffmpeg_format??
  101. cd?simplest_ffmpeg_demuxer??
  102. start?/wait?compile_cl.bat??
  103. cd?..??
  104. cd?simplest_ffmpeg_demuxer_simple??
  105. start?/wait?compile_cl.bat??
  106. cd?..??
  107. cd?simplest_ffmpeg_muxer??
  108. start?/wait?compile_cl.bat??
  109. cd?..??
  110. cd?simplest_ffmpeg_remuxer??
  111. start?/wait?compile_cl.bat??
  112. cd?..??
  113. cd?..??
  114. ???
  115. ::=====================================================================================??
  116. echo.??
  117. echo?Compile?simplest_ffmpeg_video_filter...??
  118. cd?simplest_ffmpeg_video_filter??
  119. cd?simplest_ffmpeg_video_filter??
  120. start?/wait?compile_cl.bat??
  121. cd?..??
  122. cd?..??
  123. ???
  124. ::=====================================================================================??
  125. echo.??
  126. echo?Compile?simplest_ffmpeg_swscale...??
  127. cd?simplest_ffmpeg_swscale??
  128. cd?simplest_ffmpeg_swscale??
  129. start?/wait?compile_cl.bat??
  130. cd?..??
  131. cd?simplest_pic_gen??
  132. start?/wait?compile_cl.bat??
  133. cd?..??
  134. cd?..??
  135. ???
  136. ::=====================================================================================??


?

MinGW



MinGW是Windows下的GCC/G++編譯器。使用MinGW編譯需要運行其安裝目錄下的msys.bat設置其環境變量。一個基本的調用MinGW gcc編譯的命令行如下所示:
[plain] view plaincopy
  1. gcc?helloworld.cpp?-o?helloworld.exe??
上述命令執行完后即可在同一目錄下生成一個helloworld.exe的可執行程序。
編譯包含類庫的程序相對來說要復雜一些,下面以Simplest FFmpeg Player為例看一下它的編譯腳本。Simplest FFmpeg Player使用MinGW GCC編譯的腳本保存在“compile_mingw.sh”文件中,如下所示。
[plain] view plaincopy
  1. #!?/bin/sh??
  2. #最簡單的基于FFmpeg的視頻播放器?2----MinGW命令行編譯??
  3. #Simplest?FFmpeg?Player?2----Compile?in?MinGW??
  4. #??
  5. #雷霄驊?Lei?Xiaohua??
  6. #leixiaohua1020@126.com??
  7. #中國傳媒大學/數字電視技術??
  8. #Communication?University?of?China?/?Digital?TV?Technology??
  9. #http://blog.csdn.net/leixiaohua1020??
  10. #??
  11. #compile??
  12. g++?simplest_ffmpeg_player.cpp?-g?-o?simplest_ffmpeg_player.exe?\??
  13. -I?/usr/local/include?-L?/usr/local/lib?\??
  14. -lmingw32?-lSDL2main?-lSDL2?-lavformat?-lavcodec?-lavutil?-lswscale??
?
這個腳本使用MinGW中的g++完成編譯。在這里要注意一點,并不是gcc只能編譯c代碼,g++只能編譯c++代碼,而是gcc和g++都可以編譯C和C++代碼。源代碼文件后綴為.c的,gcc把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序。上述編譯命令有以下幾點需要注意:
(a) ?include目錄設置為/usr/local/include,要確保SDL2和FFmpeg的頭文件都安裝在這個目錄里(SDL2有可能沒有安裝在這里)
(b) ?lib目錄設置為/usr/local/lib,要確保SDL2和FFmpeg的庫文件都安裝在這個目錄里(SDL2有可能沒有安裝在這里)
(c) ?使用SDL類庫的時候,務必鏈接-lmingw32
上述腳本運行完城后,生成simplest_ffmpeg_player.exe。
?
完整的腳本simplest_ffmpeg_demos_compile_mingw_all.sh如下所示。將腳本拷貝至《最簡單的FFmpeg示例程序合集》所在目錄運行,就可以編譯所有的示例程序。注意這個腳本只是分別調用了各個程序目錄下的compile_mingw.sh文件。
?
[plain] view plaincopy
  1. echo?"============================================="??
  2. echo?"simplest?ffmpeg?demos?list?----?MinGW?compile?all"??
  3. echo?"Lei?Xiaohua"??
  4. echo?"Communication?University?of?China?/?Digital?TV?Technology"??
  5. echo?"leixiaohua1020@126.com"??
  6. echo?"http://blog.csdn.net/leixiaohua1020"??
  7. echo?"============================================="??
  8. #=====================================================================================??
  9. ???
  10. echo?""??
  11. echo?"Compile?simplest_ffmpeg_player..."??
  12. cd?simplest_ffmpeg_player??
  13. cd?simplest_ffmpeg_player??
  14. sh?compile_mingw.sh??
  15. cd?..??
  16. cd?simplest_ffmpeg_player_su??
  17. sh?compile_mingw.sh??
  18. cd?..??
  19. cd?simplest_ffmpeg_decoder_pure??
  20. sh?compile_mingw.sh??
  21. cd?..??
  22. cd?..??
  23. ???
  24. #=====================================================================================??
  25. echo?""??
  26. echo?"Compile?simplest_ffmpeg_audio_player..."??
  27. cd?simplest_ffmpeg_audio_player??
  28. cd?simplest_ffmpeg_audio_player??
  29. sh?compile_mingw.sh??
  30. cd?..??
  31. cd?..??
  32. ???
  33. #=====================================================================================??
  34. echo?""??
  35. echo?"Compile?simplest_ffmpeg_picture_encoder..."??
  36. cd?simplest_ffmpeg_picture_encoder??
  37. cd?simplest_ffmpeg_picture_encoder??
  38. sh?compile_mingw.sh??
  39. cd?..??
  40. cd?..??
  41. ???
  42. #=====================================================================================??
  43. echo?""??
  44. echo?"Compile?simplest_ffmpeg_video_encoder..."??
  45. cd?simplest_ffmpeg_video_encoder??
  46. cd?simplest_ffmpeg_video_encoder??
  47. sh?compile_mingw.sh??
  48. cd?..??
  49. cd?simplest_ffmpeg_video_encoder_pure??
  50. sh?compile_mingw.sh??
  51. cd?..??
  52. cd?..??
  53. ???
  54. #=====================================================================================??
  55. echo?""??
  56. echo?"Compile?simplest_ffmpeg_audio_encoder..."??
  57. cd?simplest_ffmpeg_audio_encoder??
  58. cd?simplest_ffmpeg_audio_encoder??
  59. sh?compile_mingw.sh??
  60. cd?..??
  61. cd?..??
  62. ???
  63. #=====================================================================================??
  64. echo?""??
  65. echo?"Compile?simplest_ffmpeg_streamer..."??
  66. cd?simplest_ffmpeg_streamer??
  67. cd?simplest_ffmpeg_streamer??
  68. sh?compile_mingw.sh??
  69. cd?..??
  70. cd?..??
  71. ???
  72. #=====================================================================================??
  73. echo?""??
  74. echo?"Compile?simplest_ffmpeg_mem_handler..."??
  75. cd?simplest_ffmpeg_mem_handler??
  76. cd?simplest_ffmpeg_mem_player??
  77. sh?compile_mingw.sh??
  78. cd?..??
  79. cd?simplest_ffmpeg_mem_transcoder??
  80. sh?compile_mingw.sh??
  81. cd?..??
  82. cd?..??
  83. ???
  84. #=====================================================================================??
  85. echo?""??
  86. echo?"Compile?simplest_ffmpeg_device..."??
  87. cd?simplest_ffmpeg_device??
  88. cd?simplest_ffmpeg_grabdesktop??
  89. sh?compile_mingw.sh??
  90. cd?..??
  91. cd?simplest_ffmpeg_readcamera??
  92. sh?compile_mingw.sh??
  93. cd?..??
  94. cd?..??
  95. ???
  96. #=====================================================================================??
  97. echo?""??
  98. echo?"Compile?simplest_ffmpeg_format..."??
  99. cd?simplest_ffmpeg_format??
  100. cd?simplest_ffmpeg_demuxer??
  101. sh?compile_mingw.sh??
  102. cd?..??
  103. cd?simplest_ffmpeg_demuxer_simple??
  104. sh?compile_mingw.sh??
  105. cd?..??
  106. cd?simplest_ffmpeg_muxer??
  107. sh?compile_mingw.sh??
  108. cd?..??
  109. cd?simplest_ffmpeg_remuxer??
  110. sh?compile_mingw.sh??
  111. cd?..??
  112. cd?..??
  113. ???
  114. #=====================================================================================??
  115. echo?""??
  116. echo?"Compile?simplest_ffmpeg_video_filter..."??
  117. cd?simplest_ffmpeg_video_filter??
  118. cd?simplest_ffmpeg_video_filter??
  119. sh?compile_mingw.sh??
  120. cd?..??
  121. cd?..??
  122. ???
  123. #=====================================================================================??
  124. echo?""??
  125. echo?"Compile?simplest_ffmpeg_swscale..."??
  126. cd?simplest_ffmpeg_swscale??
  127. cd?simplest_ffmpeg_swscale??
  128. sh?compile_mingw.sh??
  129. cd?..??
  130. cd?simplest_pic_gen??
  131. sh?compile_mingw.sh??
  132. cd?..??
  133. cd?..??
  134. ???
  135. #=====================================================================================??

?

GCC (Linux/MacOS)


? ? ? ??? ? ? ??

GCC是Linux/MacOS下的C/C++編譯器。在Linux/MacOS下可以使用GCC編譯C/C++程序,一個簡單的GCC編譯命令:
[plain] view plaincopy
  1. gcc?helloworld.cpp?-o?helloworld.out??
上述命令執行完后即可在同一目錄下生成一個名稱為helloworld.out的可執行程序。
編譯包含類庫的程序相對來說要復雜一些,下面以Simplest FFmpeg Player為例看一下它的編譯腳本。Simplest FFmpeg Player使用GCC編譯的腳本保存在“compile_gcc.sh”文件中,如下所示。
[plain] view plaincopy
  1. #!?/bin/sh??
  2. #最簡單的基于FFmpeg的視頻播放器?2----命令行編譯??
  3. #Simplest?FFmpeg?Player?2----Compile?in?Shell??
  4. #??
  5. #雷霄驊?Lei?Xiaohua??
  6. #leixiaohua1020@126.com??
  7. #中國傳媒大學/數字電視技術??
  8. #Communication?University?of?China?/?Digital?TV?Technology??
  9. #http://blog.csdn.net/leixiaohua1020??
  10. #??
  11. #compile??
  12. gcc?simplest_ffmpeg_player.cpp?-g?-o?simplest_ffmpeg_player.out?\??
  13. -I?/usr/local/include?-L?/usr/local/lib?-lSDL2main?-lSDL2?-lavformat?-lavcodec?-lavutil?-lswscale??
?
這個腳本使用gcc完成編譯。上文中已經提到過一次,并不是gcc只能編譯c代碼,g++只能編譯c++代碼,而是gcc和g++都可以編譯C和C++代碼。源代碼文件后綴為.c的,gcc把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序。上述編譯命令有以下幾點需要注意:
(a) ?include目錄設置為/usr/local/include,要確保SDL2和FFmpeg的頭文件都安裝在這個目錄里
(b) ?lib目錄設置為/usr/local/lib,要確保SDL2和FFmpeg的庫文件都安裝在這個目錄里
(c) ?有些版本中的Linux可能沒有安裝gcc/g++編譯器,需要先裝好這兩個編譯器
上述腳本運行完城后,生成simplest_ffmpeg_player.out。
?

注意事項:Linux和MacOS的不同

Linux和MacOS在SDL1.2的使用上有很大的不同。在MacOS下使用SDL1.2必須加上“-framework Cocoa”參數,否則編譯會出現錯誤。因此在MacOS下編譯使用SDL1.2的程序的時候,編譯命令如下所示(以simplest_ffmpeg_grabdesktop為例,該程序采用了SDL1.2)。
[plain] view plaincopy
  1. gcc?simplest_ffmpeg_grabdesktop.cpp?-g?-o?simplest_ffmpeg_grabdesktop.out?\??
  2. -framework?Cocoa?-I?/usr/local/include?-L?/usr/local/lib?-lSDLmain?-lSDL?-lavformat?-lavcodec?-lavutil?-lavdevice?-lswscale??
對于這些采用SDL1.2的程序,保存了一個MacOS下專有的腳本“compile_gcc_mac.sh”。
此外,Linux和MacOS在顯示上也有較大的不同。此前發現Windows和MacOS下可以正常顯示的程序在Ubuntu下卻會出現“綠屏”現象。不過隨著代碼的調整這一情況已經被消除了。
?
完整的腳本simplest_ffmpeg_demos_compile_gcc_all.sh如下所示。將腳本拷貝至《最簡單的FFmpeg示例程序合集》所在目錄運行,就可以編譯所有的示例程序。注意這個腳本只是分別調用了各個程序目錄下的compile_gcc.sh文件。
[plain] view plaincopy
  1. echo?"============================================="??
  2. echo?"simplest?ffmpeg?demos?list?----?GCC?compile?all"??
  3. echo?"Lei?Xiaohua"??
  4. echo?"Communication?University?of?China?/?Digital?TV?Technology"??
  5. echo?"leixiaohua1020@126.com"??
  6. echo?"http://blog.csdn.net/leixiaohua1020"??
  7. echo?"============================================="??
  8. #=====================================================================================??
  9. #OS?kernel??
  10. kernel=$(uname?-s)??
  11. ??
  12. #change?the?access?permissions?(--recursive)??
  13. chmod?-R?777?./??
  14. ??
  15. echo?""??
  16. echo?"Compile?simplest_ffmpeg_player..."??
  17. cd?simplest_ffmpeg_player??
  18. cd?simplest_ffmpeg_player??
  19. sh?compile_gcc.sh??
  20. cd?..??
  21. cd?simplest_ffmpeg_player_su??
  22. sh?compile_gcc.sh??
  23. cd?..??
  24. cd?simplest_ffmpeg_decoder_pure??
  25. sh?compile_gcc.sh??
  26. cd?..??
  27. cd?..??
  28. ??
  29. #=====================================================================================??
  30. echo?""??
  31. echo?"Compile?simplest_ffmpeg_audio_player..."??
  32. cd?simplest_ffmpeg_audio_player??
  33. cd?simplest_ffmpeg_audio_player??
  34. sh?compile_gcc.sh??
  35. cd?..??
  36. cd?..??
  37. ??
  38. #=====================================================================================??
  39. echo?""??
  40. echo?"Compile?simplest_ffmpeg_picture_encoder..."??
  41. cd?simplest_ffmpeg_picture_encoder??
  42. cd?simplest_ffmpeg_picture_encoder??
  43. sh?compile_gcc.sh??
  44. cd?..??
  45. cd?..??
  46. ??
  47. #=====================================================================================??
  48. echo?""??
  49. echo?"Compile?simplest_ffmpeg_video_encoder..."??
  50. cd?simplest_ffmpeg_video_encoder??
  51. cd?simplest_ffmpeg_video_encoder??
  52. sh?compile_gcc.sh??
  53. cd?..??
  54. cd?simplest_ffmpeg_video_encoder_pure??
  55. sh?compile_gcc.sh??
  56. cd?..??
  57. cd?..??
  58. ??
  59. #=====================================================================================??
  60. echo?""??
  61. echo?"Compile?simplest_ffmpeg_audio_encoder..."??
  62. cd?simplest_ffmpeg_audio_encoder??
  63. cd?simplest_ffmpeg_audio_encoder??
  64. sh?compile_gcc.sh??
  65. cd?..??
  66. cd?..??
  67. ??
  68. #=====================================================================================??
  69. echo?""??
  70. echo?"Compile?simplest_ffmpeg_streamer..."??
  71. cd?simplest_ffmpeg_streamer??
  72. cd?simplest_ffmpeg_streamer??
  73. sh?compile_gcc.sh??
  74. cd?..??
  75. cd?..??
  76. ??
  77. #=====================================================================================??
  78. echo?""??
  79. echo?"Compile?simplest_ffmpeg_mem_handler..."??
  80. cd?simplest_ffmpeg_mem_handler??
  81. cd?simplest_ffmpeg_mem_player??
  82. if?[?"$kernel"?==?"Darwin"?];then??
  83. sh?compile_gcc_mac.sh??
  84. else??
  85. sh?compile_gcc.sh??
  86. fi??
  87. cd?..??
  88. cd?simplest_ffmpeg_mem_transcoder??
  89. sh?compile_gcc.sh??
  90. cd?..??
  91. cd?..??
  92. ??
  93. #=====================================================================================??
  94. echo?""??
  95. echo?"Compile?simplest_ffmpeg_device..."??
  96. cd?simplest_ffmpeg_device??
  97. cd?simplest_ffmpeg_grabdesktop??
  98. if?[?"$kernel"?==?"Darwin"?];then??
  99. sh?compile_gcc_mac.sh??
  100. else??
  101. sh?compile_gcc.sh??
  102. fi??
  103. cd?..??
  104. cd?simplest_ffmpeg_readcamera??
  105. if?[?"$kernel"?==?"Darwin"?];then??
  106. sh?compile_gcc_mac.sh??
  107. else??
  108. sh?compile_gcc.sh??
  109. fi??
  110. cd?..??
  111. cd?..??
  112. ??
  113. #=====================================================================================??
  114. echo?""??
  115. echo?"Compile?simplest_ffmpeg_format..."??
  116. cd?simplest_ffmpeg_format??
  117. cd?simplest_ffmpeg_demuxer??
  118. sh?compile_gcc.sh??
  119. cd?..??
  120. cd?simplest_ffmpeg_demuxer_simple??
  121. sh?compile_gcc.sh??
  122. cd?..??
  123. cd?simplest_ffmpeg_muxer??
  124. sh?compile_gcc.sh??
  125. cd?..??
  126. cd?simplest_ffmpeg_remuxer??
  127. sh?compile_gcc.sh??
  128. cd?..??
  129. cd?..??
  130. ??
  131. #=====================================================================================??
  132. echo?""??
  133. echo?"Compile?simplest_ffmpeg_video_filter..."??
  134. cd?simplest_ffmpeg_video_filter??
  135. cd?simplest_ffmpeg_video_filter??
  136. if?[?"$kernel"?==?"Darwin"?];then??
  137. sh?compile_gcc_mac.sh??
  138. else??
  139. sh?compile_gcc.sh??
  140. fi??
  141. cd?..??
  142. cd?..??
  143. ??
  144. #=====================================================================================??
  145. echo?""??
  146. echo?"Compile?simplest_ffmpeg_swscale..."??
  147. cd?simplest_ffmpeg_swscale??
  148. cd?simplest_ffmpeg_swscale??
  149. sh?compile_gcc.sh??
  150. cd?..??
  151. cd?simplest_pic_gen??
  152. sh?compile_gcc.sh??
  153. cd?..??
  154. cd?..??
  155. ??
  156. #=====================================================================================?

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

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

相關文章

基于Ubuntu環境使用docker搭建對于中文識別的chineseocr_lite項目

光學字符識別(OCR) 光學字符識別(OCR)目前已經有了很廣泛的應用,很多開源項目都會嵌入OCR 來擴展原有的能力,例如身份證識別、出入停車場的車牌識別、拍照翻譯等等本文介紹的開源的中文 OCR 項目&#xff…

Ubuntu環境使用conda安裝輕量級中文ocr開源項目chineseocr_lite,最簡單的方式

問題 接使用docker的方式來創建項目所報的錯誤選中文件之后,界面不停的繞圈,顯示不了對于圖片的識別結果,并且監控界面上出現錯誤提示如下ImportError: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory&a…

基于Ubuntu使用docker的方式來搭建基于Yolo3+crnn的Chineseocr識別

Docker Docker簡單易用,具體的安裝和配置可以看我的或者其他人的博客 安裝完之后,輸入以下命令安裝chineseocr并且開啟服務 docker pull zergmk2/chineseocr docker run -d -p 8080:8080 zergmk2/chineseocr 在瀏覽器輸入http://127.0.0.1:8080/ocr網…

c/c++ 內存使用指南 和實踐指導

如果你完全理解如下內容, 請聯系我:szu030606163.com, 討論更深層次合作 。 1. 大內高手—內存模型 單線程模型 多線程模型 2. 大內高手—棧/堆 backtrace的實現 alloca的實現 可變參數的實現。 malloc/free系列函數簡介 new…

mininet 應用實踐

教學目的與學時建議 能夠運用 mininet 可視化工具創建計算機網絡拓撲結構能夠運用 mininet 交互界面創建拓撲結構能夠運用 python 腳本構建計算機網絡拓撲結構建議:2 學時 實驗環境 下載并安裝虛擬機 VMware workstation;下載虛擬機鏡像( S…

使用百度大腦,導入aip以及相應的庫文件報錯問題

參考文章 github鏈接地址 具體操作 pip install githttps://github.com/Baidu-AIP/python-sdk.gitmasterfrom aip import 對應服務即可

一個通用的makefile寫法,自動推導文件的依賴關系

溫習之用。 假設有兩個頭文件目錄 header1,header2;兩個cpp文件目錄,src1,src2,一個lib目錄 寫一個完整的makefile步驟如下: 1 定義可執行文件的名稱 TARGET MyPro 2 指定此編譯工程所要使用的頭文件所在的目錄 INC -I. -Iheader1 -Iheader2 3 指…

實現基于darknet框架實現CTPN版本自然場景文字檢測 與CNN+CTCOCR文字識別的ChineseOCR搭建

Github地址 Github源碼地址 支持系統:mac/ubuntu python3.6 實現功能 文字檢測; 文字識別; 支持GPU/CPU,CPU優化(opencv dnn) docker鏡像服務(CPU優化版本) 下載鏡像 鏈接:https://pan.baidu…

50個c/c++源代碼網站

C/C是最主要的編程語言。這里列出了50名優秀網站和網頁清單,這些網站提供c/c源代碼。這份清單提供了源代碼的鏈接以及它們的小說明。我已盡力包括最佳的C/C源代碼的網站。這不是一個完整的清單,您有建議可以聯系我,我將歡迎您的建議&#xff…

在服務器上搭建基于yolo3 與crnn 實現中文自然場景文字檢測及識別,GPU版本

Github地址 參考地址作者大人,十分熱心,對于我的問題,提供了大量的幫助,使我少走了很多的彎路,在此表示由衷的感謝 注意事項 使用nvidia-smi命令查看cuda的版本,必須是10.1或者10.0,10.2是萬萬…

python TypeError can only concatenate tuple not str to tuple

原因分析 這個錯誤出現是因為執行元組之間的合并例子 tuple1 ("str",1,["a","b","c"],4) tuple2 ("hello",) print(tuple1[0]) print (tuple1[1:3]) print (tuple1[1:]) print (tuple2 * 2) print (tuple1tuple2) 注意事…

23種設計模式 -比喻

1、FACTORY—追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory (下載源碼就到源碼網:…

python 版本2和3 在/取模方面的的差異

注意事項 python2 使用 /python3 使用 // 例子 二分法取數值 def binary_search(search_list,target):left 0right len(search_list) - 1while left < right:mid (left right) // 2if search_list[mid] < target:left mid 1continueif search_list[mid] target:r…

vc中調用其他應用程序的方法(函數) winexec,shellexecute ,createprocess

三個SDK函數: WinExec&#xff0c;ShellExecute &#xff0c;CreateProcess可以實現調用其他程序的要求&#xff0c;其中以WinExec最為簡單&#xff0c;ShellExecute比WinExec靈活一些&#xff0c;CreateProcess最為復雜。WinExec 兩個參數&#xff0c;前一個指定路徑&#xf…

算法入門篇 一 時間復雜度

時間復雜度 要求&#xff1a;只要高階項&#xff0c;不要低階項常數操作&#xff1a;操作花費的時間和數據量無關&#xff0c;比如數組尋址&#xff0c;直接利用偏移量找到對應元素的位置&#xff1b;非常數操作&#xff1a;比如list(鏈表)&#xff1b;查找元素需要遍歷鏈表&a…

遍歷文件夾下所有文件和文件夾

1 void find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLEhFind::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE hFind)  return;while(TRUE){if(FindFileData.dw…

算法入門篇二 認識O(NlogN)的排序

遞歸 例子引出 使用遞歸的方法求出數組中的最大值&#xff08;利用的是棧&#xff09;求中點的方法改進 mid (left right) / 2 //但是如果left和right的數很大&#xff0c;相加會造成內容溢出 改進為 mid left (right - left) / 2 //(right - left)得到整個的長度&…

算法入門篇三 詳解桶排序和整理排序知識 堆的相關操作 補充 不完整

歸并排序不使用遞歸 使用一個變量&#xff0c;使其按照1、2、4、8遞增&#xff0c;控制左右兩邊1個元素、2個元素、4個元素等元素的合并 完全二叉樹 完全二叉樹 要不全是滿的&#xff0c;要不葉子節點出現在最后一層&#xff0c;只要出現了葉子節點&#xff0c;后面的都是葉子…

C++著名程序庫

1、C各大有名庫的介紹——C標準庫標準庫中提供了C程序的基本設施。雖然C標準庫隨著C標準折騰了許多年&#xff0c;直到標準的出臺才正式定型&#xff0c;但是在標準庫的實現上卻很令人欣慰得看到多種實現&#xff0c;并且已被實踐證明為有工業級別強度的佳作。 1.1、Dinkumware…

2023年12月24日學習總結

今日to do list&#xff1a; 做kaggle上面的流量預測項目?? 學習時不刷手機&#x1f921; okkkkkkkkkkkkkk 開始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在預測一個名字叫做elborn基站的下行鏈路流量&#xff0c;用過去29天的數據預測未來10天的數據 1、…