Linux下安裝ffmpeg與使用


下面是以Linux為例介紹ffmpeg的安裝流程的簡單的命令行對視頻進行轉碼操作,是ffmpeg中最最簡單的入門內容.

  首先去官網下載源碼包,這里下載的是最新的ffmpeg-3.3.1.tar.bz2,下載之后上傳至Linux准備安裝,首先解壓安裝包:

tar -xjvf ffmpeg-3.3.1.tar.bz2 cd ffmpeg-3.3.1/

  如果現在直接執行configure配置的話,可能會報如下的錯誤:

錯誤的意思是 yasm/nasm 包不存在或者很舊,可以使用--disable-yasm禁用這個選項編譯,yasm是一款匯編器,並且是完全重寫了nasm的匯編環境,接收nasm和gas語法,支持x86和amd64指令集,所以這里安裝一下yasm即可,下載地址是:http://yasm.tortall.net/Download.html 進入后下載1.3.0的源碼包,執行下面命令安裝:

tar -xvzf yasm-1.3.0.tar.gz cd yasm-1.3.0/ ./configure make make install

  編譯參數都是默認的,直接安裝到系統中即可,安裝成功之后繼續回到ffmpeg解壓后的目錄,執行下面命令編譯並安裝:

./configure --enable-shared --prefix=/usr/local/ffmpeg    //自己想要存放的地方
make make install

  編譯過程有點長,耐心等待完成之后執行 cd /monchickey/ffmpeg/ 進入安裝目錄,查看一下發現有bin,include,lib,share這4個目錄,其中bin是ffmpeg主程序二進制目錄,include是C/C++頭文件目錄,lib是編譯好的庫文件目錄,share是文檔目錄,然后進入bin目錄,執行 ./ffmpeg -version 查看當前版本的詳細信息,默認情況下一般會報libavdevice.so.57: cannot open shared object file: No such file or directory,原因是lib目錄未加載到鏈接到系統庫中,系統ld目錄列表在/etc/ld.so.conf中,打開文件會發現,里面引用了/etc/ld.so.conf.d/下面所有的.conf文件,比如mariadb-x86_64.conf我們只需要創建一個文件並寫入lib路徑即可,執行命令: vim /etc/ld.so.conf.d/ffmpeg.conf 然后添加一行內容: /monchickey/ffmpeg/lib 之后保存並退出,然后執行 ldconfig 使配置生效,現在再次執行 ./ffmpeg -version 顯示就正常了

  以上轉賬自https://www.cnblogs.com/freeweb/p/6897907.html#commentform-----------------------------------------------------

 

當我們在 Linux下執行一個命令時,報   -bash:  XXXX: command not found,這和Windows是相同的道理,都是環境變量惹的禍,

就是說你的 命令的 執行文件不在 /usr/bin 或者 /etc/init.d 中,他就找不到 執行該命令的 文件來執行.

思路是將 該應用的 bin 目錄 放入到  profile 文件中就OK了


1、find / -name profile  #找到該文件(這個文件相當於 你在Windows 中加入環境變量那塊),一般該文件在 /etc/profile 這里

2、vim profile                 #編輯該文件

3、export PATH="$PATH:/phpstudy/mysql/bin:/monchickey/ffmpeg/bin"     

#在該文件中加入 command not found 的應用 bin 目錄,這里我是將 mysql 的 bin 放到這里,因為 我是因為 mysqld / mysqldump / mysqladmin 命令用不了

4、source /etc/profile  // 更新配置(不用重啟系統)
---------------------
作者:qq_blog
來源:CSDN
原文:https://blog.csdn.net/zq199692288/article/details/78871046
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

---------------------------------

上面我們編譯完了FFMPEG之后可以去運行以下bin目錄下生成的可執行文件

~/tmp/ffmpeg/ffmpeg/host/bin$ ./ffmpeg 
./ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory

發現系統提示找不到動態庫,可以用

ldd ffmpeg

來查看運行當前可執行文件需要哪些動態庫

復制代碼
~/tmp/ffmpeg/ffmpeg/host/bin$ ldd ffmpeg 
    linux-vdso.so.1 => (0x00007fffcfeaf000) libavdevice.so.57 => not found libavfilter.so.6 => not found libavformat.so.57 => not found libavcodec.so.57 => not found libswresample.so.2 => not found libswscale.so.4 => not found libavutil.so.55 => not found libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f41d6d9e000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f41d6b7f000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f41d67b9000) /lib64/ld-linux-x86-64.so.2 (0x00007f41d70c7000)
