關於ffmpeg
FFmpeg是一個開源免費跨平台的視頻和音頻流方案,屬於自由軟體,採用LGPL或GPL許可證(依據你選擇的組件)。它提供了錄製、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼品質,libavcodec裡很多codec都是從頭開發的。
ffmpeg配置
Ubuntu 12.04
在安裝ffmpeg之前,首先要安裝yasm
1.安裝yasm
我用的yasm是yasm-1.2.0.tar.gz這個版本的
代碼如下 |
複製代碼 |
#wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz #tar xzvf yasm-1.2.0.tar.gz # cd yasm-1.2.0 #./configure |
注意:不要使用prefix指定安裝路徑什麼的,否則後患無窮啊
代碼如下 |
複製代碼 |
#make #make install |
2.安裝ffmpeg
我使用的ffmpeg是ffmpeg-0.10.2.tar.bz2 這個版本的
代碼如下 |
複製代碼 |
# wget http://ffmpeg.org/releases/ffmpeg-2.0.1.tar.gz #tar xvfj ffmpeg-2.0.1.tar.gz #cd ffmpeg-2.0.1 #./configure #make #make install |
至此,ffmpeg已經安裝完成。
測試
視頻截圖:
代碼如下 |
複製代碼 |
ffmpeg -i 02c692c38a1c352e4c70cf086cfffa48_1380258978_2168.flv -y -f image2 -ss 8 -frames 1 ./1.jpg |
成功
php調用 視頻截圖
代碼如下 |
複製代碼 |
private function takePicOnVideo($file,$time) { $videoFile='upload/lessions/'.$file; $videoTime=$time; if(is_file($videoFile)) { $image_file="$videoFile.jpg"; //$command="ffmpeg -i $videoFile -y -f image2 -ss $videoTime -t 0.001 $image_file"; $command="ffmpeg -i $videoFile -y -f image2 -ss $videoTime -frames 1 $image_file"; set_time_limit(0); exec($command); return $image_file; } else { return ''; } }
|
附:
ffmpeg使用文法
ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
如果沒有輸入檔案,那麼視音頻捕捉(只在Linux下有效,因為Linux下把音視頻裝置當作檔案控制代碼來處理)就會起作用。作為通用的規則,選項一 般用於下一個特定的檔案。如果你給 –b 64選項,改選會設定下一個視頻速率。對於原始輸入檔案,格式選項可能是需要的。預設情況下,ffmpeg試圖儘可能的無損轉換,採用與輸入同樣的音頻視 頻參數來輸出。
ffmpeg轉換所涉及到的選項較多,可參考ffmpeg選項詳解。
ffmpeg支援多種檔案格式和多種音頻、視頻編碼器,可參考ffmepg格式詳解,(附:常見視頻檔案格式詳解)
視頻檔案截圖
截取一張352x240尺寸大小的,格式為jpg的圖片
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
把視頻的前30幀轉換成一個Animated Gif
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
截取指定時間的縮微圖
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss後跟的時間單位為秒
轉換檔為3GP格式
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144
-acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
或
ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp
視頻格式轉換
如何使用 ffmpeg 編碼得到高品質的視頻
ffmpeg.exe -i "D:VideoFearlessFearless.avi" -target film-dvd -s 720x352
-padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000
-trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2
-aspect 16:9 -pass 2 -passlogfile "D:Videoffmpegencode" -an -f mpeg2video "D:Fearless.m2v"
轉換指定格式檔案到FLV格式
ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:test.flv
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:test.flv
轉碼解密的VOB
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi
上面的命令列將vob的檔案轉化成avi檔案,mpeg4的視頻和mp3的音頻。注意命令中使用了B幀,所以mpeg4流是divx5相容的。GOP大小是300意味著29.97幀頻下每10秒就有INTRA幀。該映射在音頻語言的DVD轉碼時候尤其有用。
同時編碼到幾種格式並且在輸入資料流和輸出資料流之間建立映射
ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
上面的命令列轉換一個64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在輸出資料流的順序上定義了哪一路輸入資料流是用於每一個輸出資料流的。
轉換檔為3GP格式
ffmpeg -i test.avi -y -b 20 -s sqcif -r 10 -acodec amr_wb -ab 23.85 -ac 1 -ar 16000 test.3gp
註:如果要轉換為3GP格式,則ffmpeg在編譯時間必須加上–enable-amr_nb –enable-amr_wb,詳細內容可參考:轉換視頻為3GPP格式
轉換檔為MP4格式(支援iPhone/iTouch)
ffmpeg -y -i input.wmv -f mp4 -async 1-s 480x320 -acodec libfaac -vcodec libxvid -qscale 7 -dts_delta_threshold 1 output.mp4
ffmpeg -y -i source_video.avi input -acodec libfaac -ab 128000 -vcodec mpeg4 -b 1200000 -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
將一段音頻與一段視頻混合
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
將一段視頻轉換為DVD格式
ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg
註:target pal-dvd : Output format ps 2000000000 maximum size for the output file, in bits (here, 2 Gb) aspect 16:9 : Widescreen
轉換一段視頻為DivX格式
ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi
Turn X images to a video sequence
ffmpeg -f image2 -i image%d.jpg video.mpg
註:This command will transform all the images from the current directory (named image1.jpg, image2.jpg, etc...) to a video file named video.mpg.
Turn a video to X images
ffmpeg -i video.mpg image%d.jpg
註:This command will generate the files named image1.jpg, image2.jpg, ...
The following image formats are also availables : PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.
螢幕錄製
使用ffmpeg錄影螢幕
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi
:其中,-vd x11:0,0 指錄製所使用的位移為 x=0 和 y=0,-s 1024×768 指錄製視頻的大小為 1024×768。錄製的視頻檔案為 test.avi,將儲存到使用者主目錄中
如果你只想錄製一個應用程式視窗或者案頭上的一個固定地區,那麼可以指定位移位置和地區大小。使用xwininfo -frame命令可以完成尋找上述參數。
重新調整視頻尺寸大小
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi
註:ffmpeg的螢幕錄製功能只能在Linux環境下有效。
視頻採集
把網路攝影機的即時視頻錄製下來,儲存為檔案
ffmpeg -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf
更多資訊可參考ffmpeg工程組論壇的討論貼:有關ffmpeg的視頻採集
註:ffmpeg的視頻採集功能只能在Linux環境下使用
使用ffmpeg壓制H.264視頻
ffmpeg -threads 4 -i INPUT -r 29.97 -vcodec libx264 -s 480x272 -flags +loop -cmp +chroma -deblockalpha 0 -deblockbeta 0 -crf 24
-bt 256k -refs 1 -coder 0 -me umh -me_range 16 -subq 5 -partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 -level 30
-qmin 10 -qmax 51 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec libfaac -ab 128k -ar 48000 -ac 2 OUTPUT