視頻編碼fmpeg 常用命令彙總

轉自 kingvon_liwei 



part 1:

經常用到ffmpeg 做一些視頻數據的處理轉換等,用來做測試,今天總結了一下,參考了網上部分朋友的經驗,一起在這裏彙總了一下,有需要的朋友可以收藏測試一下,有問題歡迎在下面回帖交流,謝謝;by ternence.hsu)

1、ffmpeg使用語法

命令格式:
    ffmpeg -i [輸入文件名] [參數選項] -f [格式] [輸出文件]
    ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
    1、參數選項:
    (1) -an: 去掉音頻
    (2) -acodec: 音頻選項, 一般後面加copy表示拷貝
    (3) -vcodec:視頻選項,一般後面加copy表示拷貝
    2、格式:
    (1) h264: 表示輸出的是h264的視頻裸流
    (2) mp4: 表示輸出的是mp4的視頻
    (3)mpegts: 表示ts視頻流
    如果沒有輸入文件,那麼視音頻捕捉(只在Linux下有效,因爲Linux下把音視頻設備當作文件句柄來處理)就會起作用。作爲通用的規則,選項一般用於下一個特定的文件。如果你給 –b 64選項,改選會設置下一個視頻速率。對於原始輸入文件,格式選項可能是需要的。缺省情況下,ffmpeg試圖儘可能的無損轉換,採用與輸入同樣的音頻視頻參數來輸出。(by ternence.hsu)

 


2、視頻轉換

 

 

H264視頻轉ts視頻流

ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts



H264視頻轉mp4

ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4



ts視頻轉mp4

ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4
mp4視頻轉flv
ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv test.flv 


轉換文件爲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



轉換文件爲3GP格式 v2

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"



轉換指定格式文件到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轉碼時候尤其有用,同時編碼到幾種格式並且在輸入流和輸出流之間建立映射)


轉換文件爲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錄像屏幕(僅限Linux平臺)

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命令可以完成查找上述參數。)


重新調整視頻尺寸大小(僅限Linux平臺)

ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi



把攝像頭的實時視頻錄製下來,存儲爲文件(僅限Linux平臺)

ffmpeg  -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf



使用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

(使用該指令可以壓縮出比較清晰,而且文件轉小的H.264視頻文件)


3、網絡推送

 

 

udp視頻流的推送
ffmpeg -re  -i 1.ts  -c copy -f mpegts   udp://192.168.0.106:1234
 


4、視頻拼接

 

 

裸碼流的拼接,先拼接裸碼流,再做容器的封裝
ffmpeg -i "concat:test1.h264|test2.h264" -vcodec copy -f h264 out12.h264
 


5、圖像相關

 

 

截取一張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



截取指定時間的縮微圖,-ss後跟的時間單位爲秒 

ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
 


6、音頻處理

 

 

 

 

 

 

轉換wav到mp2格式

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’在輸出流的順序上定義了哪一路輸入流是用於每一個輸出流的。)

 

 

 

7、切割ts分片

ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 6 -hls_time 5 output1.m3u8

 

============================================================================

part 2:

 

 

一、ffmpeg命令詳解

ffmpeg非常強大,輕鬆幾條命令就可以完成你的工作。

把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

debian下安裝ffmpeg很簡單:
#apt-get install ffmpeg

######################################

下面是轉來的使用說明,慢慢研究吧,嘿嘿

######################################
 

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格式

 
  1. ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144

  2. -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 編碼得到高質量的視頻

 
  1. ffmpeg.exe -i "D:\Video\Fearless\Fearless.avi" -target film-dvd -s 720x352

  2. -padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000

  3. -trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2

  4. -aspect 16:9 -pass 2 -passlogfile "D:\Video\ffmpegencode" -an -f mpeg2video "D:\Fearless.m2v"

  • 轉換指定格式文件到FLV格式

 
  1. ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv

  2. 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格式

 

屏幕錄製

  • 使用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
三、ffmepg使用

各種轉換例子見:
FFmpeg Howto
程序下載:
Unofficial FFmpeg Win32 Builds(需要使用代理訪問)
或:
FFMPEG FULL SDK V3.0

The generic syntax is:

ffmpeg [[infile options][`-i' infile]]… {[outfile options] outfile}…

As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same option on the command line multiple times. Each occurrence is then applied to the next input or output file.

* To set the video bitrate of the output file to 64kbit/s:

ffmpeg -i input.avi -b 64k output.avi

* To force the frame rate of the input and output file to 24 fps:

ffmpeg -r 24 -i input.avi output.avi

* To force the frame rate of the output file to 24 fps:

ffmpeg -i input.avi -r 24 output.avi

* To force the frame rate of input file to 1 fps and the output file to 24 fps:

ffmpeg -r 1 -i input.avi -r 24 output.avi

The format option may be needed for raw input files.

By default, FFmpeg tries to convert as losslessly as possible: It uses the same audio and video parameters for the outputs as the one specified for the inputs.

轉換文件爲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.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp

轉換指定格式文件到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
***************************************************************************
ffmpeg -i F:\tools\ffmpeg.rev10464\test.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 F:\tools\ffmpeg.rev10464\test.flv
ffmpeg -i "F:\tools\ffmpeg.rev10464\test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 "test.jpg" 


 

 

ffmpeg.exe -i F:\閃客之家\閃客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv 
ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
使用-ss參數 作用(time_off set the start time offset),可以從指定時間點開始轉換任務。如: 
轉換文件格式的同時抓縮微圖: 
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 
對已有flv抓圖: 
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 
-ss後跟的時間單位爲秒 
Ffmpeg轉換命令 
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.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp 


ffmpeg參數設定解說 
-bitexact 使用標準比特率 
-vcodec xvid 使用xvid壓縮 
-s 320x240 指定分辨率 
-r 29.97 楨速率(可以改,確認非標準楨率會導致音畫不同步,所以只能設定爲15或者29.97) 
畫面部分,選其一 
-b <比特率> 指定壓縮比特率,似乎ffmpeg是自動VBR的,指定了就大概是平均比特率,比如768,1500這樣的 
就是原來默認項目中有的 
-qscale <數值> 以<數值>質量爲基礎的VBR,取值0.01-255,約小質量越好 
-qmin <數值> 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31 
-sameq 使用和源同樣的質量 
聲音部分 
-acodec aac 設定聲音編碼 
-ac <數值> 設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質 
的DVDrip就可以用2 
-ar <採樣率> 設定聲音採樣率,PSP只認24000 
-ab <比特率> 設定聲音比特率,前面-ac設爲立體聲時要以一半比特率來設置,比如192kbps的就設成96,轉換 
君默認比特率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上 
-vol <百分比> 設定音量,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍 
這樣,要得到一個高畫質音質低容量的MP4的話,首先畫面最好不要用固定比特率,而用VBR參數讓程序自己去 
判斷,而音質參數可以在原來的基礎上提升一點,聽起來要舒服很多,也不會太大(看情況調整 


例子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***" 

解釋:以上命令可以在Dos命令行中輸入,也可以創建到批處理文件中運行。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。 
參數: 
-y(覆蓋輸出文件,即如果1.***文件已經存在的話,不經提示就覆蓋掉了) 
-i "1.avi"(輸入文件是和ffmpeg在同一目錄下的1.avi文件,可以自己加路徑,改名字) 
-title "Test"(在PSP中顯示的影片的標題) 
-vcodec xvid(使用XVID編碼壓縮視頻,不能改的) 
-s 368x208(輸出的分辨率爲368x208,注意片源一定要是16:9的不然會變形) 
-r 29.97(幀數,一般就用這個吧) 
-b 1500(視頻數據流量,用-b xxxx的指令則使用固定碼率,數字隨便改,1500以上沒效果;還可以用動態碼率如:-qscale 4和-qscale 6,4的質量比6高) 
-acodec aac(音頻編碼用AAC) 
-ac 2(聲道數1或2) 
-ar 24000(聲音的採樣頻率,好像PSP只能支持24000Hz) 
-ab 128(音頻數據流量,一般選擇32、64、96、128) 
-vol 200(200%的音量,自己改) 
-f psp(輸出psp專用格式) 
-muxvb 768(好像是給PSP機器識別的碼率,一般選擇384、512和768,我改成1500,PSP就說文件損壞了) 
"1.***"(輸出文件名,也可以加路徑改文件名) 

機器強勁的話,可以多開幾個批處理文件,讓它們並行處理。 
E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:\2.flv 
===========================================
ffmpeg.exe -i F:\閃客之家\閃客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss參數 作用(time_off set the start time offset),可以從指定時間點開始轉換任務。如:
轉換文件格式的同時抓縮微圖:
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
對已有flv抓圖:
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
-ss後跟的時間單位爲秒 Ffmpeg轉換命令
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.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg參數設定解說 
-bitexact 使用標準比特率 
-vcodec xvid 使用xvid壓縮 
-s 320x240 指定分辨率 
-r 29.97 楨速率(可以改,確認非標準楨率會導致音畫不同步,所以只能設定爲15或者29.97) 


畫面部分,選其一 
-b <比特率> 指定壓縮比特率,似乎ffmpeg是自動VBR的,指定了就大概是平均比特率,比如768,1500這樣的就是原來默認項目中有的 
-qscale <數值> 以<數值>質量爲基礎的VBR,取值0.01-255,約小質量越好 
-qmin <數值> 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31 
-sameq 使用和源同樣的質量 聲音部分 
-acodec aac 設定聲音編碼 
-ac <數值> 設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質的DVDrip就可以用2 
-ar <採樣率> 設定聲音採樣率,PSP只認24000 
-ab <比特率> 設定聲音比特率,前面-ac設爲立體聲時要以一半比特率來設置,比如192kbps的就設成96,轉換君默認比特率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上 
-vol <百分比> 設定音量,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍 這樣,要得到一個高畫質音質低容量的MP4的話,首先畫面最好不要用固定比特率,而用VBR參數讓程序自己去判斷,而音質參數可以在原來的基礎上提升一點,聽起來要舒服很多,也不會太大(看情況調整 例子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***"

解釋:以上命令可以在Dos命令行中輸入,也可以創建到批處理文件中運行。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。
參數:
-y(覆蓋輸出文件,即如果1.***文件已經存在的話,不經提示就覆蓋掉了)
-i "1.avi"(輸入文件是和ffmpeg在同一目錄下的1.avi文件,可以自己加路徑,改名字)
-title "Test"(在PSP中顯示的影片的標題)
-vcodec xvid(使用XVID編碼壓縮視頻,不能改的)
-s 368x208(輸出的分辨率爲368x208,注意片源一定要是16:9的不然會變形)
-r 29.97(幀數,一般就用這個吧)
-b 1500(視頻數據流量,用-b xxxx的指令則使用固定碼率,數字隨便改,1500以上沒效果;還可以用動態碼率如:-qscale 4和-qscale 6,4的質量比6高)
-acodec aac(音頻編碼用AAC)
-ac 2(聲道數1或2)
-ar 24000(聲音的採樣頻率,好像PSP只能支持24000Hz)
-ab 128(音頻數據流量,一般選擇32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(輸出psp專用格式)
-muxvb 768(好像是給PSP機器識別的碼率,一般選擇384、512和768,我改成1500,PSP就說文件損壞了)
"1.***"(輸出文件名,也可以加路徑改文件名)

P.S. 版主機器強勁的話,可以多開幾個批處理文件,讓它們並行處理。 E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac

============================================================================

part 3:

 

 

 

在cmd中先將目錄切換到ffmpeg.exe對應的文件目錄: cd D:\study\ffmpeg\ffmpeg-20160910-09317e3-win64-static\bin

注意:-命令名;前面要加ffmpeg。eg: 查看版本信息:ffmpeg -version

1. ffmpeg 是什麼?

ffmpeg(命令行工具) 是一個快速的音視頻轉換工具。

2. ffmpeg 的使用方式

命令行: ffmpeg [全局選項] {[輸入文件選項] -i ‘輸入文件’} ... {[輸出文件選項] ‘輸出文件’} ...

3. ffmpeg 可使用的選項

3.1 通用選項

ff* 工具的通用選項是共享的。(FFplayFFprobe)


 
  1. ‘-L’ 顯示 license

  2. ‘-h, -?, -help, --help [arg]’ 打印幫助信息;可以指定一個參數 arg ,如果不指定,只打印基本選項

  3. 可選的 arg 選項:

  4. ‘long’ 除基本選項外,還將打印高級選項

  5. ‘full’ 打印一個完整的選項列表,包含 encoders, decoders, demuxers, muxers, filters 等的共享以及私有選項

  6. ‘decoder=decoder_name’ 打印名稱爲 “decoder_name” 的解碼器的詳細信息

  7. ‘encoder=encoder_name’ 打印名稱爲 “encoder_name” 的編碼器的詳細信息

  8. ‘demuxer=demuxer_name’ 打印名稱爲 “demuxer_name” 的 demuxer 的詳細信息

  9. ‘muxer=muxer_name’ 打印名稱爲 “muxer_name” 的 muxer 的詳細信息

  10. ‘filter=filter_name’ 打印名稱爲 “filter_name” 的過濾器的詳細信息

  11.  
  12. ‘-version’ 顯示版本信息

  13. ‘-formats’ 顯示有效的格式

  14. ‘-codecs’ 顯示 libavcodec 已知的所有編解碼器

  15. ‘-decoders’ 顯示有效的解碼器

  16. ‘-encoders’ 顯示有效的編碼器

  17. ‘-bsfs’ 顯示有效的比特流過濾器

  18. ‘-protocols’ 顯示有效的協議

  19. ‘-filters’ 顯示 libavfilter 有效的過濾器

  20. ‘-pix_fmts’ 顯示有效的像素格式

  21. ‘-sample_fmts’ 顯示有效的採樣格式

  22. ‘-layouts’ 顯示通道名稱以及標準通道佈局

  23. ‘-colors’ 顯示認可的顏色名稱

  24. ‘-hide_banner’ 禁止打印歡迎語;也就是禁止默認會顯示的版權信息、編譯選項以及庫版本信息等

arg]’ 打印幫助信息;可以指定一個參數 arg ,如果不指定,只打印基本選項 可選的 arg 選項: ‘long’ 除基本選項外,還將打印高級選項 ‘full’ 打印一個完整的選項列表,包含 encoders, decoders, demuxers, muxers, filters 等的共享以及私有選項 ‘decoder=decoder_name’ 打印名稱爲 “decoder_name” 的解碼器的詳細信息 ‘encoder=encoder_name’ 打印名稱爲 “encoder_name” 的編碼器的詳細信息 ‘demuxer=demuxer_name’ 打印名稱爲 “demuxer_name” 的 demuxer 的詳細信息 ‘muxer=muxer_name’ 打印名稱爲 “muxer_name” 的 muxer 的詳細信息 ‘filter=filter_name’ 打印名稱爲 “filter_name” 的過濾器的詳細信息 ‘-version’ 顯示版本信息 ‘-formats’ 顯示有效的格式 ‘-codecs’ 顯示 libavcodec 已知的所有編解碼器 ‘-decoders’ 顯示有效的解碼器 ‘-encoders’ 顯示有效的編碼器 ‘-bsfs’ 顯示有效的比特流過濾器 ‘-protocols’ 顯示有效的協議 ‘-filters’ 顯示 libavfilter 有效的過濾器 ‘-pix_fmts’ 顯示有效的像素格式 ‘-sample_fmts’ 顯示有效的採樣格式 ‘-layouts’ 顯示通道名稱以及標準通道佈局 ‘-colors’ 顯示認可的顏色名稱 ‘-hide_banner’ 禁止打印歡迎語;也就是禁止默認會顯示的版權信息、編譯選項以及庫版本信息等

3.2 一些主要選項


 
  1. ‘-f fmt (input/output)’

  2. 強制輸入或輸出文件格式。通常,輸入文件的格式是自動檢測的,

  3. 輸出文件的格式是通過文件擴展名來進行猜測的,所有該選項大

  4. 多數時候不需要。

  5. ‘-i filename (input)’

  6. 輸入文件名

  7. ‘-y (global)’

  8. 覆蓋輸出文件而不詢問

  9. ‘-n (global)’

  10. 不覆蓋輸出文件,如果一個給定的輸出文件已經存在,則立即

  11. 退出

  12. ‘-c[:stream_specifier] codec (input/output,per-stream)’

  13. ‘-codec[:stream_specifier] codec (input/output,per-stream)’

  14. 爲一個或多個流選擇一個編碼器(當使用在一個輸出文件之前時)

  15. 或者一個解碼器(當使用在一個輸入文件之前時)。codec 是一個

  16. 編碼器/解碼器名稱或者一個特定值“copy”(只適用輸出)。

  17. ‘-t duration (output)’

  18. 當到達 duration 時,停止寫輸出。

  19. duration 可以是一個數字(秒),或者使用hh:mm:ss[.xxx]形式。

  20. -to 和 -t 是互斥的,-t 優先級更高。

  21. ‘-to position (output)’

  22. 在 position 處停止寫輸出。

  23. duration 可以是一個數字(秒),或者使用hh:mm:ss[.xxx]形式。

  24. -to 和 -t 是互斥的,-t 優先級更高。

  25. ‘-fs limit_size (output)’

  26. 設置文件大小限制,以字節表示

  27. ‘-ss position (input/output)’

  28. 當作爲輸入選項時(在 -i 之前),在輸入文件中跳轉到 position。

  29. 需要注意的是,在大多數格式中,不太可能精確的跳轉,因此,

  30. ffmpeg 將跳轉到 position 之前最接近的位置。當進行轉碼

  31. 並且 ‘-accurate_seek’ 打開時(默認),位於跳轉點和 position

  32. 之間的額外部分將被解碼並且丟棄。當做流拷貝或者當使用

  33. ‘-noaccurate_seek’時,它將被保留下來。

  34. 當作爲輸出選項時(在輸出文件名前),解碼但是丟棄輸入,直到

  35. 時間戳到達 position。

  36. position 可以是秒或者 hh:mm:ss[.xxx] 形式

  37. ‘-itsoffset offset (input)’

  38. 設置輸入時間偏移。 offset 將被添加到輸入文件的時間戳。指定

  39. 一個正偏移,意味着相應的流將被延時指定時間。

  40. ‘-timestamp date (output)’

  41. 在容器中設置錄音時間戳

  42. ‘-metadata[:metadata_specifier] key=value (output,per-metadata)’

  43. 設置metadata key/value對

  44. ‘-target type (output)’

  45. 指定目標文件類型(vcd, svcd, dvd, dv, dv50)。

  46. type 可以帶有 pal-, ntsc- 或 film- 前綴,以使用相應的標準。

  47. 所有的格式選項(bitrate, codecs, buffer sizes)將自動設定。

  48. ‘-dframes number (output)’

  49. 設置要錄製數據幀的個數。這是 -frames:d 的別名

  50. ‘-frames[:stream_specifier] framecount (output,per-stream)’

  51. framecount 幀以後,停止寫流。

  52. ‘-q[:stream_specifier] q (output,per-stream)’

  53. ‘-qscale[:stream_specifier] q (output,per-stream)’

  54. 使用固定質量範圍(VBR)。

  55. ‘-filter[:stream_specifier] filtergraph (output,per-stream)’

  56. 創建filtergraph 指定的過濾圖,並使用它來過濾流。

  57. ‘-filter_script[:stream_specifier] filename (output,per-stream)’

  58. 該選項與‘-filter’相似,唯一的不同是,它的參數是一個存放

  59. 過濾圖的文件的名稱。

  60. ‘-pre[:stream_specifier] preset_name (output,per-stream)’

  61. 指定匹配流的預設

  62. ‘-stats (global)’

  63. 打印編碼進程/統計信息。默認打開,可以使用 -nostats 禁用。

  64. ‘-stdin’

  65. 開啓標準輸入交互。默認打開,除非標準輸入作爲一個輸入。

  66. 可以使用 -nostdin 禁止。

  67. ‘-debug_ts (global)’

  68. 打印時間戳信息。默認關閉。

  69. ‘-attach filename (output)’

  70. 添加一個附件到輸出文件中

  71. ‘-dump_attachment[:stream_specifier] filename (input,per-stream)’

  72. 提取匹配的附件流到filename指定的文件中。

fmt (input/output)’ 強制輸入或輸出文件格式。通常,輸入文件的格式是自動檢測的, 輸出文件的格式是通過文件擴展名來進行猜測的,所有該選項大 多數時候不需要。 ‘-i filename (input)’ 輸入文件名 ‘-y (global)’ 覆蓋輸出文件而不詢問 ‘-n (global)’ 不覆蓋輸出文件,如果一個給定的輸出文件已經存在,則立即 退出 ‘-c[:stream_specifier] codec (input/output,per-stream)’ ‘-codec[:stream_specifier] codec (input/output,per-stream)’ 爲一個或多個流選擇一個編碼器(當使用在一個輸出文件之前時) 或者一個解碼器(當使用在一個輸入文件之前時)。codec 是一個 編碼器/解碼器名稱或者一個特定值“copy”(只適用輸出)。 ‘-t duration (output)’ 當到達 duration 時,停止寫輸出。 duration 可以是一個數字(秒),或者使用hh:mm:ss[.xxx]形式。 -to 和 -t 是互斥的,-t 優先級更高。 ‘-to position (output)’ 在 position 處停止寫輸出。 duration 可以是一個數字(秒),或者使用hh:mm:ss[.xxx]形式。 -to 和 -t 是互斥的,-t 優先級更高。 ‘-fs limit_size (output)’ 設置文件大小限制,以字節表示 ‘-ss position (input/output)’ 當作爲輸入選項時(在 -i 之前),在輸入文件中跳轉到 position。 需要注意的是,在大多數格式中,不太可能精確的跳轉,因此, ffmpeg 將跳轉到 position 之前最接近的位置。當進行轉碼 並且 ‘-accurate_seek’ 打開時(默認),位於跳轉點和 position 之間的額外部分將被解碼並且丟棄。當做流拷貝或者當使用 ‘-noaccurate_seek’時,它將被保留下來。 當作爲輸出選項時(在輸出文件名前),解碼但是丟棄輸入,直到 時間戳到達 position。 position 可以是秒或者 hh:mm:ss[.xxx] 形式 ‘-itsoffset offset (input)’ 設置輸入時間偏移。 offset 將被添加到輸入文件的時間戳。指定 一個正偏移,意味着相應的流將被延時指定時間。 ‘-timestamp date (output)’ 在容器中設置錄音時間戳 ‘-metadata[:metadata_specifier] key=value (output,per-metadata)’ 設置metadata key/value對 ‘-target type (output)’ 指定目標文件類型(vcd, svcd, dvd, dv, dv50)。 type 可以帶有 pal-, ntsc- 或 film- 前綴,以使用相應的標準。 所有的格式選項(bitrate, codecs, buffer sizes)將自動設定。 ‘-dframes number (output)’ 設置要錄製數據幀的個數。這是 -frames:d 的別名 ‘-frames[:stream_specifier] framecount (output,per-stream)’ framecount 幀以後,停止寫流。 ‘-q[:stream_specifier] q (output,per-stream)’ ‘-qscale[:stream_specifier] q (output,per-stream)’ 使用固定質量範圍(VBR)。 ‘-filter[:stream_specifier] filtergraph (output,per-stream)’ 創建filtergraph 指定的過濾圖,並使用它來過濾流。 ‘-filter_script[:stream_specifier] filename (output,per-stream)’ 該選項與‘-filter’相似,唯一的不同是,它的參數是一個存放 過濾圖的文件的名稱。 ‘-pre[:stream_specifier] preset_name (output,per-stream)’ 指定匹配流的預設 ‘-stats (global)’ 打印編碼進程/統計信息。默認打開,可以使用 -nostats 禁用。 ‘-stdin’ 開啓標準輸入交互。默認打開,除非標準輸入作爲一個輸入。 可以使用 -nostdin 禁止。 ‘-debug_ts (global)’ 打印時間戳信息。默認關閉。 ‘-attach filename (output)’ 添加一個附件到輸出文件中 ‘-dump_attachment[:stream_specifier] filename (input,per-stream)’ 提取匹配的附件流到filename指定的文件中。

3.3 視頻選項


 
  1. ‘-vframes number (output)’

  2. 設置錄製視頻幀的個數。這是 -frames:v 的別名

  3. ‘-r[:stream_specifier] fps (input/output,per-stream)’

  4. 設置幀率(Hz 值, 分數或縮寫)

  5. ‘-s[:stream_specifier] size (input/output,per-stream)’

  6. 設置幀大小。格式爲 ‘wxh’ (默認與源相同)

  7. ‘-aspect[:stream_specifier] aspect (output,per-stream)’

  8. 設置視頻顯示長寬比

  9. ‘-vn (output)’

  10. 禁止視頻錄製

  11. ‘-vcodec codec (output)’

  12. 設置視頻 codec。這是 -codec:v 的別名

  13. ‘-pass[:stream_specifier] n (output,per-stream)’

  14. 選擇pass number (1 or 2)。用來進行雙行程視頻編碼。

  15. ‘-passlogfile[:stream_specifier] prefix (output,per-stream)’

  16. 設置 two-pass 日誌文件名前綴,默認爲“ffmpeg2pass”。

  17. ‘-vf filtergraph (output)’

  18. 創建 filtergraph 指定的過濾圖,並使用它來過濾流。

number (output)’ 設置錄製視頻幀的個數。這是 -frames:v 的別名 ‘-r[:stream_specifier] fps (input/output,per-stream)’ 設置幀率(Hz 值, 分數或縮寫) ‘-s[:stream_specifier] size (input/output,per-stream)’ 設置幀大小。格式爲 ‘wxh’ (默認與源相同) ‘-aspect[:stream_specifier] aspect (output,per-stream)’ 設置視頻顯示長寬比 ‘-vn (output)’ 禁止視頻錄製 ‘-vcodec codec (output)’ 設置視頻 codec。這是 -codec:v 的別名 ‘-pass[:stream_specifier] n (output,per-stream)’ 選擇pass number (1 or 2)。用來進行雙行程視頻編碼。 ‘-passlogfile[:stream_specifier] prefix (output,per-stream)’ 設置 two-pass 日誌文件名前綴,默認爲“ffmpeg2pass”。 ‘-vf filtergraph (output)’ 創建 filtergraph 指定的過濾圖,並使用它來過濾流。

3.4 高級視頻選項


 
  1. ‘-pix_fmt[:stream_specifier] format (input/output,per-stream)’

  2. 設置像素格式。

  3. ‘-sws_flags flags (input/output)’

  4. 設置軟縮放標誌

  5. ‘-vdt n

  6. 丟棄閾值

  7. ‘-psnr’

  8. 計算壓縮幀的 PSNR

  9. ‘-vstats’

  10. 複製視頻編碼統計信息到‘vstats_HHMMSS.log’

  11. ‘-vstats_file file

  12. 複製視頻編碼統計信息到 file

  13. ‘-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)’

  14. ‘-force_key_frames[:stream_specifier] expr:expr (output,per-stream)’

  15. 在指定的時間戳強制關鍵幀

  16. ‘-copyinkf[:stream_specifier] (output,per-stream)’

  17. 當進行流拷貝時,同時拷貝開頭的非關鍵幀

  18. ‘-hwaccel[:stream_specifier] hwaccel (input,per-stream)’

  19. 使用硬件加速來解碼匹配的流

  20. ‘-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)’

  21. 選擇硬件加速所使用的設備。該選項只有‘-hwaccel’同時指定時纔有意義。

:stream_specifier] format (input/output,per-stream)’ 設置像素格式。 ‘-sws_flags flags (input/output)’ 設置軟縮放標誌 ‘-vdt n’ 丟棄閾值 ‘-psnr’ 計算壓縮幀的 PSNR ‘-vstats’ 複製視頻編碼統計信息到‘vstats_HHMMSS.log’ ‘-vstats_file file’ 複製視頻編碼統計信息到 file ‘-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)’ ‘-force_key_frames[:stream_specifier] expr:expr (output,per-stream)’ 在指定的時間戳強制關鍵幀 ‘-copyinkf[:stream_specifier] (output,per-stream)’ 當進行流拷貝時,同時拷貝開頭的非關鍵幀 ‘-hwaccel[:stream_specifier] hwaccel (input,per-stream)’ 使用硬件加速來解碼匹配的流 ‘-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)’ 選擇硬件加速所使用的設備。該選項只有‘-hwaccel’同時指定時纔有意義。

3.5 音頻選項


 
  1. ‘-aframes number (output)’

  2. 設置錄製音頻幀的個數。這是 -frames:a 的別名

  3. ‘-ar[:stream_specifier] freq (input/output,per-stream)’

  4. 設置音頻採樣率。

  5. ‘-aq q (output)’

  6. 設置音頻質量。這是 -q:a 的別名

  7. ‘-ac[:stream_specifier] channels (input/output,per-stream)’

  8. 設置音頻通道數。

  9. ‘-an (output)’

  10. 禁止音頻錄製

  11. ‘-acodec codec (input/output)’

  12. 設置音頻codec。這是-codec:a的別名

  13. ‘-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)’

  14. 設置音頻採樣格式

  15. ‘-af filtergraph (output)’

  16. 創建filtergraph 所指定的過濾圖,並使用它來過濾流

number (output)’ 設置錄製音頻幀的個數。這是 -frames:a 的別名 ‘-ar[:stream_specifier] freq (input/output,per-stream)’ 設置音頻採樣率。 ‘-aq q (output)’ 設置音頻質量。這是 -q:a 的別名 ‘-ac[:stream_specifier] channels (input/output,per-stream)’ 設置音頻通道數。 ‘-an (output)’ 禁止音頻錄製 ‘-acodec codec (input/output)’ 設置音頻codec。這是-codec:a的別名 ‘-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)’ 設置音頻採樣格式 ‘-af filtergraph (output)’ 創建filtergraph 所指定的過濾圖,並使用它來過濾流

3.6 字幕選項


 
  1. ‘-scodec codec (input/output)’

  2. 設置字幕codec。這是 -codec:s 的別名

  3. ‘-sn (output)’

  4. 禁止字幕錄製

codec (input/output)’ 設置字幕codec。這是 -codec:s 的別名 ‘-sn (output)’ 禁止字幕錄製

3.7 高級選項


 
  1. ‘-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)’

  2. 指定一個或多個流作爲輸出文件的源。

  3. 命令行中的第一個 -map 選項,指定輸出流0的源,

  4. 第二個 -map 選項,指定輸出流1的源,等等。

  5. ‘-map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]’

  6. 將一個給定輸入的音頻通道映射到一個輸出。

  7. ‘-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)’

  8. 設置下一個輸出文件的 metadata 信息。

  9. ‘-map_chapters input_file_index (output)’

  10. 從索引號爲 input_file_index 的輸入文件中拷貝章節到下一個輸出文件中。

  11. ‘-timelimit duration (global)’

  12. ffmpeg 運行 duration 秒後推出

  13. ‘-dump (global)’

  14. 將每一個輸入包複製到標準輸出

  15. ‘-hex (global)’

  16. 複製包時,同時複製負載

  17. ‘-re (input)’

  18. 以本地幀率讀取數據。主要用來模擬一個採集設備,

  19. 或者實時輸入流(例如:當從一個文件讀取時).

  20. ‘-vsync parameter

  21. 視頻同步方法

  22. ‘-async samples_per_second

  23. 音頻同步方法

  24. ‘-shortest (output)’

  25. 當最短的輸入流結束時,終止編碼

  26. ‘-muxdelay seconds (input)’

  27. 設置最大解封裝-解碼延時

  28. ‘-muxpreload seconds (input)’

  29. 設置初始解封裝-解碼延時

  30. ‘-streamid output-stream-index:new-value (output)’

  31. 爲一個輸出流分配一個新的stream-id。

  32. ‘-bsf[:stream_specifier] bitstream_filters (output,per-stream)’

  33. 爲匹配的流設置比特流過濾器

  34. ‘-filter_complex filtergraph (global)’

  35. 定義一個複雜的過濾圖

  36. ‘-lavfi filtergraph (global)’

  37. 定義一個複雜的過濾圖。相當於‘-filter_complex’

  38. ‘-filter_complex_script filename (global)’

  39. 該選項類似於‘-filter_complex’,唯一的不同是

  40. 它的參數是一個定義過濾圖的文件的文件名

  41. ‘-accurate_seek (input)’

  42. 打開或禁止在輸入文件中的精確跳轉。默認打開。

  43.  
  44. 更詳細的高級選項說明,請查閱 ffmpeg 文檔

input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)’ 指定一個或多個流作爲輸出文件的源。 命令行中的第一個 -map 選項,指定輸出流0的源, 第二個 -map 選項,指定輸出流1的源,等等。 ‘-map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]’ 將一個給定輸入的音頻通道映射到一個輸出。 ‘-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)’ 設置下一個輸出文件的 metadata 信息。 ‘-map_chapters input_file_index (output)’ 從索引號爲 input_file_index 的輸入文件中拷貝章節到下一個輸出文件中。 ‘-timelimit duration (global)’ ffmpeg 運行 duration 秒後推出 ‘-dump (global)’ 將每一個輸入包複製到標準輸出 ‘-hex (global)’ 複製包時,同時複製負載 ‘-re (input)’ 以本地幀率讀取數據。主要用來模擬一個採集設備, 或者實時輸入流(例如:當從一個文件讀取時). ‘-vsync parameter’ 視頻同步方法 ‘-async samples_per_second’ 音頻同步方法 ‘-shortest (output)’ 當最短的輸入流結束時,終止編碼 ‘-muxdelay seconds (input)’ 設置最大解封裝-解碼延時 ‘-muxpreload seconds (input)’ 設置初始解封裝-解碼延時 ‘-streamid output-stream-index:new-value (output)’ 爲一個輸出流分配一個新的stream-id。 ‘-bsf[:stream_specifier] bitstream_filters (output,per-stream)’ 爲匹配的流設置比特流過濾器 ‘-filter_complex filtergraph (global)’ 定義一個複雜的過濾圖 ‘-lavfi filtergraph (global)’ 定義一個複雜的過濾圖。相當於‘-filter_complex’ ‘-filter_complex_script filename (global)’ 該選項類似於‘-filter_complex’,唯一的不同是 它的參數是一個定義過濾圖的文件的文件名 ‘-accurate_seek (input)’ 打開或禁止在輸入文件中的精確跳轉。默認打開。 更詳細的高級選項說明,請查閱 ffmpeg 文檔

4. ffmpeg 使用示例


 
  1. 1) 輸出 YUV420P 原始數據

  2. ffmpeg -i test.mp4 test.yuv

  3.  
  4. 2) 從視頻前10s中提取圖像,1s提取一幀

  5. ffmpeg -i test.mp4 -t 10 -r 1 -f image2 pic-%03d.jpeg

  6.  
  7. 3) 從視頻中提取音頻

  8. ffmpeg -i test.mp4 -vn music.mp2

  9.  
  10. 4) 轉換 wav 格式,同時改變其採樣率

  11. ffmpeg -i test.wav -ar 32K test.mp2

  12.  
  13. 5) 輸出 mp3 原始 PCM 數據

  14. ffmpeg -i test.mp3 -f s16le test.pcm

) 輸出 YUV420P 原始數據 ffmpeg -i test.mp4 test.yuv 2) 從視頻前10s中提取圖像,1s提取一幀 ffmpeg -i test.mp4 -t 10 -r 1 -f image2 pic-%03d.jpeg 3) 從視頻中提取音頻 ffmpeg -i test.mp4 -vn music.mp2 4) 轉換 wav 格式,同時改變其採樣率 ffmpeg -i test.wav -ar 32K test.mp2 5) 輸出 mp3 原始 PCM 數據 ffmpeg -i test.mp3 -f s16le test.pcm


 
  1. <span style="color:#0000ff">

  2. </span>

================================================================================================
part 4:
 

使用網絡上的各種轉碼軟件,比如愛剪輯,簡直崩潰了!比如,它竟然強行把你要編輯的視頻的前面,插入了他的廣告!很不爽,決定用ffmpeg。 ffmpeg做IT media的都知道,很強大,只不多對windows用戶比較麻煩,用命令行不方便。好吧,只能說,這篇文章估計只有小衆朋友看的。嗚嗚

廢話不說,直接貼出來吧。 貼出來之前,先mark一下 ffmpeg的使用方式: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

常用參數說明: 主要參數: -i 設定輸入流 -f 設定輸出格式 -ss 開始時間 視頻參數: -b 設定視頻流量,默認爲200Kbit/s -r 設定幀速率,默認爲25 -s 設定畫面的寬與高 -aspect 設定畫面的比例 -vn 不處理視頻 -vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器 音頻參數: -ar 設定採樣率 -ac 設定聲音的Channel數 -acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器 -an 不處理音頻

1. 視頻格式轉換

(其實格式轉換說法不太準確,但大家都這麼叫,準確的說,應該是視頻容器轉換) 比如一個avi文件,想轉爲mp4,或者一個mp4想轉爲ts。 ffmpeg -i input.avi output.mp4 ffmpeg -i input.mp4 output.ts 我目測這個已經能滿足很多人的需求了。

2. 提取音頻

比如我有一個“曉鬆奇談”,可是我不想看到他的臉,我只想聽聲音, 地鐵上可以聽,咋辦? ffmpeg -i 曉鬆奇談.mp4 -acodec copy -vn output.aac 上面的命令,默認mp4的audio codec是aac,如果不是會出錯,咱可以暴力一點,不管什麼音頻,都轉爲最常見的aac。 ffmpeg -i 曉鬆奇談.mp4 -acodec aac -vn output.aac

3. 提取視頻

我目測有些IT員工,特別是做嵌入式的,比如機頂盒,想debug一下,沒有音頻的情況下,播放一個視頻幾天幾夜會不會crash,這時候你需要一個純視頻文件,可以這麼幹。 ffmpeg -i input.mp4 -vcodec copy -an output.mp4

4. 視頻剪切

經常要測試視頻,但是只需要測幾秒鐘,可是視頻卻有幾個G,咋辦?切啊! 下面的命令,就可以從時間爲00:00:15開始,截取5秒鐘的視頻。 ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 -ss表示開始切割的時間,-t表示要切多少。上面就是從開始,切5秒鐘出來。

5. 碼率控制

碼率控制對於在線視頻比較重要。因爲在線視頻需要考慮其能提供的帶寬。

那麼,什麼是碼率?很簡單: bitrate = file size / duration 比如一個文件20.8M,時長1分鐘,那麼,碼率就是: biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps 一般音頻的碼率只有固定幾種,比如是128Kbps, 那麼,video的就是 video biterate = 2831Kbps -128Kbps = 2703Kbps。

說完背景了。好了,來說ffmpeg如何控制碼率。 ffmpg控制碼率有3種選擇,-minrate -b:v -maxrate -b:v主要是控制平均碼率。 比如一個視頻源的碼率太高了,有10Mbps,文件太大,想把文件弄小一點,但是又不破壞分辨率。 ffmpeg -i input.mp4 -b:v 2000k output.mp4 上面把碼率從原碼率轉成2Mbps碼率,這樣其實也間接讓文件變小了。目測接近一半。 不過,ffmpeg官方wiki比較建議,設置b:v時,同時加上 -bufsize -bufsize 用於設置碼率控制緩衝器的大小,設置的好處是,讓整體的碼率更趨近於希望的值,減少波動。(簡單來說,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 當然是第二種比較好) ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate -maxrate就簡單了,在線視頻有時候,希望碼率波動,不要超過一個閾值,可以設置maxrate。 ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6. 視頻編碼格式轉換

比如一個視頻的編碼是MPEG4,想用H264編碼,咋辦? ffmpeg -i input.mp4 -vcodec h264 output.mp4 相反也一樣 ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

當然了,如果ffmpeg當時編譯時,添加了外部的x265或者X264,那也可以用外部的編碼器來編碼。(不知道什麼是X265,可以Google一下,簡單的說,就是她不包含在ffmpeg的源碼裏,是獨立的一個開源代碼,用於編碼HEVC,ffmpeg編碼時可以調用它。當然了,ffmpeg自己也有編碼器) ffmpeg -i input.mp4 -c:v libx265 output.mp4 ffmpeg -i input.mp4 -c:v libx264 output.mp4

7. 只提取視頻ES數據

這個可能做開發的人會用到,順便提一下吧。 ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

8. 過濾器的使用

這個我在另一篇博客提到了,這裏貼一下吧。

8.1 將輸入的1920x1080縮小到960x540輸出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 //ps: 如果540不寫,寫成-1,即scale=960:-1, 那也是可以的,ffmpeg會通知縮放濾鏡在輸出時保持原始的寬高比。

比如,我有這麼一個圖片 iqiyi logo 想要貼到一個視頻上,那可以用如下命令: ./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4 結果如下所示: add logo left 要貼到其他地方?看下面: 右上角: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4 左下角: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4 右下角: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

有時候,下載了某個網站的視頻,但是有logo很煩,咋辦?有辦法,用ffmpeg的delogo過濾器。 語法:-vf delogo=x:y:w:h[:t[:show]] x:y 離左上角的座標 w:h logo的寬和高 t: 矩形邊緣的厚度默認值4 show:若設置爲1有一個綠色的矩形,默認值0。

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4 結果如下所示: de logo

9. 抓取視頻的一些幀,存爲jpeg圖片

比如,一個視頻,我想提取一些幀,存爲圖片,咋辦? ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -r 表示每一秒幾幀 -q:v表示存儲jpeg的圖像質量,一般2是高質量。 如此,ffmpeg會把input.mp4,每隔一秒,存一張圖片下來。假設有60s,那會有60張。

60張?什麼?這麼多?不要不要。。。。。不要咋辦?? 可以設置開始的時間,和你想要截取的時間呀。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -ss 表示開始時間 -t表示共要多少時間。 如此,ffmpeg會從input.mp4的第20s時間開始,往下10s,即20~30s這10秒鐘之間,每隔1s就抓一幀,總共會抓10幀。

怎麼樣,好用吧。^^


其他小衆的用法

1.輸出YUV420原始數據

對於一下做底層編解碼的人來說,有時候常要提取視頻的YUV原始數據。 怎麼坐?很簡答: ffmpeg -i input.mp4 output.yuv 怎麼樣,是不是太簡單啦?!!!哈哈

如果你想問yuv的數據,如何播放,我不會告訴你,RawPlayer挺好用的!!

那如果我只想要抽取某一幀YUV呢? 簡單,你先用上面的方法,先抽出jpeg圖片,然後把jpeg轉爲YUV。 比如: 你先抽取10幀圖片。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg 結果:


 
  1. -rw-rw-r-- 1 chenxf chenxf 296254 7月 20 16:08 pic-001.jpeg

  2. -rw-rw-r-- 1 chenxf chenxf 300975 7月 20 16:08 pic-002.jpeg

  3. -rw-rw-r-- 1 chenxf chenxf 310130 7月 20 16:08 pic-003.jpeg

  4. -rw-rw-r-- 1 chenxf chenxf 268694 7月 20 16:08 pic-004.jpeg

  5. -rw-rw-r-- 1 chenxf chenxf 301056 7月 20 16:08 pic-005.jpeg

  6. -rw-rw-r-- 1 chenxf chenxf 293927 7月 20 16:08 pic-006.jpeg

  7. -rw-rw-r-- 1 chenxf chenxf 340295 7月 20 16:08 pic-007.jpeg

  8. -rw-rw-r-- 1 chenxf chenxf 430787 7月 20 16:08 pic-008.jpeg

  9. -rw-rw-r-- 1 chenxf chenxf 404552 7月 20 16:08 pic-009.jpeg

  10. -rw-rw-r-- 1 chenxf chenxf 412691 7月 20 16:08 pic-010.jpeg

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然後,你就隨便挑一張,轉爲YUV:
ffmpeg -i pic-001.jpeg -s 1440x1440 -pix_fmt yuv420p xxx3.yuv
如果-s參數不寫,則輸出大小與輸入一樣。

當然了,YUV還有yuv422p啥的,你在-pix_fmt 換成yuv422p就行啦!

2. H264編碼profile & level控制

背景知識

先科普一下profile&level吧,知道的請飄過。(這裏討論最常用的H264)
H.264有四種畫質級別,分別是baseline, extended, main, high:
  1、Baseline Profile:基本畫質。支持I/P 幀,只支持無交錯(Progressive)和CAVLC;
  2、Extended profile:進階畫質。支持I/P/B/SP/SI 幀,只支持無交錯(Progressive)和CAVLC;(用的少)
  3、Main profile:主流畫質。提供I/P/B 幀,支持無交錯(Progressive)和交錯(Interlaced),
    也支持CAVLC 和CABAC 的支持;
  4、High profile:高級畫質。在main Profile 的基礎上增加了8x8內部預測、自定義量化、 無損視頻編碼和更多的YUV 格式;
H.264 Baseline profile、Extended profile和Main profile都是針對8位樣本數據、4:2:0格式(YUV)的視頻序列。在相同配置情況下,High profile(HP)可以比Main profile(MP)降低10%的碼率。
根據應用領域的不同,Baseline profile多應用於實時通信領域,Main profile多應用於流媒體領域,High profile則多應用於廣電和存儲領域。

下圖清楚的給出不同的profile&level的性能區別。
profile
這裏寫圖片描述

level
這裏寫圖片描述

2.1 ffmpeg如何控制profile&level

舉3個例子吧
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4

ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4

ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4

如果ffmpeg編譯時加了external的libx264,那就這麼寫:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4

從壓縮比例來說,baseline< main < high,對於帶寬比較侷限的在線視頻,可能會選擇high,但有些時候,做個小視頻,希望所有的設備基本都能解碼(有些低端設備或早期的設備只能解碼baseline),那就犧牲文件大小吧,用baseline。自己取捨吧!

蘋果的設備對不同profile的支持。
這裏寫圖片描述

2.2. 編碼效率和視頻質量的取捨(preset, crf)

除了上面提到的,強行配置biterate,或者強行配置profile/level,還有2個參數可以控制編碼效率。
一個是preset,一個是crf。
preset也挺粗暴,基本原則就是,如果你覺得編碼太快或太慢了,想改改,可以用profile。
preset有如下參數可用:

ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo.
編碼加快,意味着信息丟失越嚴重,輸出圖像質量越差。

CRF(Constant Rate Factor): 範圍 0-51: 0是編碼毫無丟失信息, 23 is 默認, 51 是最差的情況。相對合理的區間是18-28.
值越大,壓縮效率越高,但也意味着信息丟失越嚴重,輸出圖像質量越差。

舉個例子吧。
ffmpeg -i input -c:v libx264 -profile:v main -preset:v fast -level 3.1 -x264opts crf=18
(參考自:https://trac.ffmpeg.org/wiki/Encode/H.264)

2.3. H265 (HEVC)編碼tile&level控制

背景知識

和H264的profile&level一樣,爲了應對不同應用的需求,HEVC制定了“層級”(tier) 和“等級”(level)。
tier只有main和high。
level有13級,如下所示:
這裏寫圖片描述

不多說,直接給出怎麼用。(supposed你用libx265編碼)
ffmpeg -i input.mp4 -c:v libx265 -x265-params "profile=high:level=3.0" output.mp4

 

===================================================================================

part 5:

 

 

 

轉flv

ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 

簡單的轉換:

ffmpeg -i IpCam.ts IpCam.flv

注意:bitrate否則轉換後圖像模糊:20M 合適

ffmpeg -i IpCam.ts -b 20000000  IpCam.flv

 

 

ffmpeg 推rtmp 流

ffmpeg -re -i ~/2012.flv -f flv rtmp://192.168.1.102/myapp/test1

ffmpeg -re -i RealStream.fifo -f flv -b 20000000 rtmp://localhost/myapp/test1

 

信息查詢

ffmpeg -formats
查看所有支持的容器格式

ffmpeg -codecs
查看所有編解碼器

ffmpeg -filters
查看所有可用的filter

ffmpeg -pix_fmts
查看所有支持的圖片格式


ffmpeg -sample_fmts
查看所有支持的像素格式

ffprobe -i money.mp4
查看媒體信息

 

格式轉換

ffmpeg -i money.mp4 -c:v mpeg2video -b:v 500k -c:a libmp3lame -f mpegts money.ts
ffmpeg -i money.mp4 -c:v libx264 -minrate:v 500k -maxrate:v 500k -bufsize:v 125k -c:a libmp3lame -f mpegts money.ts
ffmpeg -i money.mp4 -c:v libx264 -x264opts bitrate=500:vbv-maxrate=500:vbv-bufsize=166:nal_hrd=cbr  -c:a libmp3lame -f mpegts money_cbr_500k.ts
-i    輸入文件名
-c:v  設置視頻編碼器
-v:b  設置碼率
-c:a  設置音頻編碼器
-f    設置文件格式(容器)
-minrate:v 500k -maxrate:v 500k -bufsize:v 125k  設置CBR(不太好用)

 

-x264opts bitrate=500:vbv-maxrate=500:vbv-bufsize=166:nal_hrd=cbr  設置CBR(好用)

 

 

選擇其中第一個視頻流輸出,設置碼率
ffmpeg -i money.mp4 -map 0:v:0 -c:v libx264 -b:v 500k money_500k.mp4
ffmpeg -i money.mp4 -map 0:v:0 -c:v libx264 -b:v 300k money_300k.mp4
ffmpeg -i money.mp4 -map 0:v:0 -c:v libx264 -b:v 100k -s 336x188 money_100k.mp4
選擇其中第一個音頻流輸出
ffmpeg -i money.mp4 -map 0:a:0 money_audio.mp4

 

使用圖片合成翻轉的視頻:

 

ffmpeg -framerate 30 -pattern_type glob -i '*.jpg' -c:v libx264 -r 30 -vf vflip,hflip out.mp4

====================================================================================

part 6:

 

 

1.分離視頻音頻流


 
  1. ffmpeg -i input_file -vcodec copy -an output_file_video  //分離視頻流

  2. ffmpeg -i input_file -acodec copy -vn output_file_audio  //分離音頻流

2.視頻解複用


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

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

3.視頻轉碼


 
  1. ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264 //轉碼爲碼流原始文件

  2. ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264 //轉碼爲碼流原始文件

  3. ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //轉碼爲封裝文件

  4. //-bf B幀數目控制,-g 關鍵幀間隔控制,-s 分辨率控制

4.視頻封裝

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

5.視頻剪切


 
  1. ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取圖片

  2. ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切視頻

  3. //-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 不處理音頻

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

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

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

1、將文件當做直播送至live

[plain] view plain copy print?

  1. ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName  
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、將直播媒體保存至本地文件

 

[plain] view plain copy print?

  1. ffmpeg -i rtmp://server/live/streamName -c copy dump.flv  
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、將其中一個直播流,視頻改用h264壓縮,音頻不變,送至另外一個直播服務流

 

[plain] view plain copy print?

  1. ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream  
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

 

4、將其中一個直播流,視頻改用h264壓縮,音頻改用faac壓縮,送至另外一個直播服務流

[plain] view plain copy print?

  1. ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream  
ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、將其中一個直播流,視頻不變,音頻改用faac壓縮,送至另外一個直播服務流

[plain] view plain copy print?

  1. ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream  
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、將一個高清流,複製爲幾個不同視頻清晰度的流重新發布,其中音頻不變

[plain] view plain copy print?

  1. ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k  
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一樣,只是採用-x264opts選項

[plain] view plain copy print?

  1. ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k  
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、將當前攝像頭及音頻通過DSSHOW採集,視頻h264、音頻faac壓縮後發佈

[plain] view plain copy print?

  1. ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name  
ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、將一個JPG圖片經過h264壓縮循環輸出爲mp4視頻

[plain] view plain copy print?

  1. ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4  
ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

10、將普通流視頻改用h264壓縮,音頻不變,送至高清流服務(新版本FMS live=1)

[plain] view plain copy print?

  1. ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃<br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" />  
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃<br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" />

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

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

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

 

1.採集usb攝像頭視頻命令:

ffmpeg -t 20 -f vfwcap -i 0 -r 8 -f mp4 cap1111.mp4

 

./ffmpeg -t 10 -f vfwcap -i 0 -r 8 -f mp4 cap.mp4

具體說明如下:我們採集10秒,採集設備爲vfwcap類型設備,第0個vfwcap採集設備(如果系統有多個vfw的視頻採集設備,可以通過-i num來選擇),每秒8幀,輸出方式爲文件,格式爲mp4。

 

2.最簡單的抓屏:

ffmpeg -f gdigrab -i desktop out.mpg 

 

3.從屏幕的(10,20)點處開始,抓取640x480的屏幕,設定幀率爲5 :

ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg 

 

4.ffmpeg從視頻中生成gif圖片:

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

 

5.ffmpeg將圖片轉換爲視頻:

http://blog.sina.com.cn/s/blog_40d73279010113c2.html

 

===========================================================================

part 7:

 

 

FFMPEG以其強大的功能而在音視頻領域著稱,更重要的是它還是開源的!音視頻格式轉換、裁剪、拼接、提取字幕或某音軌等等,它都能勝任,可謂一把瑞士軍刀,小巧但功能強大,是音視頻研究的必備利器之一。

 

示例

 

1. 轉換成H264編解碼

[plain] view plain copy print?

  1. ffmpeg -i input_file -vcodec h264 output_file  
ffmpeg -i input_file -vcodec h264 output_file

其中 -i 表示輸入文件, -vcodec  h264 表示視頻編解碼方式爲 H264。

2. 轉換成H265編解碼

[plain] view plain copy print?

  1. ffmpeg -i input_file -vcode hevc output_file  
ffmpeg -i input_file -vcode hevc output_file

其中 -i 表示輸入文件, -vcodec  hevc 表示視頻編解碼方式爲 H265,注意ffmpeg 中名稱爲 hevc,不是H265!

3. 設置輸出視頻的分辨率

[plain] view plain copy print?

  1. ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file  
ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file

其中 -s 表示分辨率。

4. 設置輸出文件的音視頻比特率

[plain] view plain copy print?

  1. ffmpeg -i input_file  -vcodec h264 -b:v 10M -b:a 128K output_file  
ffmpeg -i input_file  -vcodec h264 -b:v 10M -b:a 128K output_file

其中 -b:v 10M 表示視頻碼率爲10Mbps, -b:a 128K 表示音頻碼率爲 128Kbps,注意FFMPEG對於碼率控制,有時候不太準確,跟輸入源有一定關係。

5. 剪切某段視頻

[plain] view plain copy print?

  1. ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_file  
  2. ffmpeg -ss 300 -t 90  -i input_file -vcodec copy -acodec copy output_file  
ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_file
ffmpeg -ss 300 -t 90  -i input_file -vcodec copy -acodec copy output_file

上面的兩種方式等價,時間格式支持 HH:MM:SS或者秒數。 -ss 開始時間, -t 持續時間, -vcodec copy 保持原視頻編碼, -acodec copy 保持原音頻編碼。

6. 分離音視頻流保存爲不同文件

[plain] view plain copy print?

  1. ffmpeg -i input_file -vcodec copy -an output_file_video  //提取視頻流  
  2. ffmpeg -i input_file -acodec copy -vn output_file_audio  //提取音頻流  
ffmpeg -i input_file -vcodec copy -an output_file_video  //提取視頻流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //提取音頻流

其中 -an 表示不處理音頻, -vn 表示不處理視頻。

7.合併多個音視頻文件爲一個文件

 

[plain] view plain copy print?

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

 

 

8. 提取視頻圖像保存爲圖片文件

 

[plain] view plain copy print?

  1. ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg        //提取圖片  
ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg        //提取圖片

 

其中 -r 表示提取圖像的頻率,-f 表示輸出格式, %3d 表示文件命名方式(也即生成的圖片名爲 image-001.jpeg, image-002.jpeg, ...., image-999.jpeg)。

 

9. 轉換成YUV原始文件

 

[plain] view plain copy print?

  1. ffmpeg -i input_file -vcodec rawvideo -an output_file_yuv  
ffmpeg -i input_file -vcodec rawvideo -an output_file_yuv

 

 

10. YUV序列轉出AVI文件

 

[plain] view plain copy print?

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

 

 

11. 控制關鍵幀間隔和B幀

 

[plain] view plain copy print?

  1. ffmpeg –i input_file  –vcodec h264 –bf 0 –g 25 –s 854x480 –an –f m4v output_file  
ffmpeg –i input_file  –vcodec h264 –bf 0 –g 25 –s 854x480 –an –f m4v output_file

 

其中-bf 控制B幀數目,-g 控制關鍵幀間隔, -f 控制文件格式(format,注意與codec的區別)。

 

12. 錄製rtsp網絡數據流

 

[plain] view plain copy print?

  1. ffmpeg –i rtsp://192.168.1.100:5555/test_stream –vcodec copy out.avi  
ffmpeg –i rtsp://192.168.1.100:5555/test_stream –vcodec copy out.avi

 

將rtsp的網絡視頻流文件保存爲 out.avi 本地文件

 

13. 在多音軌文件中提取某音軌文件

得分兩步走,第一步,查看源文件,找到對應的音頻序號;第二步,將對應的音頻序號流提取出來。如下所示:

 

[plain] view plain copy print?

  1. <strong><span style="color:#ff0000;">D:>ffmpeg  -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv</span></strong>  
  2. ffmpeg version N-66931-gbbd8c85 Copyright (c) 2000-2014 the FFmpeg developers  
  3.   built on Oct 17 2014 01:05:12 with gcc 4.9.1 (GCC)  
  4.   configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi  
  5. g --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --  
  6. enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-lib  
  7. opencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge  
  8. r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --  
  9. enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-  
  10. libx265 --enable-libxavs --enable-libxvid --enable-zlib  
  11.   libavutil      54. 10.100 / 54. 10.100  
  12.   libavcodec     56.  8.100 / 56.  8.100  
  13.   libavformat    56.  9.100 / 56.  9.100  
  14.   libavdevice    56.  1.100 / 56.  1.100  
  15.   libavfilter     5.  1.106 /  5.  1.106  
  16.   libswscale      3.  1.101 /  3.  1.101  
  17.   libswresample   1.  1.100 /  1.  1.100  
  18.   libpostproc    53.  3.100 / 53.  3.100  
  19. Input #0, matroska,webm, from 'D:\Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv':  
  20.   Metadata:  
  21.     title           : X-MEN__DAYS_OF_FUTURE_PAST.Title800  
  22.     encoder         : libebml v0.7.8 + libmatroska v0.8.1  
  23.     creation_time   : 2014-10-07 14:08:43  
  24.   Duration: 02:11:35.18, start: 0.000000, bitrate: 28873 kb/s  
  25.     Chapter #0:0: start 0.000000, end 213.338000  
  26.     Metadata:  
  27.       title           : (01)00:00:00:000  
  28.     Chapter #0:1: start 213.338000, end 480.688000  
  29.     Metadata:  
  30.       title           : (02)00:03:33:338  
  31.     Chapter #0:2: start 480.688000, end 628.628000  
  32.     Metadata:  
  33.       title           : (03)00:08:00:688  
  34.     Chapter #0:3: start 628.628000, end 838.045000  
  35.     Metadata:  
  36.       title           : (04)00:10:28:628  
  37.     Chapter #0:4: start 838.045000, end 1022.021000  
  38.     Metadata:  
  39.       title           : (05)00:13:58:045  
  40.     Chapter #0:5: start 1022.021000, end 1216.089000  
  41.     Metadata:  
  42.       title           : (06)00:17:02:021  
  43.     Chapter #0:6: start 1216.089000, end 1331.330000  
  44.     Metadata:  
  45.       title           : (07)00:20:16:089  
  46.     Chapter #0:7: start 1331.330000, end 1597.887000  
  47.     Metadata:  
  48.       title           : (08)00:22:11:330  
  49.     Chapter #0:8: start 1597.887000, end 1832.038000  
  50.     Metadata:  
  51.       title           : (09)00:26:37:887  
  52.     Chapter #0:9: start 1832.038000, end 2069.776000  
  53.     Metadata:  
  54.       title           : (10)00:30:32:038  
  55.     Chapter #0:10: start 2069.776000, end 2160.992000  
  56.     Metadata:  
  57.       title           : (11)00:34:29:776  
  58.     Chapter #0:11: start 2160.992000, end 2298.087000  
  59.     Metadata:  
  60.       title           : (12)00:36:00:992  
  61.     Chapter #0:12: start 2298.087000, end 2437.101000  
  62.     Metadata:  
  63.       title           : (13)00:38:18:087  
  64.     Chapter #0:13: start 2437.101000, end 2753.792000  
  65.     Metadata:  
  66.       title           : (14)00:40:37:101  
  67.     Chapter #0:14: start 2753.792000, end 2933.847000  
  68.     Metadata:  
  69.       title           : (15)00:45:53:792  
  70.     Chapter #0:15: start 2933.847000, end 3118.156000  
  71.     Metadata:  
  72.       title           : (16)00:48:53:847  
  73.     Chapter #0:16: start 3118.156000, end 3283.113000  
  74.     Metadata:  
  75.       title           : (17)00:51:58:156  
  76.     Chapter #0:17: start 3283.113000, end 3471.426000  
  77.     Metadata:  
  78.       title           : (18)00:54:43:113  
  79.     Chapter #0:18: start 3471.426000, end 3648.186000  
  80.     Metadata:  
  81.       title           : (19)00:57:51:426  
  82.     Chapter #0:19: start 3648.186000, end 3806.594000  
  83.     Metadata:  
  84.       title           : (20)01:00:48:186  
  85.     Chapter #0:20: start 3806.594000, end 4029.567000  
  86.     Metadata:  
  87.       title           : (21)01:03:26:594  
  88.     Chapter #0:21: start 4029.567000, end 4183.596000  
  89.     Metadata:  
  90.       title           : (22)01:07:09:567  
  91.     Chapter #0:22: start 4183.596000, end 4391.470000  
  92.     Metadata:  
  93.       title           : (23)01:09:43:596  
  94.     Chapter #0:23: start 4391.470000, end 4531.860000  
  95.     Metadata:  
  96.       title           : (24)01:13:11:470  
  97.     Chapter #0:24: start 4531.860000, end 4647.726000  
  98.     Metadata:  
  99.       title           : (25)01:15:31:860  
  100.     Chapter #0:25: start 4647.726000, end 4770.098000  
  101.     Metadata:  
  102.       title           : (26)01:17:27:726  
  103.     Chapter #0:26: start 4770.098000, end 5090.710000  
  104.     Metadata:  
  105.       title           : (27)01:19:30:098  
  106.     Chapter #0:27: start 5090.710000, end 5218.254000  
  107.     Metadata:  
  108.       title           : (28)01:24:50:710  
  109.     Chapter #0:28: start 5218.254000, end 5464.250000  
  110.     Metadata:  
  111.       title           : (29)01:26:58:254  
  112.     Chapter #0:29: start 5464.250000, end 5643.679000  
  113.     Metadata:  
  114.       title           : (30)01:31:04:250  
  115.     Chapter #0:30: start 5643.679000, end 5853.180000  
  116.     Metadata:  
  117.       title           : (31)01:34:03:679  
  118.     Chapter #0:31: start 5853.180000, end 6114.817000  
  119.     Metadata:  
  120.       title           : (32)01:37:33:180  
  121.     Chapter #0:32: start 6114.817000, end 6292.995000  
  122.     Metadata:  
  123.       title           : (33)01:41:54:817  
  124.     Chapter #0:33: start 6292.995000, end 6439.808000  
  125.     Metadata:  
  126.       title           : (34)01:44:52:995  
  127.     Chapter #0:34: start 6439.808000, end 6689.766000  
  128.     Metadata:  
  129.       title           : (35)01:47:19:808  
  130.     Chapter #0:35: start 6689.766000, end 7002.745000  
  131.     Metadata:  
  132.       title           : (36)01:51:29:766  
  133.     Chapter #0:36: start 7002.745000, end 7212.413000  
  134.     Metadata:  
  135.       title           : (37)01:56:42:745  
  136.     Chapter #0:37: start 7212.413000, end 7354.972000  
  137.     Metadata:  
  138.       title           : (38)02:00:12:413  
  139.     Chapter #0:38: start 7354.972000, end 7831.907000  
  140.     Metadata:  
  141.       title           : (39)02:02:34:972  
  142.     Chapter #0:39: start 7831.907000, end 7895.095000  
  143.     Metadata:  
  144.       title           : (40)02:10:31:907  
  145.     Chapter #0:40: start 7895.095000, end 7895.178884  
  146.     Metadata:  
  147.       title           : (41)02:11:35:095  
  148.     <strong>Stream #0:0: Video: hevc (Main), yuv420p(tv), 3840x2160, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 48003.07 tbn, 48003  
  149. .07 tbc (default)  
  150.     Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)  
  151.     <span style="color:#33ff33;">Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</span>  
  152.     Stream #0:3(spa): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  153.     Stream #0:4(fra): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  154.     Stream #0:5(por): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  155.     Stream #0:6(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s  
  156.     Stream #0:7(tha): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  157.     Stream #0:8(ukr): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</strong>  
  158. <span style="color:#ff0000;">At least one output file must be specified</span>  
  159.   
  160. D:>  
<strong><span style="color:#ff0000;">D:>ffmpeg  -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv</span></strong>
ffmpeg version N-66931-gbbd8c85 Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct 17 2014 01:05:12 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi
g --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-lib
opencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --
enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54. 10.100 / 54. 10.100
  libavcodec     56.  8.100 / 56.  8.100
  libavformat    56.  9.100 / 56.  9.100
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.106 /  5.  1.106
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'D:\Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv':
  Metadata:
    title           : X-MEN__DAYS_OF_FUTURE_PAST.Title800
    encoder         : libebml v0.7.8 + libmatroska v0.8.1
    creation_time   : 2014-10-07 14:08:43
  Duration: 02:11:35.18, start: 0.000000, bitrate: 28873 kb/s
    Chapter #0:0: start 0.000000, end 213.338000
    Metadata:
      title           : (01)00:00:00:000
    Chapter #0:1: start 213.338000, end 480.688000
    Metadata:
      title           : (02)00:03:33:338
    Chapter #0:2: start 480.688000, end 628.628000
    Metadata:
      title           : (03)00:08:00:688
    Chapter #0:3: start 628.628000, end 838.045000
    Metadata:
      title           : (04)00:10:28:628
    Chapter #0:4: start 838.045000, end 1022.021000
    Metadata:
      title           : (05)00:13:58:045
    Chapter #0:5: start 1022.021000, end 1216.089000
    Metadata:
      title           : (06)00:17:02:021
    Chapter #0:6: start 1216.089000, end 1331.330000
    Metadata:
      title           : (07)00:20:16:089
    Chapter #0:7: start 1331.330000, end 1597.887000
    Metadata:
      title           : (08)00:22:11:330
    Chapter #0:8: start 1597.887000, end 1832.038000
    Metadata:
      title           : (09)00:26:37:887
    Chapter #0:9: start 1832.038000, end 2069.776000
    Metadata:
      title           : (10)00:30:32:038
    Chapter #0:10: start 2069.776000, end 2160.992000
    Metadata:
      title           : (11)00:34:29:776
    Chapter #0:11: start 2160.992000, end 2298.087000
    Metadata:
      title           : (12)00:36:00:992
    Chapter #0:12: start 2298.087000, end 2437.101000
    Metadata:
      title           : (13)00:38:18:087
    Chapter #0:13: start 2437.101000, end 2753.792000
    Metadata:
      title           : (14)00:40:37:101
    Chapter #0:14: start 2753.792000, end 2933.847000
    Metadata:
      title           : (15)00:45:53:792
    Chapter #0:15: start 2933.847000, end 3118.156000
    Metadata:
      title           : (16)00:48:53:847
    Chapter #0:16: start 3118.156000, end 3283.113000
    Metadata:
      title           : (17)00:51:58:156
    Chapter #0:17: start 3283.113000, end 3471.426000
    Metadata:
      title           : (18)00:54:43:113
    Chapter #0:18: start 3471.426000, end 3648.186000
    Metadata:
      title           : (19)00:57:51:426
    Chapter #0:19: start 3648.186000, end 3806.594000
    Metadata:
      title           : (20)01:00:48:186
    Chapter #0:20: start 3806.594000, end 4029.567000
    Metadata:
      title           : (21)01:03:26:594
    Chapter #0:21: start 4029.567000, end 4183.596000
    Metadata:
      title           : (22)01:07:09:567
    Chapter #0:22: start 4183.596000, end 4391.470000
    Metadata:
      title           : (23)01:09:43:596
    Chapter #0:23: start 4391.470000, end 4531.860000
    Metadata:
      title           : (24)01:13:11:470
    Chapter #0:24: start 4531.860000, end 4647.726000
    Metadata:
      title           : (25)01:15:31:860
    Chapter #0:25: start 4647.726000, end 4770.098000
    Metadata:
      title           : (26)01:17:27:726
    Chapter #0:26: start 4770.098000, end 5090.710000
    Metadata:
      title           : (27)01:19:30:098
    Chapter #0:27: start 5090.710000, end 5218.254000
    Metadata:
      title           : (28)01:24:50:710
    Chapter #0:28: start 5218.254000, end 5464.250000
    Metadata:
      title           : (29)01:26:58:254
    Chapter #0:29: start 5464.250000, end 5643.679000
    Metadata:
      title           : (30)01:31:04:250
    Chapter #0:30: start 5643.679000, end 5853.180000
    Metadata:
      title           : (31)01:34:03:679
    Chapter #0:31: start 5853.180000, end 6114.817000
    Metadata:
      title           : (32)01:37:33:180
    Chapter #0:32: start 6114.817000, end 6292.995000
    Metadata:
      title           : (33)01:41:54:817
    Chapter #0:33: start 6292.995000, end 6439.808000
    Metadata:
      title           : (34)01:44:52:995
    Chapter #0:34: start 6439.808000, end 6689.766000
    Metadata:
      title           : (35)01:47:19:808
    Chapter #0:35: start 6689.766000, end 7002.745000
    Metadata:
      title           : (36)01:51:29:766
    Chapter #0:36: start 7002.745000, end 7212.413000
    Metadata:
      title           : (37)01:56:42:745
    Chapter #0:37: start 7212.413000, end 7354.972000
    Metadata:
      title           : (38)02:00:12:413
    Chapter #0:38: start 7354.972000, end 7831.907000
    Metadata:
      title           : (39)02:02:34:972
    Chapter #0:39: start 7831.907000, end 7895.095000
    Metadata:
      title           : (40)02:10:31:907
    Chapter #0:40: start 7895.095000, end 7895.178884
    Metadata:
      title           : (41)02:11:35:095
    <strong>Stream #0:0: Video: hevc (Main), yuv420p(tv), 3840x2160, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 48003.07 tbn, 48003
.07 tbc (default)
    Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)
    <span style="color:#33ff33;">Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</span>
    Stream #0:3(spa): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:4(fra): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:5(por): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:6(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s
    Stream #0:7(tha): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:8(ukr): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</strong>
<span style="color:#ff0000;">At least one output file must be specified</span>

D:>

 

執行上面的命令,查看原始文件,發現它有8個音軌!,我們只提取第二個音軌流(上圖標識爲綠色的那個),命令如下所示:

 

[plain] view plain copy print?

  1. ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv -map 0:2 audio_2.wav  
ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv -map 0:2 audio_2.wav

 

14. 多個視頻文件拼接

首先創建一個需要拼接的文件,例如 concat.txt,內容如下:

file 'orig_20160616113303_0.avi'
file 'orig_20160616113303_1.avi'

然後執行如下命令 

 

[plain] view plain copy print?

  1. ffmpeg  -f concat -i concat.txt  -c copy orig_20160616113303_merge.avi  
 ffmpeg  -f concat -i concat.txt  -c copy orig_20160616113303_merge.avi

 

FFMPEG常用參數說明

主要參數:

-i 設定輸入流
-f 設定輸出格式
-ss 開始時間
-formats  查看所有支持的容器格式
-codecs  查看所有編解碼器
-filters      查看所有可用的filter
-pix_fmts 查看所有支持的圖片格式
-sample_fmts 查看所有支持的像素格式
-i input_file 查看媒體文件input_file的信息(注意後面不再接其它參數,例如: ffmpeg -i test.mp4,查看 test.mp4視頻信息)


視頻參數:
-b 設定視頻流量,默認爲200Kbit/s
-r 設定幀速率,默認爲25
-s 設定畫面的寬與高
-aspect 設定畫面的比例
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器


音頻參數:
-ar 設定採樣率
-ac 設定聲音的Channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音頻

 

小結

ffmpeg功能強大,參數配置衆多,最好的方式查看它的命令行幫助文檔,各個參數都有詳細的說明,唯一的遺憾就是沒有例子,對於初入媒體領域的人來說,門檻比較高。不明白的參數,可以多試試,再接合MediaInfo工具查看具體信息,通過VLC或者FFMPEG自帶的 ffplay播放器播放,就容易理解了。

===========================================================================

part 8:

 

 

格式轉換 (將file.avi 轉換成output.flv)

     ffmpeg -i  file.avi   output.flv

       -i 表示輸入文件 

 :現在有個視頻video.avi,有個音頻 audio.mp3,將其合併成output.avi

兩個命令                     ( video2.avi 是中間文件 ,用完可刪)

ffmpeg -i video.avi -vcodec copy -an video2.avi   
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi

 -i 表示輸入文件

  -vcodec copy 表示 force video codec ('copy' to copy stream) 這個不知怎麼譯 ,估計是直接copy 

  -acodec copy   這個說的應該是音頻了   跟上面一樣

-an : 表示  disable audio  估計是audio no 之類的縮寫   表示去掉video.avi 原有的音頻

方法2 好像可以直接指定兩個輸入文件 ,


 
  1. ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi 兩個文件 的順序很重

  2.  

從視頻裏提取聲音(聲音與視頻的分離)

 ffmpeg  -i 人生若只如初見.flv  -vn r.mp3  從flv 文件 中提取聲音並保存爲mp3 格式  

       -vn : 表示忽略視頻 估計是video no 之類的縮寫

 ffmpeg  -i 人生若只如初見.flv  -an  r.flv   只留視頻不留聲音 

    -an : 表示 忽略 聲音 估計是audio no 之類的縮寫

 

從視頻裏提取圖片( )


 
  1. ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg

  2.  
  3. -ss 第8秒處 截一圖

  4.  

 

壓縮mp3 文件

如果你覺得mp3 文件 有點大,想變小一點那麼可以通過-ab 選項改變音頻的比特率 (bitrate)

ffmpeg -i input.mp3 -ab 128 output.mp3    //這裏將比特率設爲128

你可以用file 命令查看一下源文件 的信息

z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo

其中的192 kbps 就是這個東西

mp3中比特率的含義是:在壓縮音頻文件至mp3時,由壓縮軟件所確定數碼文件在播放時每秒傳 送給播放器大小,其單位是:千位/秒;英文的含義是:kbps - = kilobits per second。現在mp3文件的最高數位率是320 kbps。這樣的文件體積很大,每分鐘的音樂超過兩兆字節。如果採用可變比特率(VBR)編碼來生成mp3文件,獲得與320 kbps相當音質,文件的體積會縮小25~50%。請注意:播放時間相同,而歌曲不同,所獲的壓縮mp3文件的一般不相同,這是因爲VBR編碼所生成的 mp3文件的大小不僅僅取決於播放時間的長度,還取決於源音頻文件的其它因素。

 

錄音(要有可用的麥克風,並且如果用alsa 的話,好像得安alsa-oss,重啓) 

 ffmpeg  -f oss -i /dev/dsp   out.avi  (should  hava oss or alsa-oss)

 ffmpeg   -f  alsa -ac 2 -i hw:0, 0  out.avi   (should )

 ffmpeg   -f alsa -ac 2 -i pulse  (should hava PulseAudio)

 

   oss 是linux 下的聲音相關的東西,與alsa 一樣,不過oss 是商業的, 而/dev/dsp 是oss 用到的麥克的設備吧,可以這樣理解

屏幕錄像

ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi 

ffmpeg -f x11grab  -s 320x240  -r 10 -i :0.0+100+200 wheer.avi

:0:0 表示屏幕(個人理解,因爲系統變量$DISPLAY值就是:0.0)  而100,表示距左端100象素,200表示距上端200

-s 設置窗口大小

  -r 10 好像是設置頻率,不懂

ffmpeg -f x11grab -s xga    -qscale 5    -r 10 -i :0.0+0+0 wheer.avi 

-qscale 8 設定畫面質量,值 越小越好

屏幕錄像,同時錄音

ffmpeg -f oss -i /dev/dsp        -f x11grab -r 30 -s 1024x768 -i :0.0  output.mkv

ffmpeg   -ac 2 -f oss  -i  /dev/dsp   -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv

看到這,你會發現這個命令有多強大,

如果我屏幕上打開了一個窗口,我只想錄這個窗口的內容,如何確定這個窗口的座標位置呢

可以用另外一個命令

xwininfo 輸入這個命令後,用鼠標點選目標窗口,

就會出現目標窗口的座標,寬高等一系列信息

Absolute upper-left X:  276
  Absolute upper-left Y:  57
  Relative upper-left X:  2
  Relative upper-left Y:  23
  Width: 742
  Height: 499
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +276+57  -262+57  -262-244  +276-244
  -geometry 80x24+274+34 看到這一行了沒 ()

 

比如根據上面的信息

ffmpeg -f oss  -i  /dev/dsp      -f  x11grab -r 30  -s 1280x752 -i :0.0+0+23  output.avi 
Another thing you can change is the video frame rate (FPS). In the example above we used -r 30 which means capture at 30 FPS. You can change this value to whatever frame rate you want.

這個 -r 30 應該是每秒鐘取樣幾次,估計是一秒截三十次屏,

切頭去尾

 ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3  output.mp3 

只要 從第10秒開始截取,共截取1:22時長的內容

視頻文件的連接,如兩個flv 文件 連接成一

 

好像必須先將文件 轉成mpg ,dv 等格式的文件後才能進行連接

  • 連接複數的AVI影片檔之範例(在此範例中須一度暫時將AVI檔轉換成MPEG-1檔(MPEG-1, MPEG-2 PS, DV格式亦可連接))

 
  1. ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20

  2.  
  3. ffmpeg -i input2.avi -sameq inputfile_02.mpg -r 20

  4.  
  5. cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg

  6.  
  7. ffmpeg -i inputfile_all.mpg -sameq outputfile.avi

  8.  
  9. 上面將 input1.avi input2.avi 合併成outputfile.avi

  10.  
  11. -sameq 表示 相同的質量(可能指的是畫面,不太清楚)

  12.  
  13. -r 指頻率

  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. =====================================================================下面是wiki 上給的幾個例子

參數

FFmpeg可使用衆多參數,參數內容會根據ffmpeg版本而有差異,使用前建議先參考參數及編解碼器的敘述。此外,參數明細可用 ffmpeg -h 顯示;編解碼器名稱等明細可用 ffmpeg -formats 顯示。

下列爲較常使用的參數。

[編輯 ] 主要參數

  • -i 設定輸入檔名。
  • -f 設定輸出格式。
  • -y 若輸出檔案已存在時則覆蓋檔案。
  • -fs 超過指定的檔案大小時則結束轉換。
  • -ss 從指定時間開始轉換。
  • -title 設定標題。
  • -timestamp 設定時間戳。
  • -vsync 增減Frame使影音同步。

[編輯 ] 影像參數

  • -b 設定影像流量,默認爲200Kbit/秒。( 單位請參照下方注意事項 )
  • -r 設定FrameRate值,默認爲25。
  • -s 設定畫面的寬與高。
  • -aspect 設定畫面的比例。
  • -vn 不處理影像,於僅針對聲音做處理時使用。
  • -vcodec 設定影像影像編解碼器,未設定時則使用與輸入檔案相同之編解碼器。

[編輯 ] 聲音參數

  • -ab 設定每Channel (最近的SVN 版爲所有Channel的總合)的流量。( 單位 請參照下方注意事項 )
  • -ar 設定採樣率。
  • -ac 設定聲音的Channel數。
  • -acodec 設定聲音編解碼器,未設定時與影像相同,使用與輸入檔案相同之編解碼器。
  • -an 不處理聲音,於僅針對影像做處理時使用。
  • -vol 設定音量大小,256爲標準音量。(要設定成兩倍音量時則輸入512,依此類推。)

[編輯 ] 注意事項

  • 以-b及ab參數設定流量時,根據使用的ffmpeg版本,須注意單位會有kbits/sec與bits/sec的不同。(可用ffmpeg -h顯示說明來確認單位。)

例如,單位爲bits/sec的情況時,欲指定流量64kbps時需輸入‘ -ab 64k ’;單位爲kbits/sec的情況時則需輸入‘ -ab 64 ’。

  • 以-acodec及-vcodec所指定的編解碼器名稱,會根據使用的ffmpeg版本而有所不同。例如使用AAC編解碼器時,會有輸入aac與 libfaac的情況。此外,編解碼器有分爲僅供解碼時使用與僅供編碼時使用,因此一定要利用ffmpeg -formats 確 認輸入的編解碼器是否能運作。

[編輯 ] 範例

  • 將MPEG-1影片轉換成MPEG-4格式之範例

 
  1. ffmpeg -i inputfile.mpg -f mp4 -acodec libfaac -vcodec mpeg4 -b 256k -ab 64k outputfile.mp4

  2.  
  • 將MP3聲音轉換成MPEG-4格式之範例

 
  1. ffmpeg -i inputfile.mp3 -f mp4 -acodec libaac -vn -ab 64k outputfile.mp4

  2.  
  • 將DVD的VOB檔轉換成VideoCD格式的MPEG-1檔之範例
ffmpeg -i inputfile.vob -f mpeg -acodec mp2 -vcodec mpeg1video -s 352x240 -b 1152k -ab 128k outputfile.mpg
  • 將AVI影片轉換成H.264格式的M4V檔之範例
  • ffmpeg -i inputfile.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k outputfile.m4v
  • 將任何影片轉換成東芝REGZA可辨識的MPEG2格式之範例
  • ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg
  • 連接複數的AVI影片檔之範例(在此範例中須一度暫時將AVI檔轉換成MPEG-1檔(MPEG-1, MPEG-2 PSDV格式亦可連接)、

 
  1. ffmpeg -i input1.avi -sameq inputfile_01.mpg

  2.  
  3. ffmpeg -i input2.avi -sameq inputfile_02.mpg

  4.  
  5. cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg

  6.  
  7. ffmpeg -i inputfile_all.mpg -sameq outputfile.avi

  8.  
  9. =============================================================================

  10. http://ffmpeg.org/ffmpeg-doc.html

  11.  
  12. http://ubuntuforums.org/showthread.php?t=1392026

  13. 同時搞明白的一些問題在alsa 體系中聲卡(也可能是麥克風,)叫hw:0,0 而在oss 體系中叫/dev/dsp (用詞可能不太專業)  Linux在安裝了聲卡後,會有一些設備文件生成。採集數字樣本的/dev/dsp文件,針對混音器的/dev/mixer文件,用於音序器的/dev/sequencer,/dev/audio文件一個基於兼容性考慮的聲音設備文件。只要向dev/audio中輸入wav文件就能發出聲音。而對/dev/dsp文件讀取就能得到WAV文件格式的聲音文件。

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

part 9:

mpegts 選項

mpegts混合器選項有:

  • -mpegts_original_network_id number

    設置original_network_id (默認0x0001). 在DVB是一個唯一的網絡標識,它用於標識特殊的服務(通過Original_Network_ID和Transport_Stream_ID)

  • -mpegts_transport_stream_id number

    設置transport_stream_id (默認0x0001).在DVB是一個傳輸的標識

  • -mpegts_service_id number

    設置service_id (默認0x0001),在DVB作爲程序標識 DVB.

  • -mpegts_service_type number

    設置程序service_type (默認digital_tv), 參考下面預設值

  • -mpegts_pmt_start_pid number

    對PMT設置第一個PID (默認 0x1000,最大0x1f00).

  • -mpegts_start_pid number

    對數據包設置第一個PID(默認0x0100,最大0x0f00).

  • -mpegts_m2ts_mode number

    如果設置爲1則允許m2ts模式,默認爲-1,表示禁止 value is -1 which disables m2ts mode.

  • -muxrate number

    設置內容爲混合碼率(默認VBR)

  • -pcr_period numer

    覆蓋默認的PCR重傳時間(默認20ms),如果muxrate被設置將會被忽略

  • -pes_payload_size number

    以單位字節設置最小PES播放加載包大小

  • -mpegts_flags flags

    設置一個標誌(後面介紹).

  • -mpegts_copyts number

    如果設置爲1則保留原始時間戳。默認爲-1,將從0開始更新時間戳

  • -tables_version number

    設置PAT, PMT 和SDT版本 (默認0,範圍0-31) 。這個選項允許更新流結構, 以便用戶可以檢測到更改。比如在打開AVFormatContext (API使用時)或重啓FFMPEG來週期性改變tables_version時:

    ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
    ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
    ... ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
    ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
    ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
    ...

選項mpegts_service_type接受如下值:

  • hex_value

    一個16進制值,範圍0x01到0xff,定義在 ETSI 300 468.

  • digital_tv

    數字TV服務

  • digital_radio

    數字廣播服務

  • teletext

    圖文電視服務

  • advanced_codec_digital_radio

    高級編碼數字廣播服務

  • mpeg2_digital_hdtv

    MPEG2數字HDTV服務

  • advanced_codec_digital_sdtv

    高級編碼數字SDTV服務

  • advanced_codec_digital_hdtv

    高級編碼數字HDTV服務

選項mpegts_flags可以設置如下標誌:

  • resend_headers

    寫下一個包前反彈PAT/PMT

  • latm

    對AAC編碼使用LATM打包

mpegts例子

 

ffmpeg -i file.mpg -c copy \

-mpegts_original_network_id 0x1122 \

-mpegts_transport_stream_id 0x3344 \

-mpegts_service_id 0x5566 \

-mpegts_pmt_start_pid 0x1500 \

-mpegts_start_pid 0x150 \

-metadata service_provider="Some provider" \

-metadata service_name="Some Channel" \

-y out.ts

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

part 10: (轉自 http://xdsnet.github.io/other-doc-cn-ffmpeg/index.html?name=ffmpeg-doc-cn-22)

ffmpeg 命令行

分類: Windows平臺

2014-12-16 22:15:25

 


爲一朋友搞個工具,用到ffmpeg . 做個記錄如下,

ffmpeg 功能很是強大,視頻相關基本權威了。

http://www.ffmpeg.org/ffmpeg-formats.html#mpegts
http://www.ffmpeg.org/ffprobe.html#Stream-specifiers-1



ffmpeg.exe -i d:\1.m2t -streamid 0:100 -codec copy d:\1-cpy.m2t

修改 stream 0的 id爲100  編解碼不變codec copy   生成文件1-cpy.m2t



ffmpeg -i d:\1.m2t  -codec copy -mpegts_pmt_start_pid 0x250 -mpegts_start_pid 0x251 d:\1-cpy.m2t
修改pmt_pid=0x250 和pcr_pid=0x251



ffprobe -show_format -show_programs d:\1.m2t

顯示 format program 相關信息



ffprobe -show_entries program=program_num,pmt_pid,pcr_pid:stream=index,id,codec_type  -i d:\1.m2t  -hide_banner

顯法prorgram 和stream 中的部分字段。hide_banner不顯示庫包文件相關版本信息。

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

part 11:

22 混合器(複用器)

複用器是ffmpeg中負責寫入多媒體流到文件中分區的可配置組件。

默認編譯時自動允許被支持的混合器。你可以使用--list-muxers作爲參數運行編譯配置腳本以瞭解當前支持的所有混合器。

編譯也可以同--disable-muxers禁用所有的混合器,或者通過--enable-muxer=MUXER / --disable-muxer=MUXER打開/關閉指定的混合器

在ff*工具集中附加-formats也可以瞭解到混合器列表。

下面將詳細描述有效的混合器直播:

aiff

Audio Interchange File Format(aif)密碼器

aiff選項

接受下面選項:

  • write_id3v2

    如果設爲1則允許ID3v2標籤,否則0禁止(默認)

  • id3v2_version

    選擇id3v2版本

crc值

CRC (Cyclic Redundancy Check)測試格式

這個混合器通過所有輸入的音頻和視頻幀計算(混合)Adler-32 CRC。默認音頻會被轉換爲16bit符號原始音頻,視頻被解壓爲原始視頻再進行這個計算。

輸出會有一個形如CRC=0xCRC的一行,其中CRC的值是由16進制以0補足的8位數字,它由所有幀解碼計算的。

參考[framecrc] 混合器

crc值計算例子

計算一個crc放置到out.crc:


 

ffmpeg -i INPUT -f crc out.crc

計算crc並直接輸出到標準輸出設備:


 

ffmpeg -i INPUT -f crc -

還可以選擇對特定音頻、視頻編碼數據計算crc,例如計算輸入文件音頻轉換成PCM 8bit無符號數據格式,視頻轉換成MPEG-2 的CRC:


 

ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -

framecrc

每個數據包的CRC(循環冗餘校驗)測試格式。

它將對每個數據包做Adler-32 CRC計算並輸出。默認音頻被轉換成16bit符號原始音頻,視頻被轉換成原始視頻再進行CRC計算。

輸出是針對每個音頻/視頻數據包都有一行如下格式的信息:


 

stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC

其中CRC值是16進制,以0補足的8位數字值。

framecrc例子

對INPUT輸入作每數據包CRC計算,輸出到out.crc:


 

ffmpeg -i INPUT -f framecrc out.crc

直接把計算結果輸出到標準輸出設備:


 

ffmpeg -i INPUT -f framecrc -

通過ffmpeg,還可以選擇輸出特定音頻和視頻格式對應的幀CRC值,例如音頻轉換成PCM8bit無符號編碼,視頻爲mpeg2計算幀CRC校驗值:


 

ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -

參看[crc]混合器

framemd5

每個數據包MD5校驗值

計算輸出每個數據包MD5校驗值,默認音頻被轉換成16bit符號原始音頻,視頻被轉換成原始視頻再進行MD5計算

每個數據包計算對應輸出一行如下格式數據:


 

stream_index, packet_dts, packet_pts, packet_duration, packet_size, MD5

其中MD5就是計算出的MD5 哈希值

framemd5例子

計算INPUT輸入的幀md5值,其中音頻被轉換成16bit符號原始音頻數據,視頻被轉換成原始視頻數據,輸出到out.md5


 

ffmpeg -i INPUT -f framemd5 out.md5

直接輸出到標準輸出設備:


 

ffmpeg -i INPUT -f framemd5 -

參考[md5]混合器部分

gif

Animated GIF(動畫GIF)混合器

它接受如下選項:

  • loop

    設置循環次數,-1表示不循環,0表示一直循環(默認值)

  • final_delay

    強制最後一幀延遲 (以釐秒爲單位——centiseconds) ,默認爲1,這是一個對於循環gif的特殊設定,它爲最後一幀播放到新開始播放設置一個特殊的值,比如你可能希望有一個停頓的感覺。

    例如像循環10次,每次重新播放前停頓5秒,則:

    ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif

注意1如果你想提取幀到指定的GIF文件序列,你可能需要image2混合器


 

ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"

注意2Gif格式有一個非常小的時基:兩幀之間的間隔不可小於百分之一秒。

hls

Apple HTTP 直播流混合器,它根據HTTP直播流(HLS)規範進行MPEG-TS分割

它創建一個播放列表文件,包括1個或者多個分段文件,輸出文件爲指定的播放列表文件。

默認混合器對每段創建一個文件,這些文件有相同的基於播放列表的文件名,段索引數和.tx擴展名

例如,轉一個輸入文件:


 

ffmpeg -i in.nut out.m3u8

這將根據產品播放列表文件out.m3u8產生分段文件:out0.ts out1.ts out2.ts 等等

參考[segment]混合器,它提供了更多可用於HTL分割的常規處理和修正介紹

hls選項

這個混合器支持如下選項

  • hls_time seconds

    設置段長度,單位秒,默認爲2

  • hls_list_size size

    設置播放列表中字段最大數。如果爲0,則包含所有分段。默認爲5

  • hls_ts_options options_list

    設置輸出格式選項,使用'-'分割的key=value參數對,如果包括特殊字符需要被轉義處理

  • hls_wrap wrap

    一種循環機制,設置數量後以0-設定數形成一個環依次循環使用作爲輸出段號.爲0表示不限制, 默認爲0

    選項可避免磁盤被多個段文件填滿,並限制寫入磁盤的最大文件數

  • start_number number

    設置播放列表中最先播放的索引號,默認 0.

  • hls_allow_cache allowcache

    設置客戶端是否:可能(1) 或 必須不 (0) 緩衝媒體段

  • hls_base_url baseurl

    對每個列表中的記錄添加一個基本的URL,一般用於採用相對路徑描述的列表

    注意列表序號必須是每段獨特的,不可分割的文件名和序列號,序列號是可循環的,則可能會引起困惑,例如hls_wrap選項設置了

  • hls_segment_filename filename

    設置段文件名。除非hls_flags single_file被設置,設置這個文件名可以用於段命名格式化(依據段序數):

    ffmpeg in.nut -hls_segment_filename 'file%03d.ts' out.m3u8

    這個例子中,段文件會輸出爲: file000.ts, file001.ts, file002.ts, 等等,而不是默認的out0.ts out1.ts out2.ts 等等

  • hls_key_info_file key_info_file

    使用key_info_file對段進行加密。key_info_file 中的第一行指定一個URI,是寫入播放列表的,這個key URL被用於存放播放期訪問的加密密鑰。第二行指定用於加密過程中的key文件路徑。key文件作爲一個單一排列的16進制數組以二進制格式數據讀入。可選的第三行則指定初始化向量(IV,一個十六進制字符串用於代替部分序列(默認)進行加密)。改變key_info_file將導致段加密採用新的key/IV 以及播放列表中任意條目採用新的 URI/IV

    key_info_file 格式:

    key URI key file path IV (optional)

    key URIs 例子:

    http://server/file.key /path/to/file.key file.key

    key文件路徑例子:

    file.key /path/to/file.key

    IV例子:

    0123456789ABCDEF0123456789ABCDEF

    完整key_info_file 示例:

    http://server/file.key /path/to/file.key 0123456789ABCDEF0123456789ABCDEF

    shell腳本例子:

    
     

    #!/bin/sh

    BASE_URL=${1:-'.'}

    openssl rand 16 > file.key

    echo $BASE_URL/file.key > file.keyinfo

    echo file.key >> file.keyinfo

    echo $(openssl rand -hex 16) >> file.keyinfo

    ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \

    -hls_key_info_file file.keyinfo out.m3u8

  • hls_flags single_file

    如果這個標記被設置,則會把所有段存儲到一個MPEG-TS文件中,且在播放列表中使用字節範圍。 HLS播放列表在版本4中支持這種方法:

    ffmpeg -i in.nut -hls_flags single_file out.m3u8

    這裏所有的輸出都放置在out.ts中了

  • hls_flags delete_segments

    在播放的段已經過了持續時間後就刪除掉對應的文件。

ico

ICO文件混合器

微軟ICON(ICO)文件格式有一些限制需要注意:

  • 每個方向不超過256像素
  • 僅BMP和PNG圖像可以被存儲
  • 如果是BMP圖像,必須有如下像素格式:

    bmp位深度 ffmpeg像素格式
    1bit pal8
    4bit pal8
    8bit pal8
    16bit rgb555le
    24bit bgr24
    32bit bgra

  • 如果是BMP圖像,必須有 BITMAPINFOHEADER DIB 頭
  • 如果是PNG圖像,必須是rgba像素格式

image2

圖像文件混合器

它可以把視頻幀重新混合爲圖像文件

輸出文件按模板指定,可以設置成爲一個序列數文件。模板中的"%d" 或者 "%0Nd"用於指定序列,其中"%0Nd"表示N位數字,以0補齊。如果文件名中有“%”需要以“%%”轉義的形式指定。

如果模板中包含了"%d"或者"%0Nd"則文件名從1計數輸出序列

模板可以包含一個後綴用來自動確定圖像文件格式

例如模板"img-%03d.bmp"將使得輸出爲img-001.bmp, img-002.bmp, ...,img-010.bm 等等。而模板"img%%-%d.jpg"則生成img%-1.jpg, img%-2.jpg, ..., img%-10.jpg,等等

image2例子

把輸入視頻圖像幀生成爲img-001.jpeg, img-002.jpeg, ...,


 

ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'

注意ffmpeg如果沒有通過-f指定輸出文件格式,image2混合器將自動被選擇,所以前面的等效於


 

ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'

如果strfime選項允許你導出按時間/日期信息命名的文件 "%Y-%m-%d_%H-%M-%S" 模板,在strftime()的文檔中瞭解相關語法

例如:


 

ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"

image2選項

  • start_number

    設置開始序列的數字,默認爲0

  • update

    如果設置爲1,文件名直接作爲唯一文件名,而沒有模板。即相應的文件被不斷改寫爲新的圖像。默認爲0

  • strftime

    如果設置爲1,可以讓輸出文件支持strftime()提供的日期格式,默認爲0

這個圖像混合器支持.Y.U.V圖像文件格式,這種格式將根據每幀輸出3個文件,對於每個YUV420P壓縮,對於讀或者寫這種文件格式,只需要指定.Y文件即可,混合器會自動打開需要的.U和.V文件

matroska

Matroska內容混合器

混合輸出matroska和webm內容

matroska元數據

混合器需要指定一些必要元數據

  • title

    設置單個軌道的標題名 language

    以Matroska語言字段指定語言

    語言可是3個字符(依ISO-639-2 (ISO 639-2/B)) (例如 "fre" 表示法語——French),或者語言混合國家/地區代碼,(like "fre-ca" 表示加拿大法語——Canadian French). stereo_mode

    設置3D視頻兩個視圖在單個視頻軌道播放時的佈局規則

    允許如下值:

    ‘mono’

    
     

    video不是雙路的

    ‘left_right’

    
     

    兩路分別一端,即左眼看左視圖,右眼看右視圖

    ‘bottom_top’

    
     

    上下佈局,左眼看下視圖,右眼看上視圖

    ‘top_bottom’

    
     

    與上一個相反,左眼看上,右眼看下

    ‘checkerboard_rl’

    
     

    根據序列確認,左眼看第一個

    ‘checkerboard_lr’

    
     

    根據序列確認,右眼看第一個

    ‘row_interleaved_rl’

    
     

    根據行序列確認,右眼看第一行

    ‘row_interleaved_lr’

    
     

    根據行序列確認,左眼看第一行,

    ‘col_interleaved_rl’

    
     

    列序列確認,右眼第一列

    ‘col_interleaved_lr’

    
     

    列序列確認,左眼第一列

    ‘anaglyph_cyan_red’

    
     

    都在一副圖中,通過顏色濾鏡過濾red-cyan filters

    ‘right_left’

    
     

    右眼看左圖

    ‘anaglyph_green_magenta’

    
     

    混合圖,通過green-magenta濾鏡看

    ‘block_lr’

    
     

    間隔塊,左眼先看

    ‘block_rl’

    
     

    間隔塊,右眼先看

例如,對於3DWebM影片,可以由下面命令建立:


 

ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm

matroska選項

支持如下選項:

  • reserve_index_space

    默認對於定位索引(可以被Matoska調用)將寫到文件的末尾部分,因爲一開始不知道需要多少空間放置索引。但這將導致流式播放時定位特別慢(因爲不知道定位索引),這個選項將把索引放置到文件的開始。

    如果這個選項設置爲非0值,混合器將預先在頭部放置一個用於寫入索引的空間,但如果空間無效則將混合失敗。一個較安全的值是大約1小時50KB。

    注意這些尋址線索僅當輸出文件是可尋址且選項設置了有效值時寫入。

md5

MD5檢測格式

將計算輸出一個MD5值,對於所有的音視頻幀。默認音頻幀轉換爲有符號16bit原始音頻,視頻轉換爲原始視頻來計算。

輸出是一個MD5=MD5 格式,其中MD5就是計算出的值。

例如:


 

ffmpeg -i INPUT -f md5 out.md5

也可以輸出到標準輸出設備


 

ffmpeg -i INPUT -f md5 -

參考[framemd5]混合器

mov,mp4,ismv

MOV/MP4/ISMV (Smooth Streaming——平滑流)混合器

MOV/MP4/ISMV混合器支持零碎文件(指數據的組織形式)。通常MOV/MP4文件把所有的元數據存儲在文件的一個位置中(這是不零碎的數據組織形式,通常在末尾,也可以移動到起始以更好的支持隨機定位播放,比如使用qt-faststart工具,並添加movflags快速啓動標誌)。這樣一個零碎文件包含了很多片段,其中數據包和元數據是存儲在一起的。這樣零碎數據組織的文件在解碼到寫中斷(普通的MOV/MP4則不能解碼了,因爲可能缺少元數據)時也能正常解碼,而且這種方式要求更少的內存就可以寫很大的文件(因爲普通形式的MOV/MP4需要收集所有的信息才能最終完成元數據集中存儲,則這一過程中這些數據一直需要緩存在內存中,直到編碼完成,元數據完成存儲),這是一個優勢。缺點是這種組織數據的格式不太通用(很多程序不支持)

mov,mp4,ismv選項

零碎形式也支持AVOtions,它可以定義如何切分文件到零碎片段中:

  • -moov_size bytes

    在文件開頭設置預留空間用於存儲moov原子數據(一些元數據),而不是把這些數據存儲在文件尾部。如果預設的空間不夠,將導致混合失敗

  • -movflags frag_keyframe

    在每個關鍵幀都開始一個新的碎片

  • -frag_duration duration

    每duration microseconds時長就創建一個碎片

  • -frag_size size

    碎片按size字節(這是一個上限)進行劃分

  • -movflags frag_custom

    允許調用者手動切片,通過調用av_write_frame(ctx, NULL) 在當前位置寫入一個片段(它僅能與libavformat庫集成,在ffmpeg中不支持)

  • -min_frag_duration duration

    如果少於duration microseconds就不單獨創建片段

    如果指定了多個條件,當一個條件滿足是,片段被切分出來。例外的是-min_frag_duration, 它在任何其它條件滿足時都使用來進行判斷

此外,輸出還可以通過一些其他選項進行調整:

  • -movflags empty_moov

    寫入一個空的moov atom到文件開始,而沒有任何樣品描述。一般來說,一個mdat/moov在普通MOV/MP4文件開始時寫入,只包括了很少的內容,設置了這個選項將沒有初始的moov atom,而僅是一個描述了軌道,但沒有持續時間的moov atom。

    這個選項在ismv文件中隱式設定

  • -movflags separate_moof

    爲每個軌道寫獨立的moof(電影片段)atom。通常,追蹤所有分組是寫在一個moof atom中,而通過這個選項,混合器將對每個軌道單獨寫moof/MDAT,以方便軌道間隔離

    這個選項在ismv文件中隱式設定

  • -movflags faststart

    再次移動index(moov atom)到文件開始位置。這個選項可以與其他選項一起工作,除了碎片化輸出模式。默認情況是不允許

  • -movflags rtphint

    添加RTP打標軌道到輸出文件中

  • -movflags disable_chpl

    禁止Nero章標籤(chpl atom)。通常,Nero章標籤和QuickTime章標籤都被寫入到文件中,通過這個選項,可以強制只輸出QuickTime標籤。Nero章標籤可能導致文件在某些程序處理標籤時失敗,例如 mp3Tag 2.61a 和 iTunes 11.3,可能其他版本也會受到影響

  • -movflags omit_tfhd_offset

    在thfd atom(原子數據)中不寫入任何絕對base_data_offset。這將避免片段文件/流中的絕對定位綁定

  • -movflags default_base_moof

    類似omit_tfhd_offset,這個標誌避免在tfhd atom中寫絕對base_data_offset,而是用新的default-base-is-moof,這個標誌定義在14496-12:2012 。它會使片段在某些情況下更容易被解析(避免通過在前一軌道片段基礎上隱式進行追蹤計算碎片位置)

mov,mp4,ismv例子

平滑流內容可以通過IIS進行發佈,例如:


 

ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)

mp3

MP3混合器通過下面選項寫原始的MP3流:

  • 一個ID3v2元數據頭會寫在開始處(默認),支持版本2.3和2.4, id3v2_version私有選項可以使用(3或4),如果設置id3v2_version爲0表示禁用ID3v2頭

    混合器還支持附加圖片(APIC幀)到ID3v2頭。這個圖片以單一分組視頻流的形式提供給混合器。可以有任意數量的這種流,每個都是單獨的APIC幀。對於APIC幀的描述和圖片類型要求,以及流元數據標題及內容提交者 等參考http://id3.org/id3v2.4.0-frames

    注意APIC幀必須寫在開始的地方,所以混合器會緩衝音頻幀直到所有的圖片已經獲取完成。因此建議儘快提供圖片,以避免過度緩衝。

  • Xing/LAME幀正確放置在ID3v2頭之後(如果提供)。它也是默認的,但僅僅在輸出是可定位情況下寫入。write_xing私有選項可以用來禁用它。這些幀中包括的變量信息通常用於解碼器,例如音頻持續時間或者編碼延遲

  • 一個遺留的ID3v1標籤放置在文件的末尾(默認禁止),它可以通過write_id3v1私有選項來啓用,但其意義非常有限,所以不建議採用

一些例子:

  • 寫一個mp3,有ID3v2.3 頭和ID3v1的末尾標籤

    ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3

  • 通過map附加圖片到音頻:

    ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3

  • 寫入一個"乾淨"的MP3,而沒有額外特性

    ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3

mpegts

MPEG傳輸流混合器

這個混合器聲明在 ISO 13818-1 和ETSI EN 300 468的部分內容中.

對於通用的元數據設置service_providerservice_name,如果沒有特別指明,則默認service_provider爲"FFmpeg",service_name爲"Service01"

mpegts 選項

mpegts混合器選項有:

  • -mpegts_original_network_id number

    設置original_network_id (默認0x0001). 在DVB是一個唯一的網絡標識,它用於標識特殊的服務(通過Original_Network_ID和Transport_Stream_ID)

  • -mpegts_transport_stream_id number

    設置transport_stream_id (默認0x0001).在DVB是一個傳輸的標識

  • -mpegts_service_id number

    設置service_id (默認0x0001),在DVB作爲程序標識 DVB.

  • -mpegts_service_type number

    設置程序service_type (默認digital_tv), 參考下面預設值

  • -mpegts_pmt_start_pid number

    對PMT設置第一個PID (默認 0x1000,最大0x1f00).

  • -mpegts_start_pid number

    對數據包設置第一個PID(默認0x0100,最大0x0f00).

  • -mpegts_m2ts_mode number

    如果設置爲1則允許m2ts模式,默認爲-1,表示禁止 value is -1 which disables m2ts mode.

  • -muxrate number

    設置內容爲混合碼率(默認VBR)

  • -pcr_period numer

    覆蓋默認的PCR重傳時間(默認20ms),如果muxrate被設置將會被忽略

  • -pes_payload_size number

    以單位字節設置最小PES播放加載包大小

  • -mpegts_flags flags

    設置一個標誌(後面介紹).

  • -mpegts_copyts number

    如果設置爲1則保留原始時間戳。默認爲-1,將從0開始更新時間戳

  • -tables_version number

    設置PAT, PMT 和SDT版本 (默認0,範圍0-31) 。這個選項允許更新流結構, 以便用戶可以檢測到更改。比如在打開AVFormatContext (API使用時)或重啓FFMPEG來週期性改變tables_version時:

    ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
    ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
    ... ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
    ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
    ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
    ...

選項mpegts_service_type接受如下值:

  • hex_value

    一個16進制值,範圍0x01到0xff,定義在 ETSI 300 468.

  • digital_tv

    數字TV服務

  • digital_radio

    數字廣播服務

  • teletext

    圖文電視服務

  • advanced_codec_digital_radio

    高級編碼數字廣播服務

  • mpeg2_digital_hdtv

    MPEG2數字HDTV服務

  • advanced_codec_digital_sdtv

    高級編碼數字SDTV服務

  • advanced_codec_digital_hdtv

    高級編碼數字HDTV服務

選項mpegts_flags可以設置如下標誌:

  • resend_headers

    寫下一個包前反彈PAT/PMT

  • latm

    對AAC編碼使用LATM打包

mpegts例子


 

ffmpeg -i file.mpg -c copy \

-mpegts_original_network_id 0x1122 \

-mpegts_transport_stream_id 0x3344 \

-mpegts_service_id 0x5566 \

-mpegts_pmt_start_pid 0x1500 \

-mpegts_start_pid 0x150 \

-metadata service_provider="Some provider" \

-metadata service_name="Some Channel" \

-y out.ts

null

Null混合器

這個混合器將不產生任何輸出文件,通常用於測試和基準檢測

例如要檢測一個解碼器,你可以使用:


 

ffmpeg -benchmark -i INPUT -f null out.null

注意前面的命令行並不讀寫out.null,僅僅是因爲ffmpeg語法要求必須有個輸出

等效的,你可以採用:


 

ffmpeg -benchmark -i INPUT -f null -

nut

  • -syncpoints flags

    利用nut改變同步點:

    • default:默認採用低開銷的定位模式。沒有不使用同步點的,但可減少開銷,只是流是不可定位的。

    • none:一般不建議採用這個選項,因爲它導致文件是損壞敏感的(稍微破壞就不能正常解碼了),且不可定位。一般同步點開銷是很小以至於可以忽略的。注意-write_index 0可用於禁止所有增長的數據表,允許重複使用有效的內存,而沒有這些缺點。

    • timestamped:時間戳字段擴展來與時鐘同步。

      nonetimestamped還處於試驗階段

  • -write_index bool

    在最後寫索引,這是寫索引的默認值

    ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor

ogg

Ogg內容混合器

  • -page_duration duration

    首選頁面持續時間(其實是定位點間隔),單位microseconds。混合器將嘗試按設定時間創建頁面。這允許用戶在定位和容器粒度開銷間進行平衡。默認1秒。如果設爲0, 將填充所有字段,使索引數據很大。在大多數情況下,設爲1將使得每個頁面1個數據包,且可以有一個很小的定位粒度,但將產生額外的容器開銷(文件變大)

  • -serial_offset value

    用於設置流序號的一些值。設置來不同且足夠大,可以保證產生的ogg文件可以安全的被鎖住

segment, stream_segment, ssegment

基本流分段

混合器將輸出流到指定的文件(根據最接近的持續時間分段)。輸出文件名模板可以採用類似與[image2]的方式,或者使用strftime模板(如果strftime選項被允許)

stream_segment是用於流式輸出格式的混合器變種,例如不需要全局頭,並要求諸如MPEG傳輸流分段輸出的情況。ssegmentstream_segment的別名。

每個片段都開始於所選流的關鍵幀,這是通過reference_stream選項設置的

注意如果你想精確分割視頻文件,你需要準確輸入按關鍵幀整數倍對應的預期分割器,或者指定混合器按新片段必須是關鍵幀開始。

分段混合器對於固定幀率的視頻有更好的工作表現

或者它可以生成一個創建段的列表,這需要通過segment_list選項設置,列表的類型由segment_list_type選項指定。在段列表輸入一個文件名被默認爲相應段文件的基本名稱。

參看[hls]混合器,其提供更多關於HLS分段的特定實現

segment, stream_segment, ssegment選項

segment混合器器支持如下選項:

  • reference_stream specifier

    由字符串指定參考流,如果設置爲auto將自動選擇參考流。否則必須指定一個流(參看 流說明符 章節)作爲參考流。默認爲auto

  • segment_format format

    覆蓋內容自身格式。默認根據文件擴展名檢測(猜測)

  • segment_format_options options_list

    使用“:”分隔的key=value列表作爲選項參數以一次定義多個選項,其中值如果包含“:”等特殊符號需進行轉義

  • segment_list name

    指定生成文件的名字列表。如果不指定將沒有列表文件生成。

  • segment_list_flags flags

    設置影響生成段序列的標誌

    可以有下面的標誌:

    • ‘cache’

      允許緩存(只能用於M3U8列表文件).

    • ‘live’

      允許直播友好文件生成

  • segment_list_type type

    選擇列格式Select the listing format.

    flat使用簡單的 flat列表單元
    hls 使用類似m3u8的結構

  • segment_list_size size

    當列表文件包含了指定個數段後更新文件,如果爲0則列表文件會包含所有的段,默認爲0

  • segment_list_entry_prefix prefix

    對每條記錄添加一個前導修飾。常用於生成絕對路徑。默認沒有前導添加

    下面的值被允許:

    • ‘flat’

      flat列表生成段,每行一個段

    • ‘csv, ext’

      按列表生成段,每行一段,每行按如下格式(逗號進行分割),:

      segment_filename,segment_start_time,segment_end_time

      segment_filename是輸出文件名字,混合器根據提供的模板產生輸出文件名(參考 RFC4180)

      segment_start_timesegment_end_time指定段開始和結束時間,單位秒

      文件列表如果以 ".csv" 或 ".ext"作爲擴展名,將自動匹配這個列表格式

      ‘ext’是對不喜歡 ‘csv’的替代

    • ‘ffconcat’

      分析ffconcat文件生成段。 file for the created segments. The resulting file can be read using the FFmpeg concat demuxer.

      列表文件以".ffcat"或".ffconcat"作爲擴展名時會自動選擇這個格式

    • ‘m3u8’

      分析M3U8的文件,版本3, 符合http://tools.ietf.org/id/draft-pantos-http-live-streaming

      如果列表文件有".m3u8"擴展名將自動選擇這個格式

      如果不指定就從文件擴展名中進行猜測

  • segment_time time

    設置段持續時間,這個值必須指定,默認爲2,參考segment_times選項.

    注意劃分可能不太精確,除非強制到流中關鍵幀間隔時間。參考下面的例子

  • segment_atclocktime 1|0

    如果設置爲"1",將從00:00開始計時,利用segment_time爲間隔劃分出多個段

    例如如果segment_time設置爲"900",這個選項將在12:00、12:15, 12:30等時間點創建 文件

    默認爲"0".

  • segment_time_delta delta

    指定一個時間作爲段開始時間, 其表示爲一個時間規範, 默認爲"0".

    delta被指定,關鍵幀將開始一個新的段以使PTS滿足如下關係:

    PTS >= start_time - time_delta

    這個選項通常用來劃分視頻內容,其總是在GOP邊界劃分,它在指定點前找到一個關鍵幀來劃分

    它可以結合ffmpeg的force_key_frames選項,通過force_key_frames可以強制指定一個時間點的是關鍵幀而不是自動計算。因爲四捨五入的原因關鍵幀時間點可能不是很精確,而可能在設置的時間點之前。對於恆定幀率的視頻,在實際值和依force_key_frames設定值間最壞有1/(2*frame_rate)的差值

  • segment_times times

    指定一個劃分點的列表。列表是逗號分隔的升序列表,每個是持續時間。也可以參考segment_time選項

  • segment_frames frames

    指定劃分視頻幀的序號列表。列表以逗號分隔的升序列表

    這個選項指定一個新段開始於參考流關鍵幀和序列(從0開始),下個值則需要表明下一個段切分點

  • segment_wrap limit

    環形索引限制

  • segment_start_number number

    設置片段開始序號,默認爲0

  • strftime 1|0

    定義是否使用strftime功能來產生新段。如果設置了,輸出段名需要依模板由strftime生成,默認爲0.

  • break_non_keyframes 1|0

    如果設置爲允許,將允許段在非關鍵幀點切分。這將改善一下關鍵幀間隔不一致的播放,但會產生很多奇怪的問題。默認爲0

  • reset_timestamps 1|0

    在每個段都重新開始時間戳。所以每個段都有接近於0的時間戳。這有利於片段的播放,但很多混合器/編碼器不支持, 默認爲0

  • initial_offset offset

    指定時間戳抵消適用於輸出包的時間戳。參數必須是一個時間規範,默認爲 0.

segment, stream_segment, ssegment例子

  • 重新混合輸入的in.mkv生成out-000.nut, out-001.nut, ......列表,並且把生成文件的列表寫入out.list:

    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut

  • 按輸出格式、選項分拆輸入:

    ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4

  • 按指定時間點分(由segment_times進行指定)拆輸入文件

    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut

  • 使用force_key_frames選項強制關鍵點進行切分,還指定了segment_time_delta 來處理計算機進程。時間點不夠精確

    ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \
    -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut

    爲了強制關機幀,必須進行轉碼

  • 按幀號進行分段 ,由segment_frames選項指定了若干幀號:

    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut

  • 轉換in.mkv 爲TS段,並且採用了libx264 和 libfaac 編碼器:

    ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts

  • 對輸入分段,創建了M3U8直播列表 (可以作爲HLS直播源):

    ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \
    -segment_list_flags +live -segment_time 10 out%03d.mkv

smoothstreaming

平滑流混合器生成一組文件(清單、塊),適用於傳統web服務器

  • window_size

    指定清單中保留的片段數。默認是0,表示保留所有的

  • extra_window_size

    從磁盤移除前,保留清單外片段數,默認5

  • lookahead_count

    指定先行片段數,默認2

  • min_frag_duration

    指定最小片段持續時間(單位microseconds),默認5000000.

  • remove_at_exit

    指定完成後是否移除所有片段,默認0,表示不移除

tee

tee混合器可以用於同時把相同數據寫入多個文件,或者任何其他類型的混合器。例如使用它可以同時把視頻發佈到網絡上以及保存到磁盤上。

它不同於在命令行指定多個輸出,因爲利用tee混合器,音頻和視頻數據只被編碼了一次,而編碼是一個非常昂貴的行爲。它是很有效的,當利用libavformat的API直接可以把相同的數據包用於多個混合器輸出(多種封裝格式或者場景)

多個輸出文件由’|’分隔,如果參數中包含任意前導或尾隨的空格,任何特殊字符都必須經過轉義(參考 ffmpeg-utils(1)手冊中的中 "Quoting and escaping" 章節).

混合器的選項可以由被“:”分隔的key=value列表進行指定。如果這種形式下選項參數值包含特殊字符,例如“:”則必須被轉義。注意這個第二層次的轉義

下列選項被要求:

  • f

    指定格式名,通常用於不能由輸出名後綴推測格式的情況

  • bsfs[/spec]

    指定一個比特流濾鏡應用到指定的輸出

    它可以爲每個流指定一個比特流濾鏡,通過"/"添加一個流選擇(說明符),有些流必須由說明符進行指定(格式規範見流說明符)。 如果流說明符沒有指定,則比特流濾鏡適用於所有輸出流。

    可以同時指定多個比特流濾鏡,用","分隔。

  • select

    選擇一些流,它們可以映射到一些輸出,通過流說明符進行指定。如果沒有指定,則默認會選擇所有輸入流

tee例子

  • 同時編碼到WebM文件和UDP協議上的MPEG-TS流(流需要明確的被映射):

    ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a

    
     

    "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"

  • 使用ffmpeg編碼輸入,有3個不同的目標。dump_extra比特流濾鏡被用來爲所有輸出的視頻關鍵幀添加額外的信息,其作爲MPEG-TS格式的要求。對out.aac附加的選項是爲了讓它只包含音頻。

    ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -strict experimental

    
     

    -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"

  • 下面,將只選擇一個音頻流給音頻輸出。注意第二層引號必須經過轉義,":"作爲特殊字符被用於標識選項

    ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -strict experimental

    
     

    -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"

    注意一些編碼器會根據輸出格式的不同要求不同的選項,在tee混合器下自動檢測可能會失效。主要有global_header的例子

webm_dash_manifest

WebM DASH 清單混合器.

這個混合器實現了按WebM DASH清單規範生成DASH清單XML文件。它還支持生成DASH直播流

更多參考:

webm_dash_manifest選項

支持如下選項:

  • adaptation_sets

    這個選項參數有如下語法: "id=x,streams=a,b,c id=y,streams=d,e" 這裏的x,y都是唯一合適設置的標識符,a,b,c,d和e是相應的音頻和視頻流的指代。任何合適的數字可以被用於這個選項。

  • live

    如果爲1表示創建一個直播流DASH,默認爲0

  • chunk_start_index

    第一個塊的索引號,默認爲0,它將作爲清單中‘SegmentTemplate’元素的 ‘startNumber’ 屬性值

  • chunk_duration_ms

    每個塊的持續時間,單位milliseconds,默認1000,將作爲清單中‘SegmentTemplate’元素的‘duration’屬性值

  • utc_timing_url

    URL將指示從何處獲取UTC時間戳(ISO格式的),它作爲清單中 ‘UTCTiming’元素的‘value’ 屬性值,默認: None.

  • time_shift_buffer_depth

    最小時間(單位秒)的移動緩衝區,爲保障可用的任意值,作爲清單中‘MPD’元素的‘timeShiftBufferDepth’屬性值,默認: 60.

  • minimum_update_period

    清單最小更新時間 (單位秒), 清單中‘MPD’元素的 ‘minimumUpdatePeriod’ 屬性值,默認: 0.

webm_dash_manifest例子


 

ffmpeg -f webm_dash_manifest -i video1.webm \

-f webm_dash_manifest -i video2.webm \

-f webm_dash_manifest -i audio1.webm \

-f webm_dash_manifest -i audio2.webm \

-map 0 -map 1 -map 2 -map 3 \

-c copy \

-f webm_dash_manifest \

-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \

manifest.xml

webm_chunk

WebM直播塊混合器

這個混合器輸出WebM頭和塊分離文件,通過DASH它可以被支持WebM直播流的客戶端處理。

webm_chunk選項

支持如下選項:

  • chunk_start_index

    第一個塊的序號,默認0

  • header

    文件名將寫入初始化數據的頭

  • audio_chunk_duration

    每個音頻塊時間,單位milliseconds (默認5000).

webm_chunk例子


 

ffmpeg -f v4l2 -i /dev/video0 \

-f alsa -i hw:0 \

-map 0:0 \

-c:v libvpx-vp9 \

-s 640x360 -keyint_min 30 -g 30 \

-f webm_chunk \

-header webm_live_video_360.hdr \

-chunk_start_index 1 \

webm_live_video_360_%d.chk \

-map 1:0 \

-c:a libvorbis \

-b:a 128k \

-f webm_chunk \

-header webm_live_audio_128.hdr \

-chunk_start_index 1 \

-audio_chunk_duration 1000 \

webm_live_audio_128_%d.chk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章