轉(zhuǎn)載自:http://einverne.github.io/post/2015/12/ffmpeg-first.html
那天需要將一段視頻文件轉(zhuǎn)成 gif,偶遇 ffmpeg,于是就學(xué)習(xí)了一下,它真的很強(qiáng)大。在看資料的過(guò)程中也是挺有趣的,發(fā)現(xiàn)其實(shí) kmplayer 以及國(guó)內(nèi)的 QQ 影音,暴風(fēng)等等,都不同程度的使用了 ffmpeg,可是根據(jù) ffmpeg 的開(kāi)源許可 LGPL,任何使用 ffmpeg 的軟件都必須開(kāi)源,于是乎 QQ 影音,暴風(fēng)都上了 ffmpeg 的恥辱柱,如果沒(méi)接觸到 ffmpeg 還真不知道有這一茬,國(guó)內(nèi)的黑心廠商真是拿開(kāi)源社區(qū)的東西都不遵循開(kāi)源協(xié)議。
下面就直接進(jìn)正題吧:
幾個(gè)概念
在進(jìn)入 ffmpeg 入門(mén)之前有一些基本概念需要了解,我在查看 ffmpeg 的時(shí)候回頭查閱了這些資料,覺(jué)得先行了解比較好,這些概念都是視頻或者音頻中的基本概念。
比特率
比特率,英文為 bit rate,描述每秒鐘輸出多少 KB 的參數(shù),單位是 Kbps,也就是 kbit/s,8Kbit/s = 1KB/s。也就是說(shuō) 800Kbps 意思就是每秒視頻就要占用 100KB 磁盤(pán)空間。對(duì)于音頻文件也存在比特率,同理。壓縮同一個(gè)視頻,視頻比特率越大,文件體積越大。視頻比特率越大,畫(huà)質(zhì)越好,馬賽克越少。
MP3 一般使用的比特率為 8~320kbps。
舉一個(gè)例子:
bitrate 可以理解為 file size / duration
比如一個(gè)視頻文件 20.8 M 時(shí)長(zhǎng)為 1min,那么
bitrate = 20.8M bit/60s = 20.8 * 1024 * 1024 * 8 bit/60s = 2831 Kbps
假設(shè)音頻的碼率為固定 128 Kbps,那么視頻的碼率就是
2831 Kbps - 128 Kbps = 2703 Kbps
H.264 標(biāo)準(zhǔn)建議
| 視頻大小 | 分辨率 | 建議碼率 |
|---|---|---|
| 480P | 720X480 | 1800Kbps |
| 720P | 1280X720 | 3500Kbps |
| 1080P | 1920X1080 | 8500Kbps |
可變碼率
可變碼率叫做 Variable Bitrate (VBR),也叫作動(dòng)態(tài)比特率編碼,VBR 指的是編碼器的輸出碼率可以根據(jù)編碼器輸入源信號(hào)的復(fù)雜度自適應(yīng)調(diào)整,目的是為了達(dá)到輸出質(zhì)量保持不變的同時(shí)節(jié)省存儲(chǔ)空間。VBR 適用于存儲(chǔ),不太適用流式傳輸,可以更有效的地利用有限空間。
固定碼率
固定碼率叫做 Constant Bitrate (CBR),CBR 指的是編碼器輸出碼率固定,CBR 不適合存儲(chǔ),CBR 對(duì)于復(fù)雜內(nèi)容可能沒(méi)有足夠碼率進(jìn)行編碼,從而導(dǎo)致質(zhì)量下降,同時(shí)會(huì)在簡(jiǎn)單內(nèi)容部分浪費(fèi)一些碼率。
幀數(shù)
幀數(shù),又被叫做幀率,指的是每秒鐘播放的圖片數(shù),單位 fps(英文:Frames Per Second),每秒的幀數(shù)或者幀率表示視頻文件或者圖形處理器場(chǎng)景時(shí)每秒鐘能夠更新的次數(shù)。
高的幀率可以得到更流暢、更逼真的畫(huà)面。一般來(lái)說(shuō) 30fps 就是可以接受的,但是將性能提升至 60fps 則可以明顯提升交互感和逼真感,但是一般來(lái)說(shuō)超過(guò) 75fps 一般就不容易察覺(jué)到有明顯的流暢度提升了。如果幀率超過(guò)屏幕刷新率只會(huì)浪費(fèi)圖形處理的能力,因?yàn)轱@示器不能以這么快的速度更新,這樣超過(guò)刷新率的幀率就浪費(fèi)掉了。
在同一視頻,同一碼率的情況下,幀數(shù)越大,則畫(huà)質(zhì)越不好。尤其是運(yùn)動(dòng)的畫(huà)面。因?yàn)槊繌埉?huà)面會(huì)分擔(dān)每秒有限的文件體積,如果畫(huà)面越多,那么每張畫(huà)面所能表現(xiàn)的內(nèi)容就越有限。
當(dāng)畫(huà)面的 FPS 達(dá)到 60 幀 / 秒時(shí),已經(jīng)能滿(mǎn)足絕大部分應(yīng)用需求。一般情況下,如果能夠保證游戲畫(huà)面的平均 FPS 能夠達(dá)到 30 幀 / 秒,那么畫(huà)面已經(jīng)基本流暢;能夠達(dá)到 50 幀 / 秒,就基本可以體會(huì)到行云流水的感覺(jué)了。一般人很難分辨出 60 幀 / 秒與 100 幀 / 秒有什么不同。
分辨率
最好理解的概念了,表示畫(huà)面的大小,單位是像素 px。
和編碼率的關(guān)系:越高的分辨率,需要越高的編碼率,因?yàn)閳D像的細(xì)節(jié)多了,需要的文件體積也應(yīng)該增大,否則還不如畫(huà)面小一些,你會(huì)發(fā)現(xiàn)同一碼率,畫(huà)面越大,圖像的馬賽克程度越明顯。
采樣率
每秒鐘對(duì)音頻信號(hào)的采樣次數(shù),采樣頻率越高聲音還原度越高,聲音更加自然。單位是赫茲 Hz。音頻文件一般使用的采樣率是 44100 Hz ,也就是一秒鐘采樣 44100 次,之所以使用這個(gè)數(shù)值是因?yàn)榻?jīng)過(guò)了反復(fù)實(shí)驗(yàn),人們發(fā)現(xiàn)這個(gè)采樣精度最合適,低于這個(gè)值就會(huì)有較明顯的損失,而高于這個(gè)值人的耳朵已經(jīng)很難分辨,而且增大了數(shù)字音頻所占用的空間。我們所使用的 CD 的采樣標(biāo)準(zhǔn)就是 44.1k,目前 44.1k 還是一個(gè)最通行的標(biāo)準(zhǔn)。
安裝
Debian/Ubuntu/Linux Mint 下安裝 ffmpeg 很簡(jiǎn)單:
apt-get install ffmpeg
其他操作系統(tǒng)安裝方法,參考官網(wǎng)
如果想要手工編譯 ffmpeg 可以參考官方 wiki。 Ubuntu/Debian/Mint 系手工編譯 ffmpeg 參考 wiki。
用法舉例
顯示文件信息
顯示視頻信息
ffmpeg -i input.avi
將視頻拆分圖片 批量截圖
將視頻拆分多張圖片,每一幀圖片,保存到 frames 文件夾下,命名 frame001.png 這種。可以加上 -r 參數(shù)以用來(lái)限制每秒的幀數(shù),-r 10 就表示每秒 10 幀。
ffmpeg -i input.mp4 frames/frame%03d.png
圖片合成視頻
將多張圖片合成視頻
ffmpeg -i frames/frame%3d.png output.mp4
從視頻中提取音頻
從視頻文件中提取音頻并保存為 mp3
ffmpeg -i input.mp4 -f mp3 output.mp3
如果需要可以在中間加上 -ar 44100 -ac 2 -ab 192 系數(shù),表示采樣率 44100 ,通道 2 立體聲,碼率 192 kb/s.
將聲音合成到視頻
將聲音合成到視頻中
ffmpeg -i input_music.mp3 -i input_video.mp4 output.mp4
轉(zhuǎn)化格式
格式之間轉(zhuǎn)換 大部分的情況下直接運(yùn)行一下即可
ffmpeg -i input.mp4 output.avi
將 flv 轉(zhuǎn)碼 MP4
ffmpeg -i input.flv -vcodec copy -acodec copy out.mp4
-vcodec copy 和 -acodec copy 表示所使用的視頻和音頻編碼格式,為原樣拷貝。
轉(zhuǎn)換文件格式
ffmpeg -y -i input_video.mp4 -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
或
ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp
視頻切片操作
對(duì)視頻切片操作
比如需要從視頻第 1 分 45 秒地方,剪 10 秒畫(huà)面,-ss 表示開(kāi)始位置,-t 表示延長(zhǎng)時(shí)間
ffmpeg -i input.mp4 -ss 00:01:45 -t 10 output.mp4
加速減速視頻
加速視頻
ffmpeg -i input.mp4 -vf “setpts=0.5*PTS” output.mp4
同理減速視頻
ffmpeg -i input.mp4 -vf “setpts=2.0*PTS” output.mp4
此操作對(duì)音頻無(wú)影響
視頻截圖
視頻 10 秒的地方 (-ss 參數(shù))截取一張 1920x1080 尺寸大小的,格式為 jpg 的圖片 -ss后跟的時(shí)間單位為秒
ffmpeg -i input_video.mp4 -y -f image2 -t 0.001 -ss 10 -s 1920x1080 output.jpg
或者
ffmpeg -i input_video.mp4 -ss 00:00:06.000 -vframes 1 output.png
合成 gif
把視頻的前 30 幀轉(zhuǎn)換成一個(gè) Gif
ffmpeg -i input_video.mp4 -vframes 30 -y -f gif output.gif
將視頻轉(zhuǎn)成 gif
ffmpeg -ss 00:00:00.000 -i input.mp4 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
將輸入的文件從 (-ss) 設(shè)定的時(shí)間開(kāi)始以 10 幀頻率,輸出到 320x240 大小的 gif 中,時(shí)間長(zhǎng)度為 -t 設(shè)定的參數(shù)。通過(guò)這樣轉(zhuǎn)換出來(lái)的 gif 一般都比較大,可以使用 ImageMagick 來(lái)優(yōu)化圖片的大小。
convert -layers Optimize output.gif output_optimized.gif
把 frame.[001-100].jpg 序列幀和 bg.mp3 音頻文件利用 mpeg4 編碼方式合成分辨率 720p 的視頻文件 output.avi:
ffmpeg -i bg.mp3 -i frame.%3d.jpg -s hd720 -vcodec mpeg4 output.avi
轉(zhuǎn)換碼率
ffmpeg 碼率相關(guān)的參數(shù)主要有 -minrate, maxrate, -b:v
ffmpeg -i input.mp4 -b:v 2000k output.mp4
也就是把原始視頻轉(zhuǎn)換成 2 Mbps 碼率視頻。ffmpeg 官方建議,在設(shè)置 -b:v 時(shí),同時(shí)加上 -bufsize 用于設(shè)置碼率控制緩沖器大小,讓整體碼率更加趨近于希望的只,減少波動(dòng)。
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
而 -minrate 和 -maxrate 比較簡(jiǎn)單,設(shè)置碼率不要低于或者超過(guò)某一個(gè)閾值
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
查看 ffmpeg 支持格式
要查看你的 ffmpeg 支持哪些格式,可以用如下命令:
ffmpeg -formats | less
設(shè)置輸出文件編碼率 64 kbit/s, To set the video bitrate of the output file to 64 kbit/s:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
設(shè)置輸出文件幀率為 24 fps,To force the frame rate of the output file to 24 fps:
ffmpeg -i input.avi -r 24 output.avi
強(qiáng)制輸入文件以 1 幀,輸出文件 24 幀 , To force the frame rate of the input file (valid for raw formats only) to 1 fps and the frame rate of the output file to 24 fps:
ffmpeg -r 1 -i input.mp4 -r 24 output.avi
下面幾步分別是,創(chuàng)建frames文件夾,利用 ffmpeg 將視頻文件以每秒 10 幀輸出成圖像保存到 frames 文件夾中,再利用 ImageMagick 將圖片組成 gif。其中 convert 命令來(lái)自 ImageMagick。
mkdir frames
ffmpeg -i input.mp4 -r 10 frames/frame%03d.png
convert -delay 5 -loop 0 frames/frame*.png output.gif
Source: http://superuser.com/a/556031
利用 ffmpeg 屏幕錄制
參考:https://trac.ffmpeg.org/wiki/Capture/Desktop
添加水印
ffmpeg -i input.mp4 -i picture.png -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-(overlay_h)/2" output.mp4
picture.png 為水印圖片, overlay 為水印位置
ffmpeg 使用語(yǔ)法
ffmpeg 使用語(yǔ)法:
ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
如果沒(méi)有輸入文件,那么視音頻捕捉就會(huì)起作用。
作為通用的規(guī)則,選項(xiàng)一般用于下一個(gè)特定的文件。如果你給 –b 64 選項(xiàng),改選會(huì)設(shè)置下一個(gè)視頻速率。對(duì)于原始輸入文件,格式選項(xiàng)可能是需要的。
缺省情況下,ffmpeg 試圖盡可能的無(wú)損轉(zhuǎn)換,采用與輸入同樣的音頻視頻參數(shù)來(lái)輸出。
通用選項(xiàng)
-L license 顯示協(xié)議
-h 幫助
-formats 顯示可用的格式,編解碼的,協(xié)議的
-decoders 可用解碼器
-encoders 可用編碼器
主要選項(xiàng)
-i filename 輸入文件
-y 覆蓋輸出文件
-n 不覆蓋輸出文件,如果輸出文件存在則退出
-t duration (input/output)
設(shè)置紀(jì)錄時(shí)間 hh:mm:ss[.xxx] 格式的記錄時(shí)間也支持,在 `-i` 之前使用,則對(duì)輸入文件限制記錄時(shí)間;如果對(duì)輸出文件使用,則是限制輸出文件的時(shí)長(zhǎng)。
-ss position
搜索到指定的時(shí)間 [-]hh:mm:ss[.xxx] 的格式也支持 ,更多[參考](https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax)
-title string 設(shè)置標(biāo)題
-author string 設(shè)置作者
-copyright string 設(shè)置版權(quán)
-comment string 設(shè)置評(píng)論
-f fmt 強(qiáng)迫采用格式 fmt 輸出
-c[:stream_specifier] codec (input/output, per-stream)
-codec[:stream_specifier] codec (input/output, per-stream)
給輸入文件指定解碼器,給輸出文件指定編碼器, codec 為編碼器名字,如果 codec 值為 `copy` 則默認(rèn)為和原視頻一致。
-vcodec codec
vcodec 是 -codec:v 的一個(gè)別稱(chēng),強(qiáng)制使用 codec 編解碼方式,未設(shè)定時(shí)使用與輸入流相同的編碼器。如果用 copy 表示原始編解碼數(shù)據(jù)必須被拷貝。
-target type 設(shè)置目標(biāo)文件類(lèi)型 (vcd,svcd,dvd) 所有的格式選項(xiàng)(比特率,編解碼以及緩沖區(qū)大?。┳詣?dòng)設(shè)置,只需要輸入如下的就可以了:
ffmpeg -i input.avi -target vcd /tmp/vcd.mpg
-hq 激活高質(zhì)量設(shè)置
-itsoffset offset 設(shè)置以秒為基準(zhǔn)的時(shí)間偏移,該選項(xiàng)影響所有后面的輸入文件。該偏移被加到輸入文件的時(shí)戳,定義一個(gè)正偏移意味著相應(yīng)的流被延遲了 offset 秒。 [-]hh:mm:ss[.xxx] 的格式也支持
### 視頻選項(xiàng) {#video-options}
-vframes number (output)
設(shè)置視頻輸出幀數(shù),是`-frames:v`的別稱(chēng)。
-b bitrate 設(shè)置比特率,缺省 200kb/s
-r fps 設(shè)置幀率 缺省 25
-s size 設(shè)置畫(huà)面的寬高
設(shè)置幀大小,分辨率, 格式為 wxh 缺省為原視頻大小。下面的簡(jiǎn)寫(xiě)也可以直接使用:
ntsc 720x480
snits 640x480
hd720 1280x720
hd1080 1920x1080
更多[參考](https://ffmpeg.org/ffmpeg-utils.html#toc-Video-size)
-aspect aspect 設(shè)置畫(huà)面比例 4:3 16:9 或 1.3333 1.7777
-croptop size 設(shè)置頂部切除帶大小 像素單位
-cropbottom size –cropleft size –cropright size
-padtop size 設(shè)置頂部補(bǔ)齊的大小 像素單位
-padbottom size –padleft size –padright size –padcolor color 設(shè)置補(bǔ)齊條顏色 (hex,6 個(gè) 16 進(jìn)制的數(shù),紅:綠:蘭排列,比如 000000 代表黑色)
-vn 不做視頻記錄,輸出無(wú)視頻內(nèi)容
-bt tolerance 設(shè)置視頻碼率容忍度 kbit/s
-maxrate bitrate 設(shè)置最大視頻碼率容忍度
-minrate bitreate 設(shè)置最小視頻碼率容忍度
-bufsize size 設(shè)置碼率控制緩沖區(qū)大小
-sameq 使用同樣視頻質(zhì)量作為源(VBR)
-pass n 選擇處理遍數(shù)(1 或者 2)。兩遍編碼非常有用。第一遍生成統(tǒng)計(jì)信息,第二遍生成精確的請(qǐng)求的碼率
-passlogfile file 選擇兩遍的紀(jì)錄文件名為 file
高級(jí)視頻選項(xiàng)
-g gop_size 設(shè)置圖像組大小
-intra 僅適用幀內(nèi)編碼
-qscale q 使用固定的視頻量化標(biāo)度 (VBR)
-qmin q 最小視頻量化標(biāo)度 (VBR)
-qmax q 最大視頻量化標(biāo)度 (VBR)
-qdiff q 量化標(biāo)度間最大偏差 (VBR)
-qblur blur 視頻量化標(biāo)度柔化 (VBR)
-qcomp compression 視頻量化標(biāo)度壓縮 (VBR)
-rc_init_cplx complexity 一遍編碼的初始復(fù)雜度
-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 設(shè)置碼率控制方程 默認(rèn) tex^qComp
-rc_override override 特定間隔下的速率控制重載
-me method 設(shè)置運(yùn)動(dòng)估計(jì)的方法 可用方法有 zero phods log x1 epzs(缺?。?full
-dct_algo algo 設(shè)置 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 設(shè)置 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 設(shè)置錯(cuò)誤殘留為 n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 設(shè)置錯(cuò)誤掩蔽為 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 個(gè)運(yùn)動(dòng)矢量 僅用于 mpeg4
-part 使用數(shù)據(jù)劃分 僅用于 mpeg4
-bug param 繞過(guò)沒(méi)有被自動(dòng)監(jiān)測(cè)到編碼器的問(wèn)題
-strict strictness 跟標(biāo)準(zhǔn)的嚴(yán)格性
-aic 使能高級(jí)幀內(nèi)編碼 h263+
-umv 使能無(wú)限運(yùn)動(dòng)矢量 h263+
-deinterlace 不采用交織方法
-interlace 強(qiáng)迫交織法編碼僅對(duì) mpeg2 和 mpeg4 有效。當(dāng)你的輸入是交織的并且你想要保持交織以最小圖像損失的時(shí)候采用該選項(xiàng)??蛇x的方法是不交織,但是損失更大
-psnr 計(jì)算壓縮幀的 psnr
-vstats 輸出視頻編碼統(tǒng)計(jì)到 vstats_hhmmss.log
-vhook module 插入視頻處理模塊 module 包括了模塊名和參數(shù),用空格分開(kāi)
### 音頻選項(xiàng) {#audio-options}
-aframes number (output)
設(shè)置輸出文件音頻幀數(shù),是`-frames:a` 的別名
-ab bitrate
設(shè)置音頻碼率,聲音比特率,-ac 設(shè)為立體聲時(shí)要以一半比特率來(lái)設(shè)置,比如 192kbps 的就設(shè)置成 96,高品質(zhì)音樂(lè)建議 160kbps(80) 一上
-ar freq
設(shè)置音頻采樣率,一般設(shè)置 44100
-ac channels
設(shè)置通道,聲道數(shù), 缺省為 1, 1 為單聲道,2 為立體聲
-an 不使用音頻紀(jì)錄
-acodec codec
使用 codec 編解碼,是`-codec:a`的別名
音頻 / 視頻捕獲選項(xiàng)
-vd device 設(shè)置視頻捕獲設(shè)備。比如 /dev/video0
-vc channel 設(shè)置視頻捕獲通道 DV1394 專(zhuān)用
-tvstd standard 設(shè)置電視標(biāo)準(zhǔn) NTSC PAL(SECAM)
-dv1394 設(shè)置 DV1394 捕獲
-av device 設(shè)置音頻設(shè)備 比如 /dev/dsp
### 高級(jí)選項(xiàng) {#advance-option}
-map file:stream 設(shè)置輸入流映射
-debug 打印特定調(diào)試信息
-benchmark 為基準(zhǔn)測(cè)試加入時(shí)間
-hex 傾倒每一個(gè)輸入包
-bitexact 僅使用位精確算法 用于編解碼測(cè)試
-ps size 設(shè)置包大小,以 bits 為單位
-re 以本地幀頻讀數(shù)據(jù),主要用于模擬捕獲設(shè)備
-loop 循環(huán)輸入流。只工作于圖像流,用于 ffserver 測(cè)試
附錄 1:ffmpeg 簡(jiǎn)略幫助
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Getting help:
-h -- print basic options
-h long -- print more options
-h full -- print all options (including all format and codec specific options, very long)
-h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter
See man ffmpeg for detailed description of the options.
Print help / information / capabilities:
-L show license
-h topic show help
-? topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-colors show available color names
-sources device list sources of the input device
-sinks device list sinks of the output device
-hwaccels show available HW acceleration methods
Global options (affect whole program instead of just one file:
-loglevel loglevel set logging level
-v loglevel set logging level
-report generate a report
-max_alloc bytes set maximum size of a single allocated block
-y overwrite output files
-n never overwrite output files
-ignore_unknown Ignore unknown stream types
-stats print progress report during encoding
-max_error_rate ratio of errors (0.0: no errors, 1.0: 100% error maximum error rate
-bits_per_raw_sample number set the number of bits per raw sample
-vol volume change audio volume (256=normal)
Per-file main options:
-f fmt force format
-c codec codec name
-codec codec codec name
-pre preset preset name
-map_metadata outfile[,metadata]:infile[,metadata] set metadata information of outfile from infile
-t duration record or transcode "duration" seconds of audio/video
-to time_stop record or transcode stop time
-fs limit_size set the limit file size in bytes
-ss time_off set the start time offset
-sseof time_off set the start time offset relative to EOF
-seek_timestamp enable/disable seeking by timestamp with -ss
-timestamp time set the recording timestamp ('now' to set the current time)
-metadata string=string add metadata
-program title=string:st=number... add program with specified streams
-target type specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")
-apad audio pad
-frames number set the number of frames to output
-filter filter_graph set stream filtergraph
-filter_script filename read stream filtergraph description from a file
-reinit_filter reinit filtergraph on input parameter changes
-discard discard
-disposition disposition
Video options:
-vframes number set the number of video frames to output
-r rate set frame rate (Hz value, fraction or abbreviation)
-s size set frame size (WxH or abbreviation)
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number set the number of bits per raw sample
-vn disable video
-vcodec codec force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff set initial TimeCode value.
-pass n select the pass number (1 to 3)
-vf filter_graph set video filters
-ab bitrate audio bitrate (please use -b:a)
-b bitrate video bitrate (please use -b:v)
-dn disable data
Audio options:
-aframes number set the number of audio frames to output
-aq quality set audio quality (codec-specific)
-ar rate set audio sampling rate (in Hz)
-ac channels set number of audio channels
-an disable audio
-acodec codec force audio codec ('copy' to copy stream)
-vol volume change audio volume (256=normal)
-af filter_graph set audio filters
Subtitle options:
-s size set frame size (WxH or abbreviation)
-sn disable subtitle
-scodec codec force subtitle codec ('copy' to copy stream)
-stag fourcc/tag force subtitle tag/fourcc
-fix_sub_duration fix subtitles duration
-canvas_size size set canvas size (WxH or abbreviation)
-spre preset set the subtitle options to the indicated preset
附錄 2:常用視頻文件格式詳解
常見(jiàn)的視頻格式:
AVI 格式 它的英文全稱(chēng)為 Audio Video Interleaved,即音頻視頻交錯(cuò)格式。它于 1992 年被 Microsoft 公司推出,隨 Windows3.1 一起被人們所認(rèn)識(shí)和熟知。所謂“音頻視頻交錯(cuò)”,就是可以將視頻和音頻交織在一起進(jìn)行同步播放。這種視頻格式的優(yōu)點(diǎn)是圖像質(zhì)量好,可以跨多個(gè)平臺(tái)使用,但是其缺點(diǎn)是體積過(guò)于龐大,而且更加糟糕的是壓縮標(biāo)準(zhǔn)不統(tǒng)一,因此經(jīng)常會(huì)遇到高版本 Windows 媒體播放器播放不了采用早期編碼編輯的 AVI 格式視頻,而低版本 Windows 媒體播放器又播放不了采用最新編碼編輯的 AVI 格式視頻。其實(shí)解決的方法也非常簡(jiǎn)單,我們將在后面的視頻轉(zhuǎn)換、視頻修復(fù)部分中給出解決的方案。
DV-AVI 格式 DV 的英文全稱(chēng)是 Digital Video Format,是由索尼、松下、JVC 等多家廠商聯(lián)合提出的一種家用數(shù)字視頻格式。目前非常流行的數(shù)碼攝像機(jī)就是使用這種格式記錄視頻數(shù)據(jù)的。它可以通過(guò)電腦的 IEEE 1394 端口傳輸視頻數(shù)據(jù)到電腦,也可以將電腦中編輯好的的視頻數(shù)據(jù)回錄到數(shù)碼攝像機(jī)中。這種視頻格式的文件擴(kuò)展名一般也是.avi,所以我們習(xí)慣地叫它為 DV-AVI 格式。
MPEG 格式 它的英文全稱(chēng)為 Moving Picture Expert Group,即運(yùn)動(dòng)圖像專(zhuān)家組格式,家里??吹?VCD、SVCD、DVD 就是這種格式。MPEG 文件格式是運(yùn)動(dòng)圖像壓縮算法的國(guó)際標(biāo)準(zhǔn),它采用了有損壓縮方法從而減少運(yùn)動(dòng)圖像中的冗余信息。MPEG 的壓縮方法說(shuō)的更加深入一點(diǎn)就是保留相鄰兩幅畫(huà)面絕大多數(shù)相同的部分,而把后續(xù)圖像中和前面圖像有冗余的部分去除,從而達(dá)到壓縮的目的。目前 MPEG 格式有三個(gè)壓縮標(biāo)準(zhǔn),分別是 MPEG-1、MPEG-2、和 MPEG-4,另外,MPEG-7 與 MPEG-21 仍處在研發(fā)階段。 MPEG-1:制定于 1992 年,它是針對(duì) 1.5Mbps 以下數(shù)據(jù)傳輸率的數(shù)字存儲(chǔ)媒體運(yùn)動(dòng)圖像及其伴音編碼而設(shè)計(jì)的國(guó)際標(biāo)準(zhǔn)。也就是我們通常所見(jiàn)到的 VCD 制作格式。這種視頻格式的文件擴(kuò)展名包括.mpg、.mlv、.mpe、.mpeg 及 VCD 光盤(pán)中的.dat 文件等。 MPEG-2:制定于 1994 年,設(shè)計(jì)目標(biāo)為高級(jí)工業(yè)標(biāo)準(zhǔn)的圖像質(zhì)量以及更高的傳輸率。這種格式主要應(yīng)用在 DVD/SVCD 的制作(壓縮)方面,同時(shí)在一些 HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當(dāng)?shù)膽?yīng)用。這種視頻格式的文件擴(kuò)展名包括.mpg、.mpe、.mpeg、.m2v 及 DVD 光盤(pán)上的.vob 文件等。 MPEG-4:制定于 1998 年,MPEG-4 是為了播放流式媒體的高質(zhì)量視頻而專(zhuān)門(mén)設(shè)計(jì)的,它可利用很窄的帶度,通過(guò)幀重建技術(shù),壓縮和傳輸數(shù)據(jù),以求使用最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量。MPEG-4 最有吸引力的地方在于它能夠保存接近于 DVD 畫(huà)質(zhì)的小體積視頻文件。這種視頻格式的文件擴(kuò)展名包括.asf、.mov 和 DivX 、AVI 等。
DivX 格式 這是由 MPEG-4 衍生出的另一種視頻編碼(壓縮)標(biāo)準(zhǔn),也即我們通常所說(shuō)的 DVDrip 格式,它采用了 MPEG4 的壓縮算法同時(shí)又綜合了 MPEG-4 與 MP3 各方面的技術(shù),說(shuō)白了就是使用 DivX 壓縮技術(shù)對(duì) DVD 盤(pán)片的視頻圖像進(jìn)行高質(zhì)量壓縮,同時(shí)用 MP3 或 AC3 對(duì)音頻進(jìn)行壓縮,然后再將視頻與音頻合成并加上相應(yīng)的外掛字幕文件而形成的視頻格式。其畫(huà)質(zhì)直逼 DVD 并且體積只有 DVD 的數(shù)分之一。
MOV 格式 美國(guó) Apple 公司開(kāi)發(fā)的一種視頻格式,默認(rèn)的播放器是蘋(píng)果的 QuickTimePlayer。具有較高的壓縮比率和較完美的視頻清晰度等特點(diǎn),但是其最大的特點(diǎn)還是跨平臺(tái)性,即不僅能支持 MacOS,同樣也能支持 Windows 系列。
ASF 格式 它的英文全稱(chēng)為 Advanced Streaming format,它是微軟為了和現(xiàn)在的 Real Player 競(jìng)爭(zhēng)而推出的一種視頻格式,用戶(hù)可以直接使用 Windows 自帶的 Windows Media Player 對(duì)其進(jìn)行播放。由于它使用了 MPEG-4 的壓縮算法,所以壓縮率和圖像的質(zhì)量都很不錯(cuò)。
WMF 格式 它的英文全稱(chēng)為 Windows Media Video,也是微軟推出的一種采用獨(dú)立編碼方式并且可以直接在網(wǎng)上實(shí)時(shí)觀看視頻節(jié)目的文件壓縮格式。WMV 格式的主要優(yōu)點(diǎn)包括:本地或網(wǎng)絡(luò)回放、可擴(kuò)充的媒體類(lèi)型、可伸縮的媒體類(lèi)型、多語(yǔ)言支持、環(huán)境獨(dú)立性、豐富的流間關(guān)系以及擴(kuò)展性等。
RM 格式 Networks 公司所制定的音頻視頻壓縮規(guī)范稱(chēng)之為 Real Media,用戶(hù)可以使用 RealPlayer 或 RealOne Player 對(duì)符合 RealMedia 技術(shù)規(guī)范的網(wǎng)絡(luò)音頻 / 視頻資源進(jìn)行實(shí)況轉(zhuǎn)播,并且 RealMedia 還可以根據(jù)不同的網(wǎng)絡(luò)傳輸速率制定出不同的壓縮比率,從而實(shí)現(xiàn)在低速率的網(wǎng)絡(luò)上進(jìn)行影像數(shù)據(jù)實(shí)時(shí)傳送和播放。這種格式的另一個(gè)特點(diǎn)是用戶(hù)使用 RealPlayer 或 RealOne Player 播放器可以在不下載音頻 / 視頻內(nèi)容的條件下實(shí)現(xiàn)在線播放。
RMVB 格式 這是一種由 RM 視頻格式升級(jí)延伸出的新視頻格式,它的先進(jìn)之處在于 RMVB 視頻格式打破了原先 RM 格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎(chǔ)上合理利用比特率資源,就是說(shuō)靜止和動(dòng)作場(chǎng)面少的畫(huà)面場(chǎng)景采用較低的編碼速率,這樣可以留出更多的帶寬空間,而這些帶寬會(huì)在出現(xiàn)快速運(yùn)動(dòng)的畫(huà)面場(chǎng)景時(shí)被利用。這樣在保證了靜止畫(huà)面質(zhì)量的前提下,大幅地提高了運(yùn)動(dòng)圖像的畫(huà)面質(zhì)量,從而圖像質(zhì)量和文件大小之間就達(dá)到了微妙的平衡。