FFMPEG圖片轉視頻

1.分離視頻音頻流

ffmpeg -i input_file -vcodec copy -an output_file_video  //分離視頻流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分離音頻流

2.視頻解複用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.視頻轉碼

ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264              //轉碼爲碼流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264  //轉碼爲碼流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi            //轉碼爲封裝文件
//-bf B幀數目控制,-g 關鍵幀間隔控制,-s 分辨率控制

4.視頻封裝

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.視頻剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg        //提取圖片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切視頻
//-r 提取圖像的頻率,-ss 開始時間,-t 持續時間

6.視頻錄製

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7.YUV序列播放

ffplay -f rawvideo -video_size 1920x1080 input.yuv

8.YUV序列轉AVI

ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

常用參數說明:

主要參數:

-i 設定輸入流

-f 設定輸出格式

-ss 開始時間

視頻參數:

-b 設定視頻流量,默認爲200Kbit/s

-r 設定幀速率,默認爲25

-s 設定畫面的寬與高

-aspect 設定畫面的比例

-vn 不處理視頻

-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器

音頻參數:

-ar 設定採樣率

-ac 設定聲音的Channel數

-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器

-an 不處理音頻

 

把darkdoor.[001-100].jpg序列幀和001.mp3音頻文件利用mpeg4編碼方式合成視頻文件darkdoor.avi:
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author skypp -vcodec mpeg4 darkdoor.avi

ffmpeg還支持mov格式:
$ ffmpeg -i darkdoor.%3d.jpg darkdoor.mov

要查看你的ffmpeg支持哪些格式,可以用如下命令:
$ ffmpeg -formats | less

還可以把視頻文件導出成jpg序列幀:
$ ffmpeg -i bc-cinematic-en.avi example.%d.jpg

ffmpeg使用語法

ffmpeg使用語法:

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

如果沒有輸入文件,那麼視音頻捕捉就會起作用。

作爲通用的規則,選項一般用於下一個特定的文件。如果你給 –b 64選項,改選會設置下一個視頻速率。對於原始輸入文件,格式選項可能是需要的。

缺省情況下,ffmpeg試圖儘可能的無損轉換,採用與輸入同樣的音頻視頻參數來輸出。

3.選項

a) 通用選項

-L license

-h 幫助

-fromats 顯示可用的格式,編解碼的,協議的。。。

-f fmt 強迫採用格式fmt

-I filename 輸入文件

-y 覆蓋輸出文件

-t duration 設置紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持

-ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持

-title string 設置標題

-author string 設置作者

-copyright string 設置版權

-comment string 設置評論

-target type 設置目標文件類型(vcd,svcd,dvd) 所有的格式選項(比特率,編解碼以及緩衝區大小)自動設置,只需要輸入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高質量設置

-itsoffset offset 設置以秒爲基準的時間偏移,該選項影響所有後面的輸入文件。該偏移被加到輸入文件的時戳,定義一個正偏移意味着相應的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

b) 視頻選項

-b bitrate 設置比特率,缺省200kb/s

-r fps 設置幀頻 缺省25

-s size 設置幀大小 格式爲WXH 缺省160X128.下面的簡寫也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 設置橫縱比 4:3 16:9 或 1.3333 1.7777

-croptop size 設置頂部切除帶大小 像素單位

-cropbottom size –cropleft size –cropright size

-padtop size 設置頂部補齊的大小 像素單位

-padbottom size –padleft size –padright size –padcolor color 設置補齊條顏色(hex,6個16進制的數,紅:綠:蘭排列,比如 000000代表黑色)

-vn 不做視頻記錄

-bt tolerance 設置視頻碼率容忍度kbit/s

-maxrate bitrate設置最大視頻碼率容忍度

-minrate bitreate 設置最小視頻碼率容忍度

-bufsize size 設置碼率控制緩衝區大小

-vcodec codec 強制使用codec編解碼方式。如果用copy表示原始編解碼數據必須被拷貝。

-sameq 使用同樣視頻質量作爲源(VBR)

-pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計信息,第二遍生成精確的請求的碼率

-passlogfile file 選擇兩遍的紀錄文件名爲file


c)高級視頻選項

-g gop_size 設置圖像組大小

-intra 僅適用幀內編碼

-qscale q 使用固定的視頻量化標度(VBR)

-qmin q 最小視頻量化標度(VBR)

-qmax q 最大視頻量化標度(VBR)

-qdiff q 量化標度間最大偏差 (VBR)

-qblur blur 視頻量化標度柔化(VBR)

-qcomp compression 視頻量化標度壓縮(VBR)

-rc_init_cplx complexity 一遍編碼的初始複雜度

-b_qfactor factor 在p和b幀間的qp因子

-i_qfactor factor 在p和i幀間的qp因子

-b_qoffset offset 在p和b幀間的qp偏差

-i_qoffset offset 在p和i幀間的qp偏差

-rc_eq equation 設置碼率控制方程 默認tex^qComp

-rc_override override 特定間隔下的速率控制重載

-me method 設置運動估計的方法 可用方法有 zero phods log x1 epzs(缺省) full

-dct_algo algo 設置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC

-idct_algo algo 設置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM

-er n 設置錯誤殘留爲n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE

-ec bit_mask 設置錯誤掩蔽爲bit_mask,該值爲如下值的位掩碼 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)

-bf frames 使用frames B 幀,支持mpeg1,mpeg2,mpeg4

-mbd mode 宏塊決策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD

-4mv 使用4個運動矢量 僅用於mpeg4

-part 使用數據劃分 僅用於mpeg4

-bug param 繞過沒有被自動監測到編碼器的問題

-strict strictness 跟標準的嚴格性

-aic 使能高級幀內編碼 h263+

-umv 使能無限運動矢量 h263+

-deinterlace 不採用交織方法

-interlace 強迫交織法編碼僅對mpeg2和mpeg4有效。當你的輸入是交織的並且你想要保持交織以最小圖像損失的時候採用該選項。可選的方法是不交織,但是損失更大

-psnr 計算壓縮幀的psnr

-vstats 輸出視頻編碼統計到vstats_hhmmss.log

-vhook module 插入視頻處理模塊 module 包括了模塊名和參數,用空格分開

D)音頻選項

-ab bitrate 設置音頻碼率

-ar freq 設置音頻採樣率

-ac channels 設置通道 缺省爲1

-an 不使能音頻紀錄

-acodec codec 使用codec編解碼

E)音頻/視頻捕獲選項

-vd device 設置視頻捕獲設備。比如/dev/video0

-vc channel 設置視頻捕獲通道 DV1394專用

-tvstd standard 設置電視標準 NTSC PAL(SECAM)

-dv1394 設置DV1394捕獲

-av device 設置音頻設備 比如/dev/dsp


F)高級選項

-map file:stream 設置輸入流映射

-debug 打印特定調試信息

-benchmark 爲基準測試加入時間

-hex 傾倒每一個輸入包

-bitexact 僅使用位精確算法 用於編解碼測試

-ps size 設置包大小,以bits爲單位

-re 以本地幀頻讀數據,主要用於模擬捕獲設備

-loop 循環輸入流。只工作於圖像流,用於ffserver測試

二、Ffmpeg使用語法

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:/Video/Fearless/Fearless.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:/Video/ffmpegencode" -an -f mpeg2video "D:/Fearless.m2v"
  • 轉換指定格式文件到ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:/test.ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:/test.轉化成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格式

    屏幕錄製

    • 使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章