「轉(zhuǎn)」ffmpeg 入門(mén)筆記

轉(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)的視頻格式:

  1. 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ù)部分中給出解決的方案。

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

  3. 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 等。

  4. 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ù)分之一。

  5. MOV 格式   美國(guó) Apple 公司開(kāi)發(fā)的一種視頻格式,默認(rèn)的播放器是蘋(píng)果的 QuickTimePlayer。具有較高的壓縮比率和較完美的視頻清晰度等特點(diǎn),但是其最大的特點(diǎn)還是跨平臺(tái)性,即不僅能支持 MacOS,同樣也能支持 Windows 系列。

  6. 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ò)。

  7. 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ò)展性等。

  8. 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)在線播放。

  9. 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á)到了微妙的平衡。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容