復制代碼

應該有很多人和我一樣,不想編譯FFMPEG之后還要動自己系統的環境,這時有一個簡單的方法可以解決這個問題。就是在當前終端export一個環境變量。

~/tmp/ffmpeg/ffmpeg/host$ export LD_LIBRARY_PATH=lib/

 

復制代碼
~/tmp/ffmpeg/ffmpeg/host/bin$ export LD_LIBRARY_PATH=../lib/
~/tmp/ffmpeg/ffmpeg/host/bin$ ldd ffmpeg 
    linux-vdso.so.1 => (0x00007fff25150000) libavdevice.so.57 => ../lib/libavdevice.so.57 (0x00007f7348cc8000) libavfilter.so.6 => ../lib/libavfilter.so.6 (0x00007f73488e8000) libavformat.so.57 => ../lib/libavformat.so.57 (0x00007f73484cc000) libavcodec.so.57 => ../lib/libavcodec.so.57 (0x00007f7347034000) libswresample.so.2 => ../lib/libswresample.so.2 (0x00007f7346e17000) libswscale.so.4 => ../lib/libswscale.so.4 (0x00007f7346b8f000) libavutil.so.55 => ../lib/libavutil.so.55 (0x00007f7346917000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f73465f1000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f73463d3000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f734600d000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f7345dee000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7345be9000) /lib64/ld-linux-x86-64.so.2 (0x00007f7348edb000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f73459e5000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f73457de000)
復制代碼

然后再去運行上面的可執行文件就可以了

~/tmp/ffmpeg/ffmpeg/host/bin$ ./ffmpeg 
ffmpeg version n3.2.2-8-g64bb329 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --prefix=host --enable-shared --disable-static --disable-doc
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'

 *******  轉載自https://www.cnblogs.com/CoderTian/p/6655568.html ***********

 

 

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

安裝

建議通過Composer來安裝PHP-FFMpeg 

轉到項目下,cd /work/apps/ad.superdalan.com_test/,安裝

$ composer require php-ffmpeg/php-ffmpeg

如果有安裝composer,卻提示command not found,把composer移到/usr/local/bin/下,查查composer有沒有執行權限,沒有執行 chmod +x composer給加個

然后編譯。

 

基本使用

$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('video.mpg'); $video  ->filters()  ->resize(new FFMpeg\Coordinate\Dimension(320, 240))  ->synchronize(); $video  ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))  ->save('frame.jpg'); $video  ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')  ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')  ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');

FFMpeg

 
         

FFMpeg\FFMpeg 是操作媒體主要的對象。可以使用靜態調用FFMpeg\FFMpeg::create來創建。

 
         
$ffmpeg = FFMpeg\FFMpeg::create();
 
         

FFMpeg會自動探測 ffmpeg和ffprobe的二進制文件。如果你想給出確切的二進制文件路徑, 可以通過一個數組來設置。 A Psr\Logger\LoggerInterface can also be passed to log binary executions.

 
         
$ffmpeg = FFMpeg\FFMpeg::create(array(  'ffmpeg.binaries' => '/usr/local/ffmpeg/bin/ffmpeg', //這個地方就是上面安裝ffmpeg的目錄  'ffprobe.binaries' => '/usr/local/ffmpeg/bin/ffprobe',  'timeout' => 3600, // The timeout for the underlying process  'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use ), $logger);

********* https://www.cnblogs.com/peteremperor/p/6477743.html ********

執行命令的過程中有可能出現:/usr/local/ffmpeg/bin/ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory

這樣的錯誤,這個錯誤是因為動態鏈接庫沒有找到導致的。也有可能是64位操作系統的原因。這里位給出解決辦法,就是修改動態鏈接庫配置文件/etc/ld.so.conf添加一句話/usr/local/ffmpeg/lib當然這個要根據實際情況而定,就是安裝的路徑。

修改配置文件

  1. vim /etc/ld.so.conf

加入下面一句話

  1. /usr/local/ffmpeg/lib

重新加載配置文件

  1. ldconfig

到此該問題得以解決。

************** https://www.sunnyos.com/article-show-82.html ****************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM