FFMPeg處理視頻的核心操作方式是命令,無論是在Windows上還是Linux上。那么下邊就簡單介紹下,常見的處理命令。
示例1:
截取一張352×240尺寸大小的,格式為jpg的圖片:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352×240 a.jpg
示例2:
把視頻的前30幀轉換成一個Animated Gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
示例3:這個是我需要的!
在視頻的第8.01秒處截取 320*240 的縮略圖
ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320×240 test.jpg
示例4:
把視頻轉換成flv文件(這個用得最多,現在Flv基本上已經成了網絡視頻的標准了)
ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv 。
其中:
source:是原始文件的名字,可以是mov,mpeg,avi,wmv各類格式,ffmpeg基本都支持。
-s wxh: 指定視頻的寬和高
-b : 設定視頻的比特率
-aspect: 保持視頻的比率。如4:3或者16:9
-y : 如果目標文件存在時,直接覆蓋原有的目標文件。
-f : 指定轉換的文件格式,這里是flv格式。(其實如果不指定文件格式,ffmpeg也會按文件的后綴名來進行轉換)。
dest: 轉換的目標文件名字,並不一定需要是flv,可以是mov,mpeg以及其他的常用格式。
參數說明:
-L license
-h 幫助
-fromats 顯示可用的格式,編解碼的,協議的
-f fmt 強迫采用格式fmt
-I filename 輸入文件
-y 覆蓋輸出文件
-t duration 設置紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持
-ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持
s wxh: 指定視頻的寬和高
****************************************************************************
示例3:是針對flv格式的視頻獲得指定處的縮略圖,記住 -f強制轉換的格式是mjpeg因為我要獲得.jpg的縮略圖,網上有很多寫成文章都是寫成ffmpeg -i test.flv -y -f image2 -ss 08.010 -t 0.001 -s 352×240 b.jpg 這個是錯誤,不可能輸出.
下面是PHP調用shell命令獲得縮略圖的代碼
- <!--?php
- exec("/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 /usr/local/apache/htdocs/test.jpg",$out,$status);
- print_r($status);//0是成功 1是失敗
- ?-->
如果沒有什么圖片生成的可能原因:
①對於存儲生成圖片的文件夾需要有寫入權限 #chomd 777 /usr/local/apache/htdocs
②在php.ini中有disable_functions禁用了php調用shell命令函數,
disable_functions = proc_open, popen,exec, system, shell_exec, passthru
解決辦法:注釋掉disable_functions這一項
#disable_functions = proc_open, popen,exec, system, shell_exec, passthru
或者disable_functions = (把禁言的函數除去)
保存關閉開啟就可以了
③php.ini中的安全模式必須關閉 才可以調用exec函數
safe_mode = off
④圖片時間截取也很重要,很有可能是無效圖片或者是黑屏
建議 增加關鍵幀,通常第一幀為關鍵幀,可以使用:vframes:幀參數,舍棄微秒參數,只保留時間參數
/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -vframes 1 -s 320×240 /usr/local/apache/htdocs/test.jpg