媒體格式是能夠存儲(chǔ)音頻或視頻數(shù)據(jù)的特殊文件類(lèi)型。 其中一些能夠存儲(chǔ)更多類(lèi)型的數(shù)據(jù)與多個(gè)流,這些被稱(chēng)為容器。 第二章列出了可用的媒體格式,并可以使用命令ffmpeg -formats
進(jìn)行顯示。
視頻文件格式通常可以同時(shí)包含視頻和音頻流,但是有一些特殊的格式,只能包含音頻,詳細(xì)信息在數(shù)字音頻章節(jié)中有描述。
媒體容器是特定類(lèi)型的包裝文件,用于存儲(chǔ)多媒體流和相關(guān)元數(shù)據(jù)的特殊文件格式。 由于音頻和視頻可以通過(guò)各種方法(算法)進(jìn)行編碼和解碼,容器提供了將各種媒體流存儲(chǔ)在一個(gè)文件中的簡(jiǎn)單方法。 一些容器只能存儲(chǔ)音頻(AIFF,WAV,XMF等),一些只能存儲(chǔ)圖片(TIFF ...),但大多數(shù)容器存儲(chǔ)音頻,視頻,字幕,元數(shù)據(jù)等。所有列出的視頻容器也支持一些 字幕格式,特別是SubRip和Advanced SubStation Alpha。
-c copy
或-c:a copy
或-c:v copy
選項(xiàng):ffmpeg -i input.avi -q 1 -c copy output.mov
將輸入文件使用ffmpeg處理成輸出文件稱(chēng)為轉(zhuǎn)換,它可以包括格式之間的轉(zhuǎn)換或者僅修改某些數(shù)據(jù),輸出媒體格式保持不變的轉(zhuǎn)碼。 數(shù)據(jù)包可以被編碼壓縮或解壓縮,壓縮包括使用特定的編解碼器。 轉(zhuǎn)碼過(guò)程可以分為幾個(gè)部分:
*解復(fù)用(demultiplexing) - 基于文件擴(kuò)展名(.avi,mpg等)被選中來(lái)自libavformat庫(kù)的最好的解復(fù)用(解復(fù)用器),從輸入文件生成編碼數(shù)據(jù)包
解碼-數(shù)據(jù)包是由一個(gè)適當(dāng)?shù)慕獯a器解碼,產(chǎn)生未壓縮的幀;如果使用-c copy
(或-codec copy
)選項(xiàng),則不會(huì)發(fā)生解碼(也不進(jìn)行過(guò)濾)。
可選的過(guò)濾器 - 解碼的幀可以通過(guò)指定的過(guò)濾器進(jìn)行修改
編碼 - 未壓縮的幀由選定的編碼器編碼為數(shù)據(jù)包
復(fù)用(multiplexing) - 將數(shù)據(jù)包復(fù)用(multiplexed)為選定的媒體格式。
ffmpeg中轉(zhuǎn)換的可用選項(xiàng)被劃分為通用的和私有的??梢詾槿魏稳萜鳌⒕幗獯a器或設(shè)備設(shè)置通用選項(xiàng),私有選項(xiàng)針對(duì)所選的編解碼器、容器或設(shè)備。
codec的名字來(lái)源于單詞編碼解碼器(或編碼解碼器),它表示一個(gè)設(shè)備或軟件工具,用于編碼和解碼一個(gè)被壓縮的視頻或音頻流。FFmpeg編解碼器定義是一種媒體比特流格式。下一個(gè)命令顯示可用的編解碼器:
ffmpeg -codecs
...顯示的都是解碼器和編碼器
ffmpeg -decoders
...只顯示解碼器
ffmpeg -encoders
...只顯示編碼器
命令行上的編解碼器是由-c
或-codec
選項(xiàng)指定的,語(yǔ)法是:
-codec[:stream_specifier] codec_name
可以為輸入和輸出文件指定編解碼器,如果輸出包含多個(gè)流,則每個(gè)流可以使用不同的編解碼器。 如果我們?cè)跊](méi)有編解碼器的情況下指定輸出格式,則ffmpeg會(huì)選擇默認(rèn)編解碼器,常見(jiàn)媒體格式的默認(rèn)編解碼器列表如下:
格式 | 編解碼器 | 其他數(shù)據(jù) |
---|---|---|
.avi | mpeg4 | mpeg4 (Simple profile), yuv420p; audio: mp3 |
.flv | flv1 | yuv420p; audio: mp3 |
.mkv | h264 | h264 (High), yuvj420p; audio: vorbis codec, fltp sample format |
.mov | h264 | h264 (High), yuvj420p; audio: aac (mp4a) |
.mp4 | h264 | h264 (High), yuvj420p; audio: aac (mp4a) |
.mpg | mpeg1video | yuv420p; audio: mp2 |
.ogg | theora | yuv422p, bitrate very low; audio excluded during conversion |
.ts | mpeg2video | yuv422p; audio: mp2 |
.webm | vp8 | yuv420p; audio: vorbis codec, fltp sample format |
格式 | 編解碼器 | 額外數(shù)據(jù) |
---|---|---|
.aac | aac | libvo_aacenc, bitrate 128 kb/s |
.flac | flac | FLAC (Free Lossless Audio Codec), bitrate 128 kb/s |
.m4a | aac | mp4a, bitrate 128 kb/s |
.mp2 | mp2 | MPEG Audio Layer 2, bitrate 128 kb/s |
.mp3 | mp3 | libmp3lame, bitrate 128 kb/s |
.wav | pcm_s16le | PCM (Pulse Code Modulation), uncompressed |
.wma | wmav2 | Windows Media Audio |
如果在ffmpeg命令中具有指定名稱(chēng)的文件已經(jīng)存在,控制臺(tái)將請(qǐng)求“y”(yes)或“n”(no)來(lái)覆蓋舊文件。為了避免這個(gè)問(wèn)題,可以使用-n選項(xiàng)來(lái)取消處理,-y選項(xiàng)用于設(shè)置覆蓋而不需要請(qǐng)求。例如,在默認(rèn)情況下,我們可以使用以下命令來(lái)覆蓋舊的輸出文件:
ffmpeg -y -i input.avi output.mp4
通用選項(xiàng)可設(shè)置為任何編解碼器、容器或設(shè)備。在表中描述了與編碼器(codec)規(guī)范相關(guān)的轉(zhuǎn)換中包含的最常見(jiàn)的通用選項(xiàng),目標(biāo)列包含5個(gè)字母代碼,限制了特定選項(xiàng)的使用。某些字母的存在意味著該選項(xiàng)適用于編碼(E)、解碼(D)、視頻(V)、音頻(A)或字幕(S)。
選項(xiàng) | 類(lèi)型 | 標(biāo)簽 | 描述 |
---|---|---|---|
-flags | flags | EDVAS | 數(shù)值:(ffmpeg幫助的詳細(xì)信息):mv4、qpel、loop、gmc、mv0、gray、psnr、naq、ildct、low_delay、global_header、bitreal、aic、cbp、qprd、ilme、cgop |
-me_method | int | E..V.. | 數(shù)值:(請(qǐng)參閱ffmpeg幫助詳細(xì)信息):0、full、epzs、esa、tesa、dia、log、phods、x1、hex、umh、iter |
-g | int | E..V.. | 設(shè)置圖片組大小 |
-qcomp | float | E..V.. | 視頻量化壓縮(VBR)。ratecontrol方程的常數(shù)。默認(rèn)rc_eq: 0-1.0的推薦范圍 |
-qblur | float | E..V.. | 視頻量化器尺度模糊(VBR) |
-qmin | int | E..V.. | 最小視頻量化器規(guī)模(VBR) |
-qmax | int | E..V.. | 最大視頻數(shù)字轉(zhuǎn)換器規(guī)模(VBR) |
-qdiff | int | E..V.. | 量化器的最大差異(VBR) |
-bf | int | E..V.. | 使用“幀”B幀 |
-b_qfactor | float | E..V.. | p和b之間的qp因子 |
-rc_strategy | int | E..V.. | ratecontrol方法 |
-b_strategy | int | E..V.. | 在I/P/ b幀之間選擇策略 |
-ps | int | E..V.. | rtp負(fù)載大小以字節(jié)為單位 |
-lelim | int | E..V.. | 亮度的單系數(shù)消除閾值(負(fù)值也考慮直流系數(shù)) |
-celim | int | E..V.. | 色度的單系數(shù)消除閾值(負(fù)值也考慮直流系數(shù)) |
-strict | int | ED.VA. | 如何嚴(yán)格遵循標(biāo)準(zhǔn),值為(請(qǐng)參閱ffmpeg幫助細(xì)節(jié)):very, strict, normal, unofficial, experimental |
-b_qoffset | float | E..V.. | qp偏移在P和B幀之間 |
-err_detect | flags | .D.VA. | 設(shè)置錯(cuò)誤檢測(cè)標(biāo)志,值為(請(qǐng)參閱ffmpeg幫助細(xì)節(jié)):crccheck, bitstream, buffer, explode, careful, compliant, aggressive |
-mpeg_quant | int | E..V.. | 使用MPEG量化器代替H.263 |
-qsquish | float | E..V.. | 如何在qmin - qmax (0=clip, 1=使用可微函數(shù))之間保持量化器 |
-rc_qmod_amp | float | E..V.. | 實(shí)驗(yàn)量化器調(diào)制 |
-rc_qmod_freq | int | E..V.. | 實(shí)驗(yàn)量化器調(diào)制 |
-rc_eq | string | E..V.. | 設(shè)置速度控制方程。在計(jì)算表達(dá)式時(shí),除了在數(shù)學(xué)函數(shù)章節(jié)中定義的標(biāo)準(zhǔn)函數(shù)外,還有以下函數(shù):bits2qp(bits), qp2bits(qp)。也可以使用以下常數(shù):iTex pTex texmv fCode iCount mcVar iount isB avgQP qComp avgpiex avgPPTex avgTex |
-i_qfactor | float | E..V.. | P和I之間的qp因子 |
-i_qoffset | float | E..V.. | qp偏移在P和I幀之間 |
-rc_init_cplx | float | E..V.. | 1-pass編碼的初始復(fù)雜度 |
-dct | int | E..V.. | DCT算法,值為(請(qǐng)參閱ffmpeg幫助細(xì)節(jié)):auto, fastint, int, mmx, altivec, faan |
-lumi_mask | float | E..V.. | 壓縮明亮的區(qū)域比中等的區(qū)域強(qiáng) |
-tcplx_mask | float | E..V.. | 時(shí)間復(fù)雜性掩蓋 |
-scplx_mask | float | E..V.. | 空間復(fù)雜性掩蓋 |
-p_mask | float | E..V.. | inter屏蔽 |
-dark_mask | float | E..V.. | 壓縮暗區(qū)比中型區(qū)域強(qiáng) |
-idct | int | ED.V.. | 選擇IDCT實(shí)現(xiàn),值為(請(qǐng)參閱ffmpeg幫助細(xì)節(jié)):auto, int, simple, simplemmx, libmpeg2mmx, mmi, arm, altivec, sh4, simplearm, simplearmv5te, simplearmv6, simpleneon, simplealpha, h264, vp3, ipp, xvidmmx, faani |
-ec | flags | .D.V.. | 設(shè)置錯(cuò)誤隱藏策略,值:guess_mvs(迭代運(yùn)動(dòng)矢量(MV)搜索(慢)),deblock (.D.V。使用強(qiáng)大的deblock過(guò)濾器,對(duì)損壞的MBs) |
-pred | int | E..V.. | 預(yù)測(cè)方法,值是(更多的見(jiàn)ffmpeg幫助):left, plane, median |
-vismv | int | .D.V.. | 可視化運(yùn)動(dòng)矢量(MVs),值是(更多的見(jiàn)ffmpeg幫助):pf, bf, bb |
-cmp | int | E..V.. | 完整的pel我比較函數(shù),值(更多的見(jiàn)ffmpeg幫助章節(jié)):sad, sse, satd, dct, psnr, bit, rd, 0, vsad, vsse, nsse, w53, w97, dctmax, chroma |
-subcmp | int | E..V.. | 比較函數(shù),值和-cmp選項(xiàng)(更多的見(jiàn)ffmpeg幫助章節(jié)) |
-mbcmp | int | E..V.. | macroblock比較函數(shù),值與-cmp選項(xiàng)(更多的是ffmpeg幫助里面) |
-ildctcmp | int | E..V.. | 交錯(cuò)dct比較函數(shù),值與-cmp選項(xiàng)(更多在ffmpeg幫助章節(jié)里面) |
-dia_size | int | E..V.. | 運(yùn)動(dòng)估計(jì)的diamond 類(lèi)型和尺寸 |
-last_pred | int | E..V.. | 從上一幀的運(yùn)動(dòng)預(yù)測(cè)器數(shù)量 |
-preme | int | E..V.. | 前運(yùn)動(dòng)估計(jì) |
-precmp | int | E..V.. | 前運(yùn)動(dòng)估計(jì)比較函數(shù),值與-cmp選項(xiàng)(更多的見(jiàn)ffmpeg幫助) |
-pre_dia_size | int | E..V.. | 運(yùn)動(dòng)預(yù)估的diamond類(lèi)型和尺寸 |
-subq | int | E..V.. | 子波運(yùn)動(dòng)估計(jì)質(zhì)量 |
-me_range | int | E..V.. | 極限運(yùn)動(dòng)矢量范圍(DivX播放器的1023) |
-ibias | int | E..V.. | 內(nèi)部定量偏差 |
-pbias | int | E..V.. | inter定量偏差 |
-coder | int | E..V.. | 值:vlc(可變長(zhǎng)度/huffman編碼器),ac(算術(shù)),raw(無(wú)編碼),rle(運(yùn)行長(zhǎng)度),deflate (deflate-based) |
-context | int | E..V.. | 上下文模型 |
-mbd | int | E..V.. | macroblock決策算法(高質(zhì)量模式),值為(請(qǐng)參閱ffmpeg幫助細(xì)節(jié)):simple, bits, rd |
-sc_threshold | int | E..V.. | 場(chǎng)景變化閾值 |
-lmin | int | E..V.. | 最小拉格朗日因子(VBR) |
-lmax | int | E..V.. | 最大拉格朗日因子(VBR) |
-flags2 | flags | ED.VA | 值(更多的見(jiàn)ffmpeg幫助):快速、sgop、noout、local_header、塊、showall、skiprd |
-threads | int | ED.V.. | 自動(dòng)數(shù)值(檢測(cè)大量線(xiàn)程) |
-dc | int | E..V.. | intra_dc_precision(不知道怎么翻譯) |
-nssew | int | E..V.. | nsse weight |
-skip_top | int | .D.V.. | 在頂部跳過(guò)的macroblock行數(shù) |
-skip_bottom | int | .D.V.. | 在底部跳過(guò)的macroblock行數(shù) |
-profile | int | E..VA. | 值(更多的鍵ffmpeg幫助):未知的,aac_main, aac_low, aac_ssr, aac_ltp, aac_he, aac_he_v2, aac_ld, aac_ld, dts, dts_es, dts 96 24, dts_hd_hra, dts_hd_ma |
-level | int | E..VA. | 數(shù)值:未知的 |
-lowres | int | .D.VA. | 解碼1= 1/2,2=1/4,3=1/8 |
-skip_factor | int | E..V.. | 幀跳躍因素 |
-skip_exp | int | E..V.. | 幀跳躍指數(shù) |
-skipcmp | int | E..V.. | 幀跳過(guò)比較函數(shù),與-cmp選項(xiàng)相同的值(更多的信息見(jiàn)幫助) |
-border_mask | float | E..V.. | 增加接近邊界的宏塊的量化器 |
-mblmin | int | E..V.. | min macroblock拉格朗日因子(VBR) |
-mblmax | int | E..V.. | max macroblock拉格朗日因子(VBR) |
-mepc | int | E..V.. | 運(yùn)動(dòng)估計(jì)比特率懲罰補(bǔ)償(1.0 = 256) |
-skip_loop_filter | int | .D.V.. | 值(更多的是ffmpeg幫助):none、default、noref、bidir、nokey、all |
-skip_idct | int | .D.V.. | 和-skip_loop里面參數(shù)的值是一樣的(更多內(nèi)容見(jiàn)ffmpeg幫助) |
-skip_frame | int | .D.V.. | 和-skip_loop里面參數(shù)的值是一樣的(更多內(nèi)容見(jiàn)ffmpeg幫助) |
-bidir_refine | int | E..V.. | 細(xì)化雙向宏塊中使用的兩個(gè)運(yùn)動(dòng)矢量 |
-brd_scale | int | E..V.. | 用于動(dòng)態(tài)b幀決策的下尺度框架 |
-keyint_min | int | E..V.. | 最小間隔IDR-frames |
-refs | int | E..V.. | 考慮運(yùn)動(dòng)補(bǔ)償?shù)膮⒖枷?/td> |
-chromaoffset | int | E..V.. | 色度qp從luma偏移 |
-trellis | int | E..VA. | 率失真優(yōu)化量化 |
-sc_factor | int | E..V.. | 每一幀乘以qscale,并添加到scene_change_score |
-b_sensitivity | int | E..V.. | 調(diào)整b_frame_strategy 1的靈敏度 |
-colorspace | int | ED.V.. | 名字的顏色空間 |
-slices | int | E..V.. | 片數(shù),用于并行編碼 |
-thread_type | flags | ED.V.. | 選擇多線(xiàn)程類(lèi)型,值:slice, frame |
-rc_init_occupancy | int | E..V.. | 在解碼開(kāi)始之前,要加載到rc緩沖區(qū)的位數(shù) |
-me_threshold | int | E..V.. | 運(yùn)動(dòng)估計(jì)閾值 |
-mb_threshold | int | E..V.. | macroblock閾值 |
-skip_threshold | int | E..V.. | 幀跳過(guò)閾值 |
-timecode_frame_start | int64 | E..V.. | GOP timecode框架啟動(dòng)號(hào)碼,在非下降幀格式 |
-request_channels | int | .D..A. | 設(shè)置所需的音頻通道數(shù) |
-channel_layout | int64 | ED..A. | 可用值:ffmpeg布局 |
-audio_service_type | int | E...A. | 音頻服務(wù)類(lèi)型,值(更多的見(jiàn)ffmpeg幫助):ma, ef, vi, hi, di, co, em, vo, ka |
-request_sample_fmt | s_fmt | .D..A. | 示例格式音頻解碼器應(yīng)使用(列表:ffmpeg -sample_fmts) |
有關(guān)如何使用某些選項(xiàng)的示例,請(qǐng)參閱“預(yù)設(shè)編解碼器”一章。 為了保持輸出質(zhì)量相同,我們使用-q
或-qscale [:stream_specifier]
選項(xiàng)來(lái)設(shè)置固定的質(zhì)量范圍,通常從1到31,其中值1表示最高質(zhì)量(某些編解碼器使用其他比例)。
雖然可以為任何編解碼器,容器或設(shè)備設(shè)置通用選項(xiàng),但私有選項(xiàng)是可以?xún)H為選定的編解碼器,容器或設(shè)備指定的附加選項(xiàng)。
除了通用選項(xiàng)之外,mpeg1video
編碼器可以使用表中描述的私有選項(xiàng):
選項(xiàng) | 類(lèi)型 | 描述 |
---|---|---|
-gop_timecode | string | MPEG GOP Timecode在hh:mm:ss[:;]ff格式 |
-intra_vlc | int | 使用MPEG-2 intra VLC表 |
-drop_frame_timecode | int | Timecode采用了drop - frame格式 |
-scan_offset | int | 預(yù)留空間用于SVCD掃描偏移用戶(hù)數(shù)據(jù) |
-mpv_flags | flags | 所有基于mpegvideo的編碼器通用的標(biāo)志,值是(更多的ffmpeg幫助):skip_rd, strict_gop, qp_rd, cbp_rd |
-luma_elim_threshold | int | 亮度的單系數(shù)消除閾值(負(fù)值也考慮直流系數(shù)) |
-chroma_elim_threshold | int | 色度的單系數(shù)消除閾值(負(fù)值也考慮直流系數(shù)) |
-quantizer_noise_shaping | int | 沒(méi)有描述 |
mpeg2video編碼器可以使用mpeg1視頻編碼器的所有選項(xiàng)和2個(gè)附加選項(xiàng):
選項(xiàng) | 類(lèi)型 | 描述 |
---|---|---|
-non_linear_quant | int | 使用非線(xiàn)性量化器 |
-alternate_scan | int | 啟用備用表掃描 |
mpeg4編碼器包括前面2個(gè)表中描述的下一個(gè)選項(xiàng):
data_partioning
alternate_scan
mpv_flags
luma_elim_threshold
chroma_elim_threshold
quantizer_noise_shaping
libvpx編碼器以WEBM格式為例,包括下一個(gè)選項(xiàng):
選項(xiàng) | 類(lèi)型 | 描述 |
---|---|---|
-cpu-used | int | 質(zhì)量/速度比修飾符 |
-auto-alt-ref | int | 啟用備用參考框架(僅2-pass) |
-lag-in-frames | int | 幀的數(shù)量,以展望備用參考幀的選擇 |
-arnr-maxframes | int | altref降噪最大幀數(shù) |
-arnr-strength | int | altref降噪濾波強(qiáng)度 |
-arnr-type | int | altref降噪濾波類(lèi)型,值為:向后、正向、中心 |
-deadline | int | 花在編碼上的時(shí)間,在微秒內(nèi),值是:最好的,好的,實(shí)時(shí)的 |
-error-resilient | flags | 錯(cuò)誤恢復(fù)配置:值(更多在ffmpeg幫助下):默認(rèn)值,分區(qū) |
-max-intra-rate | int | 最大i幀比特率(pct) 0=無(wú)限 |
-speed | int | 沒(méi)有描述 |
-quality | int | 價(jià)值是:最好的,好的,實(shí)時(shí)的 |
-vp8flags | flags | 值是(更多的ffmpeg幫助):error_, altref |
-arnr_max_frames | int | altref降噪最大幀數(shù) |
-arnr_strength | int | altref降噪濾波強(qiáng)度 |
-arnr_type | int | altref降噪濾波器類(lèi)型 |
-rc_lookahead | int | 幀的數(shù)量,以展望備用參考幀的選擇 |
-crf | int | 選擇質(zhì)量不變的質(zhì)量模式 |
ac3音頻編碼器可以使用表中描述的其他選項(xiàng):
選項(xiàng) | 類(lèi)型 | 描述 |
---|---|---|
per_frame_metadata | integer | 允許改變?cè)獢?shù)據(jù)每幀 |
center_mixlev | float | 中心組合水平 |
surround_mixlev | float | 圍繞混合水平 |
mixing_level | integer | 混合水平 |
room_type | integer | 房間類(lèi)型,值是:不指示,大,小 |
copyright | integer | 版權(quán)位 |
dialnorm | integer | 對(duì)話(huà)水平(dB) |
dsur_mode | integer | 杜比環(huán)繞模式,值:不顯示,打開(kāi),關(guān)閉 |
original | integer | 原始比特流 |
dmix_mode | integer | 首選立體聲調(diào)合模式,值:不顯示 |
ltrt_cmixlev | float | lt / rt中心混合水平 |
ltrt_surmixlev | float | lt / rt環(huán)繞混合水平 |
loro_cmixlev | float | lo / ro中心混合水平 |
loro_surmixlev | float | lo / ro環(huán)繞混合水平 |
dsurex_mode | integer | Dolby環(huán)繞EX模式,值:不顯示,on, off |
dheadphone_mode | integer | 杜比耳機(jī)模式,值:不顯示,打開(kāi),關(guān)閉 |
ad_conv_type | integer | A/D轉(zhuǎn)換器類(lèi)型,值:標(biāo)準(zhǔn)(默認(rèn)),hdcd |
stereo_rematrixing | integer | 立體重映射 |
channel_coupling | integer | 通道耦合 值:自動(dòng) |
cpl_start_band | integer | 耦合開(kāi)始band 值:自動(dòng) |
一個(gè)特殊的目標(biāo)選項(xiàng)只允許使用一個(gè)選項(xiàng),而不是特定媒體類(lèi)型所需要的大量選項(xiàng)(VCD=視頻CD、SVCD=超級(jí)視頻CD、DV=數(shù)字視頻等),可用的值為:
vcd, pal-vcd, ntsc-vcd, film-vcd
svcd, pal-svcd, ntsc-svcd, film-svcd
dvd, pal-dvd, ntsc-dvd, film-dvd
dv, pal-dv, ntsc-dv, film-dv
dv50, pal-dv50, ntsc-dv50, film-dv50
所有需要的參數(shù),如幀率、縱橫比、比特率等都是根據(jù)特定媒體格式的規(guī)格設(shè)置的。例如,為DVD的視頻編碼我們可以使用命令:
ffmpeg -i input.avi -target dvd output.mpg
聯(lián)系客服