1. 概要
2. 說明
每個輸入或輸出文件可以在原則上,包含任意數(shù)量的不同類型(視頻/音頻/字幕/附件/數(shù)據(jù))的流。輸出文件中允許流的數(shù)量和類型是由輸出格式容器限制決定的。輸入流和輸出流直接的映射可以自動完成也可以用 引用輸入文件的選項時,則必須使用他們的索引(從0開始)。例如:第一輸入文件是 作為一般規(guī)則,選項作用于下一個指定的文件。因此,命令的順序是重要,你可以在命令行上多次相同的選項。每次選項的出現(xiàn)都將作用于下一個輸入或輸出文件。這條規(guī)則若有例外將會提前聲明(例如冗余級別)。 不要混合輸入和輸出文件。首先指定所有輸入文件,那么所有的輸出文件。也不要混用屬于不同的文件的選項。所有選項僅適用于下一個輸入或輸出文件,之后選項將被重置。 設(shè)置輸出文件以64千比特/秒的視頻比特率:
要強(qiáng)制輸出文件為24 fps的幀速率:
要強(qiáng)制輸入文件的幀頻(僅對原始格式有效),以1 FPS讀入文件,以每秒24幀的幀速率輸出:
3. 詳細(xì)描述在轉(zhuǎn)碼過程ffmpeg每個輸出可以由以下圖描述: _______ ______________ | | | | | input | demuxer | encoded data | decoder | file | ---------> | packets | -----+ |_______| |______________| | v _________ | | | decoded | | frames | |_________| ________ ______________ | | | | | | | output | <-------- | encoded data | <----+ | file | muxer | packets | encoder |________| |______________|
3.1 濾鏡在編碼之前, 3.1.1 簡單filtergraphs簡單filtergraphs是那些具有相同的類型且正好一個輸入和輸出的濾鏡組。另外,在上圖中,他們可以由簡單地在解碼和編碼之間插入附加步驟來表示: _________ ______________ | | | | | decoded | | encoded data | | frames |\ _ | packets | |_________| \ /||______________| \ __________ / simple _\|| | / encoder filtergraph | filtered |/ | frames | |__________| 簡單filtergraphs配置了每個流的篩選器選項(與視頻和音頻分別-vf和-af別名)。一個簡單的FilterGraph動態(tài)視頻可以看一下這樣的例子: _______ _____________ _______ ________ | | | | | | | | | input | ---> | deinterlace | ---> | scale | ---> | output | |_______| |_____________| |_______| |________| 需要注意的是一些濾鏡改變幀屬性而不是畫面的內(nèi)容。例如,在上例中, 3.1.2 復(fù)雜filtergraphs復(fù)雜filtergraphs是那些不能被描述為簡單的線性處理鏈的濾鏡組。例如,當(dāng)濾鏡組具有多個輸入和/或輸出,或當(dāng)輸出流的類型是不同于輸入。它們可以被表示為以下圖: _________ | | | input 0 |\ __________ |_________| \ | | \ _________ /| output 0 | \ | | / |__________| _________ \| complex | / | | | |/ | input 1 |---->| filter ||_________| | | \ __________ /| graph | \ | | / | | \| output 1 | _________ / |_________| |__________| | | / | input 2 |/ |_________| 復(fù)雜filtergraphs可使用
一個復(fù)雜FilterGraph動態(tài)的簡單的例子是在 3.2 復(fù)制流復(fù)制流是通過添加 _______ ______________ ________ | | | | | | | input | demuxer | encoded data | muxer | output | | file | ---------> | packets | -------> | file | |_______| |______________| |________| 由于不存在解碼或編碼,它是非???,沒有質(zhì)量損失。然而因為許多因素的工作,它可能無法在某些情況下使用。應(yīng)用濾鏡顯然也是不可能的,因為濾鏡僅能作用在未壓縮的數(shù)據(jù)上。 4 選擇流默認(rèn)情況下, 您可以通過 5 選項所有的數(shù)值選項中,如果不另外指明,均表示接受數(shù)作為輸入,其后可添加一個SI單位的字符串,例如: 如果 選項??不帶參數(shù)是布爾選項,并設(shè)置相應(yīng)的值設(shè)置為 5.1 流標(biāo)識符有些選項是按流的,例如比特率或編解碼器。流標(biāo)識符被用來精確地指定一個給定的選項作用于哪一個數(shù)據(jù)流(多個)。 一個標(biāo)識符一般是選項名稱加冒號分隔的字符串。例如 一個標(biāo)識符可以匹配多個流,這個選項將適用于所有流。比如,流標(biāo)識符 空標(biāo)識符匹配所有的流。例如, 流標(biāo)識符的可能形式有:
匹配與該索引對應(yīng)的流。例如
流類型是下列字母之一:
如果給定
按流索引逐一匹配流(如在MPEG-TS容器中的PID)。
匹配流的元數(shù)據(jù)標(biāo)簽中具有指定 請注意,在 5.2 通用選項這些選項當(dāng)中的FF *工具共享。
顯示許可證。
顯示幫助。一個可選參數(shù)可以被指定為打印與特定項目相關(guān)的幫助。如果沒有指定參數(shù),則只顯示基本的(非高級)工具選項。
`long` 除了基本的工具選項外,打印高級的工具選項。 `full` 打印所有選項,包括編碼器,解碼器,分流器,混合器,濾鏡等的共享和私有選項。 `decoder=decoder_name` 打印有關(guān)的解碼器`decoder_name`的詳細(xì)信息。使用`-decoders`選項來獲得所有的解碼器的列表。 `encoder=encoder_name` 打印有關(guān)指定編碼器`encoder_name`的詳細(xì)信息。使用`-encoders`選項來獲得所有編碼器的列表。 `demuxer=demuxer_name` 打印有關(guān)的分流器`demuxer_name`的詳細(xì)信息。使用`-formats`選項來獲取所有分流器和混合器的列表。 `muxer=muxer_name` 打印有關(guān)混合器`muxer_name`的詳細(xì)信息。使用`-formats`選項來獲取所有混合器和分流器的列表。 `filter=filter_name` 打印有關(guān)濾鏡`filter_name`的詳細(xì)信息。使用`-filters`選項來獲得所有濾鏡的列表。
顯示的版本。
顯示可用的格式(包括設(shè)備)。
顯示可用的設(shè)備。
顯示libavcodec已知的所有編解碼器。 注意,整個文檔中術(shù)語“解碼器”更正確地稱呼是比特流媒體格式(media bitstream format)。
顯示可用的解碼器。
顯示所有可用的編碼器。
顯示可用的流濾鏡。
顯示可用的協(xié)議。
顯示可用的libavfilter濾鏡。
顯示可用的像素格式。
顯示可用的采樣格式。
顯示頻道名稱和標(biāo)準(zhǔn)的渠道布局。
顯示公認(rèn)的顏色名稱。
顯示自動檢測到的輸入設(shè)備的源。某些設(shè)備可提供不能自動檢測系統(tǒng)相關(guān)的源名稱。返回的列表不能被假定為總是完整的。 `ffmpeg -sources pulse,server=192.168.0.4`
自動檢測顯示輸出設(shè)備的接收器。某些設(shè)備可提供不能自動檢測系統(tǒng)相關(guān)的接收器名稱。返回的列表不能被假定為總是完整的。 `ffmpeg -sinks pulse,server=192.168.0.4`
設(shè)置庫使用的日志記錄級別。加入 `quiet, -8` 保持沉默。 `panic, 0` 只顯示可能導(dǎo)致程序崩潰的致命錯誤。目前沒有此類錯誤。 `fatal, 8` 只顯示致命錯誤。這些錯誤會導(dǎo)致進(jìn)程絕對無法繼續(xù)。 `error, 16` 顯示所有的錯誤,包括那些可以修復(fù)的。 `warning, 24` 顯示所有警告和錯誤。將顯示任何有關(guān)可能不正確或不正常事件的信息。 `info, 32` 顯示處理過程中的信息。不單單是警告和錯誤。這是默認(rèn)值。 `verbose, 40` 與info類似 ,但更詳細(xì)。 `debug, 48` 顯示一切信息,包括調(diào)試信息。 默認(rèn)情況下,程序日志輸出到標(biāo)準(zhǔn)錯誤流,如果終端支持著色,顏色用來標(biāo)記錯誤和警告。日志著色可以被環(huán)境變量AV_LOG_FORCE_NOCOLOR或NO_COLOR ,或者可以被強(qiáng)制設(shè)置環(huán)境變量AV_LOG_FORCE_COLOR 禁用。使用環(huán)境變量NO_COLOR已被棄用,并在之后的FFmpeg的版本將被丟棄。
轉(zhuǎn)儲完整的命令行和控制臺輸出到當(dāng)前目錄一個文件名 ??為 將環(huán)境變量設(shè)置 下列選項也可使用: `file` 設(shè)置報告使用的文件名??; %p添加程序名, %t添加時間戳, %%添加一個普通的% `level` 設(shè)置使用的數(shù)值(查看日志詳細(xì)級別`-loglevel` )。 例如,要輸出到名為
非致命的環(huán)境變量的解析錯誤不會出現(xiàn)在報告中。
不打印橫幅。 所有FFmpeg的工具通常會顯示一個版權(quán)聲明,構(gòu)建選項和庫版本。此選項可以用來抑制打印此信息。
允許設(shè)置和清除CPU標(biāo)志。此選項用于測試。不要使用它,除非你知道自己在做什么。 ffmpeg -cpuflags -sse+mmx ... ffmpeg -cpuflags mmx ... ffmpeg -cpuflags 0 ... 可能選項有: `x86` ‘mmx’ ‘mmxext’ ‘sse’ ‘sse2’ ‘sse2slow’ ‘sse3’ “sse3slow” ‘ssse3’ ‘a(chǎn)tom’ ‘sse4.1’ ‘sse4.2’ ‘a(chǎn)vx’ ‘xop’ ‘fma4’ ‘3dnow’ ‘3dnowext’ ‘cmov’ `ARM` ‘a(chǎn)rmv5te’ ‘a(chǎn)rmv6’ ‘a(chǎn)rmv6t2’ ‘vfp’ ‘vfpv3’ ‘neon’ ‘PowerPC’ ‘a(chǎn)ltivec’ `Specific Processors` ‘pentium2’ ‘pentium3’ ‘pentium4’ ‘k6’ ‘k62’ ‘a(chǎn)thlon’ ‘a(chǎn)thlonxp’ ‘k8’
測試所有可用的OpenCL設(shè)備并顯示結(jié)果。此選項僅當(dāng)FFmpeg含有–enable-opencl 編譯時可用。
設(shè)置的OpenCL環(huán)境選項。此選項僅當(dāng)FFmpeg的已編譯–enable-opencl 。 options必須是冒號分隔的key = value選項對。參見ffmpeg-utils的手冊中的“OpenCL的選項”部分的內(nèi)容。 5.3 AVOption選項這些選項直接由 generic 這些選項可以為任何容器,編解碼器或設(shè)備進(jìn)行設(shè)置。通用的選項都列在AVFormatContext選擇容器/設(shè)備和AVCodecContext選擇編解碼器小節(jié)。 private 這些選項是作用于給定的容器,裝置或編解碼器。私有選項列在其相應(yīng)的容器/設(shè)備/編解碼器。 比如編輯ID3v2.3頭而不是默認(rèn)的ID3v2.4到MP3文件,使用MP3混合器的
所有編解碼器AVOption選項是按流指定的,并且因此應(yīng)該指定相應(yīng)的流標(biāo)識符。 注: 注:老的前綴v/a/s的流標(biāo)識記號已經(jīng)過時,將被移除。 5.4 主要選項
強(qiáng)制指定輸入或輸出的文件格式。輸入文件的格式通常是自動檢測的,輸出文件的格式由該文件的擴(kuò)展名猜測,所以在大多數(shù)情況下不需要此選項。
輸入的文件名
直接覆蓋輸出文件。
如果指定的輸出文件已經(jīng)存在,不要覆蓋輸出文件,并立即退出。
用于對一個或多個數(shù)據(jù)流指定一個編碼器(一個輸出文件之前使用時)或一個解碼器(一個輸入文件之前使用時)。 codec是一個解碼器/編碼器的名稱或特殊值copy (僅輸出),copy表示該流不是被重新編碼。 例如 `ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT` 使用libx264編碼所有視頻流并拷貝所有音頻流。 對于每個數(shù)據(jù)流,最后匹配的 `ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT` 將復(fù)制的所有流除了第二視頻流,并將用libx264進(jìn)行編碼,并且對于第138個音頻流用libvorbis進(jìn)行編碼。
當(dāng)作為輸入選項(在 當(dāng)作為輸出選項(輸出文件名之??前)使用,在達(dá)到
在
設(shè)置文件大小限制,以字節(jié)表示。
當(dāng)用作輸入選項一起使用(在 當(dāng)用作輸出選項(在輸出文件名??前),解碼但丟棄輸入直到時間戳到達(dá)的位置。
設(shè)置輸入時間偏移。
偏移被添加到輸入文件的時間戳。指定一個正偏移意味著相應(yīng)流將延遲offset所指定的時間。
設(shè)置在容器內(nèi)記錄的時間戳。 date必須是一個規(guī)范的持續(xù)時間,請參閱(ffmpeg-utils)在FFmpeg-utils的(1)日期部分 。
設(shè)置元數(shù)據(jù)的鍵/值對。 可選 此選項將覆蓋 例如,設(shè)置輸出文件的標(biāo)題: `ffmpeg -i in.avi -metadata title="my title" out.flv` 設(shè)置第一個音頻流的語言: `ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT`
指定目標(biāo)文件類型( vcd , svcd , dvd , dv , dv50 )。 類型可能與前綴 `ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg` 不過,你可以指定其他選項,只需你知道他們與標(biāo)準(zhǔn)不沖突,如: ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
設(shè)置輸出數(shù)據(jù)的幀數(shù)。這是
在
使用固定編碼率(VBR)。
創(chuàng)建由FilterGraph指定的濾鏡組并使用它。 FilterGraph是作用于流的濾鏡組的描述,而且必須有一個單一的輸入和同一類型的數(shù)據(jù)流輸出。 在濾鏡組里,輸入被關(guān)聯(lián)到 如果你想創(chuàng)建具有多個輸入或輸出的濾鏡組,參見
這個選項類似于
指定匹配流(S)的預(yù)設(shè)。
打印編碼進(jìn)度/統(tǒng)計數(shù)據(jù)。這是默認(rèn)值,你可通過指定
發(fā)送程序友好的進(jìn)展信息到 進(jìn)度信息大約每秒和編碼過程結(jié)束后寫入。它是由
啟用標(biāo)準(zhǔn)輸入交互。這是默認(rèn)設(shè)置,除非標(biāo)準(zhǔn)輸入被作為輸入。要明確禁用互動,你需要指定 在標(biāo)準(zhǔn)輸入禁用相互作用是很有用的,例如,如果ffmpeg在后臺進(jìn)程組中。大致相同的結(jié)果可以用
打印時間戳信息。它默認(rèn)是關(guān)閉的。此選項主要是用于測試和調(diào)試目的,輸出格式可從一個版本切換到另一個,所以它不應(yīng)該在可移植腳本中使用。 參見
添加一個附件到輸出文件。這僅由幾個格式支持。例如Matroska格式,這個文件可以是用來渲染字幕使用的字體。附件被實現(xiàn)為數(shù)據(jù)流的一個特定類型的,因此該選項將增加一個新的流的文件。因此,可以以通常的方式在此流使用每個流的選??項。使用此選項創(chuàng)建的附件流將所有的其他流之后創(chuàng)建(也即那些由 請注意,對于Matroska,你還必須設(shè)置 `ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv` (假設(shè)該附件流將是輸出文件的第三個流)。
提取匹配的附件流成一個名??為 例如,提取第一附件到“out.ttf”: `ffmpeg -dump_attachment:t:0 out.ttf -i INPUT` 提取所有附件,并按照filename ?標(biāo)簽命名文件: `ffmpeg -dump_attachment:t "" -i INPUT` 技術(shù)說明 - 附件是通過編解碼器額外數(shù)據(jù)實現(xiàn)的,所以這個選項實際上可以用來提取任意額外數(shù)據(jù),而不僅僅是附件。 5.5 視頻選項
設(shè)置視頻幀的輸出數(shù)量。這是的
設(shè)置幀速率(Hz值,分?jǐn)?shù)或縮寫)。 作為輸入選項,忽略存儲在文件中的任何時間戳,而是產(chǎn)生時間戳假設(shè)恒定的幀速率fps這與一些輸入格式,諸如image2或者v4l2,中的 作為輸出選項,復(fù)制或刪除輸入幀以達(dá)到恒定的輸出幀速率fps。
設(shè)置幀尺寸。 作為輸入的選項,這是私有選項 作為輸出的選擇,這將插入 格式是
設(shè)置指定視頻顯示的寬高比
如果與
禁用視頻錄制。
設(shè)置視頻編解碼器。這是-codec:v的別名。
選擇通過次數(shù)(1或2)。它是用來做兩遍視頻編碼。視頻的統(tǒng)計信息記錄在第一次編碼時寫入到日志文件中(也參見選項 `ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL` `ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null`
設(shè)置二次編碼的日志文件名 ??前綴為
創(chuàng)建由 這是 5.6 高級視頻選項
設(shè)置的像素格式。使用
設(shè)置軟件縮放的標(biāo)志。
丟棄的閾值。
覆蓋特定的時間間隔內(nèi)的幀率控制,格式為用斜杠分隔的“整型,整型,整型”列表。前兩個值是在開始和結(jié)束幀編號,最后一個如果是正數(shù),則為量化器;負(fù)數(shù)則為品質(zhì)因數(shù)。
支持編碼器force interlacing(僅對MPEG-2和MPEG-4有效)。如果你的輸入文件是隔行并要保持隔行格式最小損失,請使用此選項。另一種方法是使用
計算壓縮幀的PSNR(偽信噪比)。
輸出視頻編碼統(tǒng)計到
輸出頻編碼統(tǒng)計到
top=1/bottom=0/auto=-1 field first
Intra_dc_precision.
強(qiáng)制視頻 tag/ fourcc。這是
顯示QP直方圖
已拋棄,見
強(qiáng)制關(guān)鍵幀在指定的時間戳,更精確地在每個指定的時間之后的第一幀。 如果參數(shù)的前綴 如果時間之一是 例如,在5分鐘插入一個關(guān)鍵幀,同時在每章開始前0.1秒插入一個關(guān)鍵幀: `-force_key_frames 0:05:00,chapters-0.1`
`n` 當(dāng)前處理的幀的數(shù)量,從0開始 `n_forced` 強(qiáng)制幀的數(shù)量 `prev_forced_n` 先前強(qiáng)制幀的數(shù)目,當(dāng)沒有強(qiáng)制的關(guān)鍵幀時,它是NAN `prev_forced_t` 先前強(qiáng)制幀的時間,當(dāng)沒有強(qiáng)制關(guān)鍵幀時,它是NAN `t` 當(dāng)前處理的幀的時間 例如每5秒強(qiáng)制插入一個關(guān)鍵幀,你可以使用: `-force_key_frames expr:gte(t,n_forced*5)` 自13秒開始,強(qiáng)制插入一個關(guān)鍵幀在上一強(qiáng)制關(guān)鍵幀后5秒: `-1-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))` 需要注意的是太多強(qiáng)制的關(guān)鍵幀對某些編碼器的超前算法是非常有害的:使用固定的GOP選項或類似選項會更有效。
當(dāng)復(fù)制流時,也復(fù)制起始處的非關(guān)鍵幀。
使用硬件加速解碼匹配流。 `none` 不要使用任何硬件加速(默認(rèn))。 `auto` 自動選擇硬件加速的方法。 `vda` 使用蘋果VDA硬件加速。 `vdpau` 使用VDPAU(視頻解碼和演示API對于Unix)硬件加速。 `dxva2` 使用DXVA2(DirectX視頻加速)硬件加速。 如果選擇的hwaccel不可用或不支持選擇的解碼器,此選項沒有效果。 注意,大多數(shù)加速方法適用于播放,但并不會比現(xiàn)代CPU軟件解碼更快。此外, ffmpeg通常需要解碼幀從GPU存儲器復(fù)制到系統(tǒng)存儲器,從而導(dǎo)致進(jìn)一步的性能損失。因此此選項主要用于測試。
選擇一個設(shè)備使用硬件加速。 此選項僅使得同時與 `vdpau` 對于VDPAU,此選項在X11中使用。如果沒有指定這個選項, DISPLAY環(huán)境變量的值被使用 `dxva2` 對于DXVA2,這個選項應(yīng)包含在顯示適配器使用的數(shù)量。如果未指定此選項,默認(rèn)的適配器將被使用。 5.7 音頻選項
設(shè)定的音頻幀輸出的數(shù)目。這是
設(shè)置音頻采樣頻率。對于輸出流,將默認(rèn)設(shè)置為相應(yīng)的輸入流的采樣頻率。對于輸入流該選項僅對音頻抓取設(shè)備和raw格式分流器和映射到相應(yīng)分流器上的選項有效。
設(shè)置音頻質(zhì)量(與編解碼器有關(guān),VBR)。這是
設(shè)置音頻通道的數(shù)目。輸出流默認(rèn)將設(shè)置為輸入音頻信道的數(shù)目。對于輸入流該選項僅對音頻抓取設(shè)備和raw格式分流器和映射到相應(yīng)分流器上的選項有效。
禁用錄音。
設(shè)置音頻解碼器。這是
設(shè)置音頻樣本格式。使用
創(chuàng)建由FilterGraph指定的濾鏡組并使用它。 這是 5.8 高級音頻選項
強(qiáng)制音頻
已過時,參見
如果一些輸入通道布局是未知的,試圖猜測它最多的聲道數(shù)量。例如,2要求ffmpeg識別1個通道為單聲道和2聲道立體聲,6聲道作為5.1。默認(rèn)是總是試圖去猜測。用0來禁用所有的猜測。 5.9 字幕選項
設(shè)置字幕的編解碼器。這是
關(guān)閉字幕記錄。
已過時,參見 5.10 高級字幕選項
調(diào)整字幕的持續(xù)時間。對于每個字幕,等待在相同的流中的下一個分組,并調(diào)節(jié)第一持續(xù)時間,以避免重疊。這對某些字幕編解碼器是必要的,特別是數(shù)字電視廣播字幕(DVB),因為在原來的分組的持續(xù)時間僅僅是一個粗略的估計,結(jié)束標(biāo)記是通過一個空的字幕幀完成的。沒有使用這個選項在必要時可導(dǎo)致夸張的持續(xù)時間,或由于非單調(diào)時間戳混流故障。 注意,此選項將延遲所有數(shù)據(jù)的輸出直到下一個字幕分組被解碼:它可能會增加內(nèi)存消耗和延遲。
設(shè)置用于呈現(xiàn)字幕的畫布的大小。 5.11 高級選項
指定一個或多個輸入流作為用于輸出文件的來源。每個輸入流由輸入文件索引 在命令行上第一個 一個連字符 另一種 例如,映射第一輸入文件的所有流到輸出 ffmpeg -i INPUT -map 0 output 例如,如果在第一輸入文件中的兩個音頻流,這些流記為“0:0”,“0:1”。您可以使用-map選擇哪個流輸出到輸出文件。例如: ffmpeg -i INPUT -map 0:1 out.wav 將映射INPUT的輸入數(shù)據(jù)流“0:1”到在(單)輸出流out.wav。 例如,從輸入文件a.mov選擇索引2流(由識別符“0:2”指定的)與從輸入b.mov索引6(由識別符“1:6”指定)流,復(fù)制到輸出文件out.mov: ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov 選擇所有的視頻??和輸入文件中的第三音頻流: ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT 映射所有的數(shù)據(jù)流,除了第二音頻,使用否定的映射 ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT 選擇英語音頻流: ffmpeg -i INPUT -map 0:m:language:eng OUTPUT 請注意,使用此選項將禁用此輸出文件的默認(rèn)映射。
映射從一個給定的輸入音頻聲道到輸出。如果 使用 例如,假設(shè)INPUT是一個立體聲音頻文件,你可以切換兩個音頻通道與下面的命令: ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT 如果您想要靜音的第一聲道,并保留第二個: ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
您也可以提取各個輸入通道到特定的輸出;以下命令中提取的兩個通道的INPUT音頻流(文件0,流0)到相應(yīng)的 ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1 以下示例拆分立體聲輸入的通道成兩個獨立的數(shù)據(jù)流,其被放入同一個輸出文件: ffmpeg -i stereo.wav -map 0:0 -map 0:1 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg 注意,目前每個輸出流只能包含來自單個輸入流的聲道;不能使用 如果你需要這個功能,一個可能的解決方法是使用 ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
根據(jù) `g` 全局元數(shù)據(jù),即元數(shù)據(jù)應(yīng)用于整個文件 `s[:stream_spec]` 每個流的元數(shù)據(jù)`stream_spec`是一個流標(biāo)識符,參見流標(biāo)識符一章。在輸入的元數(shù)據(jù)時,將從第一個匹配的流復(fù)制。在輸出元數(shù)據(jù)時,將復(fù)制到所有匹配流。 `c:chapter_index` 每章的元數(shù)據(jù)`chapter_index`是從零開始的章節(jié)索引。 `p:program_index` 每個項目的元數(shù)據(jù)`program_index`是從零開始的的項目索引。 如果元數(shù)據(jù)說明被省略,則默認(rèn)為全球性的。 缺省情況下,全局元數(shù)據(jù)是從第一輸入文件復(fù)制的,每個流和每個章節(jié)的元數(shù)據(jù)與數(shù)據(jù)流/章節(jié)將被依次復(fù)制。創(chuàng)建相關(guān)類型的任何映射將禁用這些默認(rèn)映射。否定的文件索引可以用來創(chuàng)建只禁用自動復(fù)制的虛擬映射。 例如,從輸入文件的第一數(shù)據(jù)流復(fù)制元數(shù)據(jù)到輸出文件的全局元數(shù)據(jù): ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3 反過來,即全局的元數(shù)據(jù)復(fù)制到所有音頻流: ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv 需要注意的是0在本實例中能起到相同的效果,由于全局元數(shù)據(jù)被假定默認(rèn)。
從輸入文件復(fù)制章節(jié)與索引
在編碼結(jié)束顯示基準(zhǔn)信息。顯示使用的CPU時間和最大內(nèi)存消耗。不是所有系統(tǒng)都支持最大內(nèi)存消耗,如果不支持,它通常會顯示為0。
顯示編碼過程中基準(zhǔn)信息。顯示各個步驟(音頻/視頻編碼/解碼)所使用的CPU時間。
在已經(jīng)運(yùn)行
轉(zhuǎn)儲每個輸入包到標(biāo)準(zhǔn)錯誤流。
當(dāng)dump包時,也dump有效載荷。
讀取輸入的原始幀速率。主要用于模擬抓取設(shè)備?;?qū)崟r輸入流(例如從文件讀取時)。不應(yīng)該在實際的抓取設(shè)備或?qū)崟r輸入流中使用(它可能會導(dǎo)致數(shù)據(jù)包丟失)。默認(rèn)ffmpeg嘗試盡可能快地讀出輸入端。此選項會減慢輸入的本地幀速率的讀取。它是用于實時輸出(如直播)是有用的。
循環(huán)輸入流。目前,它僅適用于圖像流。此選項用于自動測試
反復(fù)循環(huán)輸出支持循環(huán)的格式如動畫GIF(0意味著無限循環(huán)輸出)。此選項已被棄用,使用
視頻同步方法。出于兼容性考慮舊值可以被指定為數(shù)字。新添加的值將必須總是指定為字符串。 0, passthrough 每一幀傳遞從分流器到復(fù)用器的時間戳。 1, cfr 幀將被復(fù)制并下降至達(dá)到完全所需的恒定幀速率。 2, vfr 幀通過與其時間戳或下降,從而防止兩幀具有相同的時間戳。 drop 與passthrough相同,但破壞所有時間戳,使得復(fù)用器生成基于幀速率新的時間戳。 -1, auto 根據(jù)復(fù)用器的功能選擇1或者2。這是默認(rèn)的方法。 注意,該時間戳在此之后可以進(jìn)一步由復(fù)用器修改。例如,在格式選項 與
音頻同步的方法?!吧煺?擠壓”音頻流相匹配的時間戳,所述參數(shù)是音頻發(fā)生改變所容許的每秒最大點數(shù)。 注意,該時間戳在此之后可以進(jìn)一步由復(fù)用器修改。例如,在格式選項 此選項已被棄用。使用
不要處理輸入時間戳,但保持它們的值,不嘗試對它們進(jìn)行sanitize。尤其是,不要刪除初始啟動時間偏移值。 需要注意的是,即使使用了該選項,根據(jù)不同的
當(dāng)與 這意味著使用例如
指定在拷貝流時如何設(shè)置編碼器的時間基準(zhǔn),mode是一個整型,可以假定為下列值之一: 1 使用分流器的時間基準(zhǔn)。 時間基準(zhǔn)從相應(yīng)的輸入分流器復(fù)制到輸出編碼器。該情況下,對可變幀速率的視頻流的復(fù)制,有時需要避免非單調(diào)的時間戳。 0 使用解碼器時間基準(zhǔn)。 時間基準(zhǔn)從相應(yīng)的輸入解碼器復(fù)制到輸出編碼器。 -1 嘗試自動做出選擇,以便產(chǎn)生一個合理的輸出。 默認(rèn)值為-1。
最短的輸入流結(jié)束時完成編碼。
時間戳間斷門檻。
設(shè)置最大分流解碼延時。
設(shè)定初始解碼分流延遲。
分配一個新流id值到輸出流。該選項?需指定到輸出文件名之前。對于在多個輸出文件存在的情況下,一個流id將被重新分配到不同的值。 例如,要設(shè)置流0 到流33,同時流1至流36,到MPEGTS格式的輸出文件: ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
指定匹配流的 ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264 ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
指定匹配流的
指定寫入的時間碼。對于non drop 時間碼,分隔符SEP是 ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
定義復(fù)雜FilterGraph,即具有輸入和/或輸出任意個數(shù)的濾鏡組。對于簡單濾鏡——那些具有一個輸入和相同類型的一個輸出的濾鏡——參見 輸入鏈路標(biāo)簽必須關(guān)聯(lián)到使用 輸出鏈接標(biāo)簽由 注意,使用該選項,可以只有l(wèi)avfi源而沒有正常的輸入文件。 例如,疊加圖像到視頻 ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map '[out]' out.mkv 這里[0:v]指的是在第一輸入文件中的第一視頻流,這是與覆蓋濾波器的第一(主)輸入。同樣,在第二輸入的第一視頻流鏈接到覆蓋層的第二(覆蓋)輸入。 假定在每個輸入文件中只有一個視頻流,就可以省略輸入標(biāo)簽,因此上述命令相當(dāng)于 ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map'[out]' out.mkv 此外,我們可以省略輸出標(biāo)簽和單輸出的濾鏡,它將被自動添加到輸出文件,所以我們可以簡單地寫 ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv 要使用lavfi產(chǎn)生5秒鐘的純紅色視頻color來源: ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
定義復(fù)雜FilterGraph,即具有輸入和/或輸出任意個數(shù)的濾鏡組。相當(dāng)于
這個選項類似于
此選項啟用或禁用準(zhǔn)確尋求輸入文件,配合
從ffserver 覆蓋輸入規(guī)格。使用這個選項,你可以映射任何輸入流到ffserver,并從ffmpeg 控制編碼的許多方面。如果沒有這個選項ffmpeg將發(fā)送ffserver要求的內(nèi)容。 該選項用于那些不能被指定到ffserver的功能 ,即便他們可以用于ffmpeg 。
允許在分路器丟棄特定流或流幀。不是所有的分路器都支持。 none 禁止丟棄幀。 default 默認(rèn)情況下,不丟棄幀。 noref 丟棄所有非參考幀。 bidir 放棄所有雙向幀。 nokey 丟棄所有幀除了關(guān)鍵幀。 all 丟棄所有幀。 作為一個特例,可以使用一個位圖字幕流作為輸入:它將被轉(zhuǎn)換到文件中最大的視頻相同尺寸,或720×576,如果沒有視頻。需要注意的是,這是一個實驗性和臨時解決方案。它會在libavfilter有適當(dāng)字幕支持后刪除。 例如,硬編碼存儲在MPEG-TS格式的DVB-T的記錄的頂部字幕,1秒延遲字幕: ffmpeg -i input.ts -filter_complex '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' -sn -map '#0x2dc' output.mkv (0x2d0,0x2dc和0x2ef分別是MPEG-TS的PID的視頻,音頻和字幕流; 0:0,0:3和0:7可起到同樣作用) 5.12 預(yù)置文件預(yù)置文件是包含 Preset files are specified with the vpre, apre, spre, and fpre options. The fpre option takes the filename of the preset instead of a preset name as input and can be used for any kind of codec. For the vpre, apre, and spre options, the options specified in a preset file are applied to the currently selected codec of the same type as the preset option. The argument passed to the vpre, apre, and spre preset options identifies the preset file to use according to the following rules: First ffmpeg searches for a file named arg.ffpreset in the directories FFMPEGDATADIR(ifset),andHOME/.ffmpeg, and in the datadir defined at configuration time (usually PREFIX/share/ffmpeg) or in a ffpresets folder along the executable on win32, in that order. For example, if the argument is libvpx-1080p, it will search for the file libvpx-1080p.ffpreset. If no such file is found, then ffmpeg will search for a file named codec_name-arg.ffpreset in the above-mentioned directories, where codec_name is the name of the codec to which the preset file options will be applied. 6 提示
7 范例7.1 預(yù)置文件預(yù)置文件包含option=value,一個用于每行,指定其也可以指定的命令行上的選項的序列的序列?!!_頭的字符行被忽略,并用來提供注釋??招袑⒁脖缓雎?。檢查的例子FFmpeg的源代碼樹中的preset目錄。 預(yù)置文件中指定的pre選項,這個選項需要一個預(yù)設(shè)名稱作為輸入。FFmpeg在 7.2 視頻和音頻抓取如果指定了輸入格式和設(shè)備,ffmpeg將可以直接抓取視頻和音頻。 ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg 或從ALSA音源(單聲道輸入,卡ID 1),而不是OSS: ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg 請注意,您必須在啟動ffmpeg前激活正確的視頻源和信道,比如的xawtv。你也必須正確設(shè)置混音器中的音頻記錄電平。 7.3 X11抓取使用ffmpeg抓取X11顯示器 ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg 0.0是display.screen數(shù)量的X11服務(wù)器,與DISPLAY環(huán)境變量一致。 ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg 0.0是display.screen數(shù)量的X11服務(wù)器,與DISPLAY環(huán)境變量一致。10是在x偏移和20的y偏移。 7.4 視頻和音頻文件格式轉(zhuǎn)換任何支持的文件格式和協(xié)議可以作為ffmpeg的輸入: 范例: 您可以使用YUV文件作為輸入: 它將使用文件: /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...Y,/ tmp目錄/ TEST0。U, /tmp/test0.V, /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc... Y文件使用的U和V文件的分辨率的兩倍。他們是原始文件,沒有頭信息。他們可以通過所有視頻解碼器產(chǎn)生。您必須指定圖像的大小與-s選項,如果ffmpeg的不能猜測它。 您可以從原始YUV420P文件輸入: test.yuv是含有生YUV平面數(shù)據(jù)的文件。每個幀是由Y平面后跟U和V平面的一半的垂直和水平分辨率。 可以輸出到原始文件YUV420P: 您可以設(shè)置多個輸入文件和輸出文件: 轉(zhuǎn)換音頻文件a.wav和原始YUV視頻文件a.yuv到MPEG文件a.mpg。 你也可以同時做音頻和視頻轉(zhuǎn)換: 使用22050赫茲的采樣率轉(zhuǎn)換a.wav到MPEG音頻。 可以同時進(jìn)行多種格式的編碼,并定義從輸入流到輸出數(shù)據(jù)流的映射: 轉(zhuǎn)換a.wav到64千比特的a.mp2和128千比特的b.mp2。 您可以轉(zhuǎn)碼解密的VOB: 這是一個典型的DVD翻錄的例子;輸入是VOB文件,輸出與MPEG-4視頻和MP3音頻的AVI文件。注意,在這個命令,我們使用B幀,以便對MPEG-4流與DivX5兼容,并且GOP大小為300,這意味著每10秒插入一幀到29.97fps的輸入視頻。此外,音頻流是MP3編碼,所以你需要啟用通過傳遞LAME支持可使用–enable-libmp3lame配置。該映射是特別有用的用于DVD的轉(zhuǎn)碼,以獲得所需的音頻語言。 注意:使用 您可以從視頻中提取圖像,或從圖像創(chuàng)建視頻: 從視頻中提取圖片: 這將每秒提取一個視頻幀,并輸出到名為foo-001.jpeg,foo-002.jpeg等圖片中。圖片將被重新縮放到定義的尺寸。 如果你想提取有限數(shù)量的幀,你可以組合使用上面的命令與-vframes或-t選項,或與-ss開始從某一個時間點提取。 從圖像創(chuàng)建視頻: 語法 當(dāng)導(dǎo)入圖像序列, 例如,從文件名?匹配 可以把相同類型的許多流到輸出文件: 產(chǎn)生的輸出文件test12.nut將包含從以相反的順序存儲的輸入文件中的四個流。 要強(qiáng)制CBR視頻輸出:
8 參見ffmpeg-all , ffplay , ffprobe , ffserver , ffmpeg-utils , ffmpeg-scaler , ffmpeg-resampler , ffmpeg-codecs , ffmpeg-bitstream-filters , ffmpeg-formats , ffmpeg-devices , ffmpeg-protocols , ffmpeg-filters |
|