多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > ffmpeg的總體認識

ffmpeg的總體認識

來源:程序員人生   發布時間:2016-07-20 08:31:27 閱讀次數:7544次
1 概要
ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
ffmpeg [全局選項] {[輸入文件的選項] -i 輸入文件} ... {[輸出文件選項] 輸出文件} ...

2 描寫

ffmpeg 是1個非常快速的音視頻轉換器,還能夠從實時的音視頻流源中獲得音視頻。它還能在任意的采樣率之間轉化,
調劑用高質量的多相濾波器的實時視頻。

ffmpeg 從任意數量的輸入“文件”(多是普通文件,管道,網絡流,抓取裝備等等)中讀取信息,由-i選項指定輸入文件。
然后寫入到任意數量的輸出“文件”中。輸出“文件”由普通的文件名稱設定。在命令行中的任何內容,如果不能被解析成選項,
就認為它是輸出文件。

每一個輸入或輸出文件,原則上,都能包括任意數量不同類型的流(視頻、音頻、字幕、附件、數據).

流的數量和類型,可能被容器的格式所限制。從輸入當選擇哪一個流,然后輸送到哪一個輸出,要末是被自動指定,要末使用-map選項(參照流選擇章節)。




在選項中援用輸入文件,你必須用它們的索引符(從0開始)。例如,第1個輸入文件是0,第2個是1,等等。類似地,文件中的流被也它們的索引符所援用。
例如,2:3 援用的是第3個輸入文件中的第4個流。一樣參照流設定章節。


依照1般規律,選項被利用在下1個指定文件上。因此順序非常重要,相同選項可以在1個命令行中出現屢次。每次出現被利用到下1個輸入或輸出文件上。
全局選項(例如,詳細級別)例外于這個規律,它應當首選被設置。




不要混淆輸入和輸出文件 -- 首先設定所有的輸入文件,然后設定所有的輸出文件。也不能混淆屬于不同文件的選項。所有的選項只能被利用到下1個輸入或
輸出文件,并且在文件之間被重置。


-------------------------------------------------------------------
設置輸出文件的比特率為64kbit/s


ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
-------------------------------------------------------------------
強迫輸出文件的幀率為24fps


ffmpeg -i input.avi -r 24 output.avi
-------------------------------------------------------------------
強迫輸入文件的幀率為1fps(僅用于原始格式),并且輸出文件的幀率設置為24fps


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


這樣的選項可能被用于原始輸入文件。
-------------------------------------------------------------------


3 詳細描寫:


每一個輸出的ffmpeg 的轉碼進程能被下面的圖片描寫:



ffmpeg 調用 libavformat 庫(包括demuxers) 去讀取輸入文件,并且獲得包括編碼數據的數據包。當有多個輸入文件的時候,ffmpeg盡力去保持它們
同步,通過跟蹤最慢的時間戳的任何激活狀態的數據流。


然后,被編碼的數據包被傳送到解碼器(除非流復制被指定到流,參照后續近1步描寫).解碼器產生未緊縮的幀(原始視頻/PCM 音頻等)能夠近1步被
過濾器(參照下1節)處理。過濾以后,這些幀被傳送到編碼器,把它們編碼并且輸出編碼數據包。


3.1 過濾器




在編碼之前,ffmpeg 能通過libavfilter庫里面的過濾器處理原始音頻和視頻幀。幾個鏈式過濾器組成的過濾圖。ffmpeg 在兩種類型的過濾圖simple 
和complex中進行辨別。


3.1.1 簡單過濾圖


簡單過濾圖是那些唯一1個輸入和輸出,兩個是相同類型。上面的圖形,在編碼和解碼之間,插入1個步驟,它們就可以表示簡單過濾圖。





簡單過濾圖用 流選項 -filter 配置 (用 -vf 和-af 相應作為視頻和音頻的別名)。1個簡單的視頻的過濾圖作為1個舉例,正如這樣的:


 _______           _____________           _______          ________
|              |         |         |          |              |       | 
| input     | --->  | deinterlace        |   ---> | scale     | ---> | output |
|_______|         |_____________|          |_______|        |________|




注意有些過濾器改變幀的屬性,但是不改變幀的內容。例如,fps幀過濾器在上面的例子中改變幀數量,但不會碰觸幀內容。另外1個例子是setpts過濾器,
它僅設置時間戳,并且,另外傳遞不加以改變的幀。




3.1.2 Complex 過濾圖


Complex 過濾圖不能被描寫為1個利用于1個流的簡單的線性處理鏈。情形是這樣的,例如,當過濾圖有多于1個的輸入或輸出,或當輸出流的類型不同于
輸入流的時候。它們能用下面的圖形來表示:






Complex 過濾圖 通過 -filter_complex 選項配置。注意,這個選項是全局的。由于1個complex過濾鏈,由于它的本質,不可能與1個單1的流或文件相干聯。
-lavfi 選項,同等于-filter_complex.


1個尋常的 complex過濾鏈圖的例子是 overlay 過濾器。它有兩個視頻輸入和1個視頻輸出,它包括1個視頻的覆蓋在另外一個的上面。同理于音頻的overlay 過濾器是
amix 過濾器。


3.2 流復制


流復制是1個模式,它提供復制過的參數給-codec 選項。它使得 ffmpeg 丟掉對1個流解碼和編碼的步驟,因此它只做解復用和多路復用。它是很有用的,對改變容器
的格式或修改容器級的元數據。上面的圖形在這類情形下,簡化成這樣:


由于沒有解碼或編碼,這個進程是非常快,并且也沒有質量的消耗。但是,在1些情況下,它可能不工作,可能緣由也比較多。用過濾器明顯也是不可能的,由于過濾器是
工作在沒有緊縮的數據。


4 流選擇


默許情況下,ffmpeg 包括每種類型的1個流(視頻,音頻,字幕),它出現在輸入文件中,并且把流加入到每一個輸出文件。它選擇最好的標準:對視頻,它是最高分辨率的流。
對音頻,它是最多通道的流。對字幕,它是第1個字幕流。在幾個相同類型流速相等的流,以最低指數作為選擇。

你能關閉那些默許選項,通過用 -vn/-an/-sn. 對全手動控制,用 -map 選項,它能關閉剛剛描寫的默許選項。

5 選項


所有的數字類選項,如果不是另有規定,接受1個字符串表示1個數字,作為輸入,它可能后邊隨著1個國際單位前綴,例如,'K', 'M', 'G'.
如果 'i' 作為國際單位前綴,那末完全的前綴被解釋成基于1024進制的單位,而不是1000進制。
增加 'B' 作為單位前綴,則要把值乘以8. 就能夠這樣使用,例如,'KB', 'MiB', 'G' 和'B'作為數字后綴。


沒有帶參數的選項是布爾選項,并且設置相應的值為真。
它們能被設置成假,通過給選項增加前綴'no'. 例如,用'-nofoo' 將要設置'foo'名字的布爾選項為假。


5.1 流設定


1些選項是利用于每一個流的,例如,比特率或編碼。流設定被用于,嚴格制定1個給出的選項是屬于哪一個流的。
 
1個流的設定是1個字符串,它通常附加到這個選項名并且被1個冒號分開。例如,'-codec:a:1 ac3' 包括a:1設定,它匹配第2個音頻流。 因此,它會為第2個音頻流選擇 ac3 編碼。


1個流設定,能匹配好幾個流,因此,這個選項可以利用到它們所有的流。例如,流設定,-b:a 128k 匹配所有的音頻流。


1個空的流設定,匹配所有的流。例如,-codec copy 或 -codec: copy 會復制所有的流,而沒有重新編碼。


可能情勢的流設定是:


stream_index
匹配基于該索引號stream_index的流。例如,-threads:1 4 會設置第2個流的線程的數量為4。


stream_type[:stream_index]
stream_type 是下面的1種:'v'表示視頻,'a'表示音頻,'s'表示字幕,'d' 表示數據,還有't'標示附件。如果stream_index被給出,那末它匹配給定類型,給定索引號的流。否則,
它就匹配所有這類類型的流。


p:program_id[:stream_index]
如果流索引號被給出,那末它匹配具有該流索引號,并且具有該進程id。否則,它匹配進程中的所有流。


#stream_id or i:stream_id
通過流id匹配流(例如,在MPEG-TS 容器里的 PID)。


m:key[:value]
匹配帶元數據標簽鍵值有指定值的流。如果值沒有被給出,則匹配包括該標簽是任意值的流。


注意在 ffmpeg中,通過元數據匹配只會在輸入文件中,工作正常。


5.2 通用選項


這些選項在以ff*開頭的工具中是同享通用的。


-L
顯示許可證.


-h, -?, -help, --help [arg]
顯示幫助。1個可選參數可以指定顯示1個特定的條目。如果沒有參數被指定,只顯示基礎的(非高級)的工具選項。


可能的參數值是:


long
除基本工具選項之外,輸出高級工具選項


full
輸出完全的選項列表,包括編碼、解碼、解復用、多路復用,過濾器等同享的和私有的選項。


decoder=decoder_name
輸出詳細信息,關于名稱為decoder_name的解碼器。用-decoders選項來獲得所有解碼器的1個列表。


encoder=encoder_name
輸出詳細信息,關于名稱為encoder_name的編碼器。用-encoders選項來獲得所有編碼器的1個列表。


demuxer=demuxer_name
輸出相信信息,關于名稱為demuxer_name的解復用器。用-formats選項來獲得所有解復用器和多路復用器的1個列表。


muxer=muxer_name
輸出詳細信息,關于名稱為muxer_name的多復用器。用-formats選項來獲得所有的解復用器和多復用器的1個列表。


filter=filter_name
輸出詳細信息,關于名稱為filter_name的過濾器。用-filters選項來獲得所有過濾器的1個列表。


-version
顯示版本號。


-formats
顯示可用的格式(包括裝備)


-devices
顯示可用裝備。


-codecs
顯示所有被libavcodec知道的編碼。
注意,條目'codec'作為1個簡稱被用于這份文檔,更加正確的,應當被叫做媒體比特流格式。


-decoders
顯示可用的解碼器。


-encoders
顯示所有可用的編碼器。


-bsfs
顯示可用的比特流過濾器。


-protocols
顯示可用的協議。


-filters
顯示可用的 libavfilter 過濾器。


-pix_fmts
顯示可用的像素格式。


-sample_fmts
顯示可用的采樣格式。


-layouts
顯示通道名和標準通道層。


-colors
顯示被認可的的色彩名稱。


-sources device[,opt1=val1[,opt2=val2]...]
顯示輸入裝備的自動檢測源。1些裝備可能提供基于系統的源名稱,它不能被自動檢測。返回的列表不能被假定總是完全的。
-------------------------------------------------
ffmpeg -sources pulse,server=192.168.0.4
-------------------------------------------------
-sinks device[,opt1=val1[,opt2=val2]...]
顯示輸出裝備的自動檢測鏈接。1些裝備可能提供基于系統的鏈接名稱,它不能被自動檢測。返回列表不能被假定總是完全的。
-------------------------------------------------
ffmpeg -sinks pulse,server=192.168.0.4
-------------------------------------------------


-loglevel [repeat+]loglevel | -v [repeat+]loglevel
設置被庫利用的記錄日志的級別。添加'repeat+'表示重復的日志輸出,不應當被緊縮成第1行和'最后1行信息重復了n次' ,不會丟掉重復的行。
'repeat' 也能單獨使用。
如果單獨使用'repeat',并且沒有用優先級日志級別集,那末,默許的日志級別講被使用。
如果多個日志級別參數被給出,使用'repeat'不會改變日志級別。


日志級別是1個數字或包括1個下面值的1個字符串:


‘quiet’
甚么都不顯示,處于安靜狀態。


‘panic’
僅顯示致命毛病,它可能致使進程崩潰,例如,斷言毛病。現在沒有用。


‘fatal’
僅僅顯示致命毛病,出現這些毛病以后,程序絕對不能繼續運行。


‘error’
顯示所有的毛病,包括那些能夠被恢復的。


‘warning’
顯示所有的正告和毛病。所有的關于多是不正確或意外的事件信息都被顯示。


‘info’
顯示信息的處理進程。這些信息包括正告和毛病。這是默許的值。


‘verbose’
除更詳細之外,跟info相同。


‘debug’
顯示任何東西,包括調試信息。


默許情況下,程序把日志記入stderr, 如果中斷支持色彩,色彩別用于標記毛病和正告。


日志色彩可能被設置的環境變量AV_LOG_FORCE_NOCOLOR 或 NO_COLOR取消,或能被強迫設置成AV_LOG_FORCE_COLOR環境變量值。


環境變量NO_COLOR使用已過時,并被下邊版本的FFmpeg拋棄了。


-report
復制完全的命令行和終端輸出到當前目錄的1個文件命名為program-YYYYMMDD-HHMMSS.log。
該文件對bug報告是有用的。它也實現了 -loglevel 細節。


設置環境變量FFREPORT為任何值有一樣的效果。如果該值是1個以 ':' 分割的鍵值序列,這些選項會影響報告。
 
選項值必須被轉義,如果他們包括特定字符或選項分隔符':' (參照位于ffmpeg-utils手冊的'援用和轉義'部份).




下邊選項可以被辨認的:


file
設置用來報告的文件名稱; %p被替換為程序名, %t 被替換成時間戳, %% 被替換成普通的%。


level
設置日志級別。


Errors in parsing the environment variable are not fatal, and will not appear in the report.
分析環境變量的毛病不是致命的,就不會出現在報告中。


-hide_banner
隱藏顯示面板。


所有的 FFmpeg 工具會正常顯示1個版權通知,創建選項和庫版本。這個選項能用來隱藏顯示這些信息。


-cpuflags flags (global)
允許設置和清除cpu標志。這個選項目的在于測試。除非你知道你做甚么,否則不要使用它。


ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...


該選項的可能標志是:


‘x86’‘mmx’‘mmxext’‘sse’‘sse2’‘sse2slow’‘sse3’‘sse3slow’‘ssse3’‘atom’
‘sse4.1’‘sse4.2’‘avx’‘xop’‘fma4’‘3dnow’‘3dnowext’‘cmov’‘ARM’‘armv5te’
‘armv6’‘armv6t2’‘vfp’‘vfpv3’‘neon’‘PowerPC’‘altivec’‘Specific Processors’
‘pentium2’‘pentium3’‘pentium4’‘k6’‘k62’‘athlon’‘athlonxp’‘k8’


-opencl_bench
檢測所有可用的OpenCL裝備,并且顯示結果。這個選項僅當FFmpeg用--enable-opencl編譯時是可用的。


-opencl_options options (global)
設置OpenCL環境選項。這個選項僅當FFmpeg用--enable-opencl編譯時是可用的。選項必須是1個被':'分開的鍵值的列表。
參照ffmpeg-utils工具手冊的'OpenCL Options'部份,以獲得支持選項的列表。


5.3 AV選項


這些選項被libavformat, libavdevice 和 libavcodec庫直接提供。用-help選項去參照可用的AV選項的列表。它們被分成兩類:


generic
這些選項能被設置用于任何容器,編碼和裝備。Generic 選項在容器/裝備的AVFormatContext選項和編碼的AVCodecContext選項被列出。
private
這些選項被設定用于給出的容器,裝備或編碼。Private選項在相應的容器/裝備/編碼下被列出。
例如,寫1個ID3v2.3的頭到1個mp3文件,使用MP3 復用器的 id3v2_version的私有選項,不用默許的 ID3v2.4:


--------------------------------------------------------------
ffmpeg -i input.flac -id3v2_version 3 out.mp3
--------------------------------------------------------------


所有的編碼AV選項,是每一個流,因此,1個流指定器應當附加到它們。
注意:-nooption語法不能被用于波爾 AV選項,使用-option 0/-option 1.
注意:老的沒有文檔化的指定流AV選項的方法,通過增加前綴v/a/s到選項名稱,現在正在觀測中,且很快就會被刪除。


5.4 主選項


-f fmt (input/output)
強迫設置輸入或輸出文件格式。該格式通常對輸入文件自動檢測,且根據文件擴大猜想輸出文件格式,因此這個選項大部份情況下不需要。
-i filename (input)
輸入文件名稱。
-y (global)
重寫輸出文件沒有確認提示。
-n (global)
不重寫輸出文件,且如果1個指定的輸出文件已存在,則立即退出。


-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)
為1個或多個流選擇1個編碼器 (當用在輸出文件之前)或1個解碼器(當用在輸入文件之前)。codec是解碼器或編碼器的名字或是1個特殊值copy(只對輸出)去表示該流沒有被重新編碼。
--------------------------------------------------------------
例如,


ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT


用libx264編碼所有的視頻流,且copy所有的音頻流。
--------------------------------------------------------------
For each stream, the last matching c option is applied, so
對每一個流,最后匹配 c 選項。因此:


ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT


會copy所有的流,除第2個視頻,它會被libx264編碼,還要除第138個音頻,它會被libvorbis編碼。
--------------------------------------------------------------
-t duration (input/output)


當用作1個輸入選項(在-i之前),限制從輸入文件讀取的時間間隔。當用作1個輸出選項(在輸出文件名之前),停止寫入,直到時間到達設定間隔。


duration 可以是基于秒的整數,或以hh:mm:ss[.xxx]的情勢。


-to 和 -t 是相互排擠的,且-t有優先權。


-to position (output)
在position位置,停止寫入。該位置可以是1個表示秒數的數字或以hh:mm:ss[.xxx]的情勢。


-to 和 -t 是相互排擠的,且-t有優先權。


-fs limit_size (output)
設置文件大小限制,數字表示多少字節。


-ss position (input/output)
當用作輸出選項(在-i之前),在輸入文件中定位position.注意對大多數格式,是不可能精肯定位的,因此,ffmpeg 會定位到距離position最近的點。
當轉碼且啟用-accurate_seek(默許), 這些位于定位點和定位位置之間額外的段將被解碼和拋棄。
當作流copy或當使用-noaccurate_seek選項時,這些段會被保存。
當用作1個輸出選項(在輸出文件名之前),解碼但是拋棄輸入直到時間戳到達設定位置。
位置可以用秒數或以hh:mm:ss[.xxx]的格式。


-itsoffset offset (input)
設置輸入文件時間偏移。


該偏移必須是1個指定時間段,參照(ffmpeg-utils)ffmpeg-utils手冊的時間段部份。
該偏移被追加到輸入文件的時間戳。
設置1個位置偏移意味著,相應的流被延遲偏移1定時間。


-timestamp date (output)
設置容器的記錄時間戳。


日期必須是1個指定的時間段,參照(ffmpeg-utils)ffmpeg-utils手冊的時間段部份。


-metadata[:metadata_specifier] key=value (output,per-metadata)
設置1個元數據 鍵值對。


1個可選的metadata_specifier 可以被給出去設置基于流或章節的元數據. 參照-map_metadata文檔中的細節部份。


這個選項重寫元數據集,通過-map_metadata選項. 它還可能刪除元數據,通過1個空的值。


------------------------------------------------------------------------
例如,設定1個標題在輸出文件中:


ffmpeg -i in.avi -metadata title="my title" out.flv
------------------------------------------------------------------------
設置第1個音頻流的語言:


ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
------------------------------------------------------------------------
-target type (output)


指定目標文件類型(vcd,svcd,dvd,dv,dv50).
類型可以用pal-, ntsc- or -film前綴,以利用相應的標準。
所有的格式選項(比特率,編碼,緩存大小)被自動設置。
------------------------------------------------------------------------
你能夠唆使輸入:


ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
------------------------------------------------------------------------


不過,你可以指定另外的選項,只要你知道他們不于相應的標準沖突,比如:
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
------------------------------------------------------------------------
-dframes number (output)


設置輸出的數據幀數。這是1個-frames:d的別名。
-frames[:stream_specifier] framecount (output,per-stream)
framecount數以后,停止寫入1個流。


-q[:stream_specifier] q (output,per-stream)
-qscale[:stream_specifier] q (output,per-stream)


使用固定的質量表(VBR).q/qscale是基于編碼的。
如果qscale沒有用在1個流設定,那末它只利用于視頻流。當沒有stream_specifier被使用時,為兩個不同的編碼指定相投的編碼值,是由于通常音頻和視頻沒成心圖。
這是為了兼容之前的行動。


-filter[:stream_specifier] filtergraph (output,per-stream)
創建過濾圖鏈,且使用它過濾該流。
過濾圖是1個利用到流的過濾圖的描寫。并且必須有1個輸入和1個相同類型流的輸出。
在過濾圖中,輸入輸入被關聯到輸入標簽,輸出被關聯到輸出標簽。
參照ffmpeg-filters手冊獲得更多關于過濾圖語法的信息。
參照-filter_complex選項,如果你想用多個輸入或輸出去創建過濾圖。


-filter_script[:stream_specifier] filename (output,per-stream)
這個選項類似于-filter,唯一的不同是它的參數是文件名, 從該文件中讀取1個過濾圖描寫符。


-pre[:stream_specifier] preset_name (output,per-stream)
設定預設的匹配流。


-stats (global)
輸出編碼進程/狀態。
它默許是開啟的,如果關閉她,你必須指定-nostats.


-progress url (global)
發送程序友進程信息到url。
進度信息在編碼進程1結束就寫1次,大約是每兩秒鐘。
它由"鍵=值"行組成。鍵包括數字和字母。
1個處理進程信息序列最后1個鍵總是"progress".
-stdin
開啟標準輸入交互。
除非標準輸入用作輸入,否則,默許是開啟狀態。如果顯式禁用互動,你需要指定- nostdin。
關閉標準輸入的交互是有用的,比如,如果ffmpeg是后臺進程組。
Roughly the same result can be achieved with ffmpeg ... < /dev/null but it requires a shell.
用ffmpeg可以到達大致相同的效果... < /dev/null 但是,它要求1個shell。


-debug_ts (global)
輸出時間戳信息。
它默許是關閉的。
對想測試和調試,這個選項是最有用的。它的輸出格式可能在不同的版本之間變化。因此,它不應當被部署成可移植的腳本。
一樣可以參照-fdebug ts。


-attach filename (output)
附加1個附件到輸出文件。
它支持1些像Matroska1樣的格式,例如,被用于渲染字幕的字體。
附件被作為1個特定類型的流實現,因此,這個選項會增加1個新的流到文件。
通常這個流使用用于每一個流的選項,是可能的。
通過這個選項創建的附件流會再所有其他的流創建完成以后創建(例如,那些用-map或自動映照的選項創建的流).
--------------------------------------------------------------------------------------------------
注意,對Matroska格式,你依然不能不設置mimetype元數據標簽:
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
(假定附件流會被加入到輸出文件。)
--------------------------------------------------------------------------------------------------
-dump_attachment[:stream_specifier] filename (input,per-stream)
提取匹配的附件流到1個名叫filename的文件。


如果文件名為空,那末文件名元數據標簽的值會被用到。


--------------------------------------------------------------------------------------------------
例如,提取第1個附件流到1個名叫'out.ttf'的文件中:
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
--------------------------------------------------------------------------------------------------
提取所有附件到被文件名標簽指定的文件中。


ffmpeg -dump_attachment:t "" -i INPUT
--------------------------------------------------------------------------------------------------
技術說明,附件作為額外編碼實現,因此,這個選項能實際被用于從任何流中提取額外數據,不單單是從附件中。


--------------------------------------------------------------------------------------------------*************************
5.5 視頻選項


-vframes number (output)
設置輸出的視頻幀數量。這個是-frames:v的別名。


-r[:stream_specifier] fps (input/output,per-stream)
設置幀率(HZ值,分數或縮寫).


作為1個輸入選項,疏忽存儲在文件中的任什么時候間戳,并且,產生時間戳,假定恒定的幀率fps。這不同于被用于1些輸入格式的-framerate 選項,像image2或v4l2(它在過去的老版本的FFmpeg中是相同的)。
如果存在疑問,使用-framerate而不是輸入選項 -r.
作為1個輸出選項,復制或拋棄幀來實現恒定的輸出幀幀率fps.
-s[:stream_specifier] size (input/output,per-stream)
設置幀大小。


作為1個輸入選項,這是1個視頻大小私有選項的快捷方式,被1些解復用器所辨認。幀大小也不被存儲在文件,也是不可配置的。例如,原始的視頻和音頻抓取器。


作為1個輸出選項,這將大藐視頻濾波器插入到的相應過濾圖的結束。


請直接使用尺度濾波器插入到它的開頭或其他地方。


The format is ‘wxh’ (default - same as source).


-aspect[:stream_specifier] aspect (output,per-stream)
設置指定的顯示比例。
aspect可以是浮點數字的字符串,或1個字符串的比值,比值分別是縱橫比的份子和分母。


For example "4:3", "16:9", "1.3333", and "1.7777" are valid argument values.


如果和-vcodec copy1起用,雖然它會影響存儲在容器級別的縱橫比,但,如果編碼幀里存在縱橫比,則不會影響。
-vn (output)
關閉視頻錄制。


-vcodec codec (output)
設置視頻編碼。這是-codec:v的1個別名。


-pass[:stream_specifier] n (output,per-stream)
選擇路數(1或2):
它被用做兩路視頻編碼。視頻的狀態被記錄在第1路,記錄進1個日志文件(一樣參照-passlogfile選項),并且在第2路,日志文件在精確要求的比特率,被用來產生視頻。
對1路,你可以僅停用音頻并且設置輸出為空。Windows和Unix下的例子:
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


-passlogfile[:stream_specifier] prefix (output,per-stream)
設置兩路日志文件命名。默許的文件名前綴是'ffmpeg2pass'.
完全的文件名會是PREFIX-N.log,這里N是1個指定輸出流的1個數字。
-vf filtergraph (output)
創建被指定的過濾圖,并且用它過濾流。這是-filter:v的1個別名。參照-filter選項。


5.6 高級視頻選項


-pix_fmt[:stream_specifier] format (input/output,per-stream)
設置像素格式。
用-pix_fmts顯示所有支持的像素格式。
如果被選的像素格式是不可被選擇的,ffmpeg會顯示1個正告,并且選擇被編碼器支持的最好的像素格式。
如果pix_fmt被加上前綴a+, 如果,要求的像素格式不可被選擇,ffmpeg會帶1個毛病退出,并且,內部過濾圖的自動轉化被關閉。
如果pix_fmt只有1個+, ffmpeg 選擇相同的像素格式,作為輸入(或圖象輸出)并且關閉自動轉化。
-sws_flags flags (input/output)
設置SwScaler標志。


-vdt n
拋棄閥值。


-rc_override[:stream_specifier] override (output,per-stream)
速率控制,覆蓋指定的時間間隔,以'逗號分隔的int,int,int'列表格式。
前兩個值是開始和結束的幀號,最后1個如果是整數,表示用量。如果是負數表示品質因素。


-ilme
強迫交織支持編碼(唯一MPEG⑵ 和 MPEG⑷)


如果你輸入文件是交錯的,你想保存交錯格式的最小損失,使用此選項。
另外一種方法是用-deinterlace把輸入流與分離,但損失了技術介紹。
-psnr
計算緊縮的幀PSNR。
-vstats
備份視頻編碼狀態到vstats_HHMMSS.log。


-vstats_file file
備份視頻編碼狀態到文件中。


-top[:stream_specifier] n (output,per-stream)
top=1/bottom=0/auto=⑴ field first


-dc precision
Intra_dc_precision.


-vtag fourcc/tag (output)
強迫視頻 tag/fourcc.這是-tag:v的1個別名。
-qphist (global)
顯示 QP 直方圖。


-vbsf bitstream_filter
已過期,參照-bsf.
-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)
-force_key_frames[:stream_specifier] expr:expr (output,per-stream)
在指定的時間戳強迫關鍵幀,更確切的說,在每一個指定時間的第1個幀。
如果參數帶前綴expr:,這個字符串expr被解釋像1個表達式且是針對每一個幀賦值。
1個關鍵幀是被強迫的,以避免賦值是非零的。
如果1個時間是"chapters[delta]",它被擴大成在1個文件所有章節的開始處,被delta轉換,做為幾秒鐘的時間來標示。


該選項能被用于確保1個尋求點出現在1個章節或在輸出文件任何被設計的地方。


例如,在5分鐘內,插入1個關鍵幀。在每章開始前0.1秒增加1個關鍵幀。


-force_key_frames 0:05:00,chapters-0.1
表達式可以包括以下常量:
n
當前處理幀的編號,從0開始。
n_forced
強迫幀的編號。


prev_forced_n
之前強迫幀的數量,如果沒有關鍵幀被強迫,它是NAN
prev_forced_t
之前強迫幀的時間,如果沒有關鍵幀被強迫,它是NAN
t
當前處理幀的時間。
例如,每5秒強迫1個關鍵幀,你能設置:
-force_key_frames expr:gte(t,n_forced*5)


在上次最后1個關鍵幀以后,強迫1個關鍵幀5秒,從13秒開始:
-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))


請注意,迫使許多關鍵幀對編碼器的前瞻算法是非常有害的:
用fixed-GOP或相似的選項會更有效力。
-copyinkf[:stream_specifier] (output,per-stream)
當作流復制,副本剛開始也不會出現關鍵幀。


-hwaccel[:stream_specifier] hwaccel (input,per-stream)
使用硬件加速解碼匹配流(S)。允許的hwaccel值是:
none
不做硬件加速(默許)。
auto
自動選擇硬件加速方法。
vda
用蘋果VDA硬件加速。
vdpau
用VDPAU(視頻解碼和為Unix介紹API)硬件加速。
dxva2
用DXVA2(DirectX 視頻加速)硬件加速。
如果選擇的hwaccel是不可用的或不被選擇的解碼器所支持的,這個選項沒有任何影響。 
注意,大多數的加速方法目的在于回放,并且不會比在現在CPU上軟件解碼速度快。
另外,ffmpeg將通常需要從GPU存儲器的解碼的幀復制到系統內存,致使進1步的性能損失。
該選項因此主要用于測試。
-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
選擇1個裝備用于硬件加速。這個選項僅當-hwaccel 也被指定時才成心義。它的精確意義取決于特定硬件加速方法的選擇上。
vdpau
對VDPAU,該選項指定了使用X11 顯示/屏幕。如果該選項沒有指定,就使用環境變量DISPLAY的值。
dxva2
對DXVA2, 該選項應當包括使用的顯示適配器的數目。
如果該選項沒有指定,使用默許的適配器。


5.7 音頻選項


-aframes number (output)
設置輸出的音頻幀數目。它是-frames:a的1個簡寫。
-ar[:stream_specifier] freq (input/output,per-stream)
設置音頻采樣頻率。輸出流,默許被設置成相應的輸入流的頻率。對輸入流,該選項僅僅對音頻獲得裝備、元數據解復用器成心義。并且被映照到相應的解復用選項。
-aq q (output)
設置音頻質量(codec-specific, VBR).這是-q:a選項的別名。
-ac[:stream_specifier] channels (input/output,per-stream) 
設置音頻通道的編碼。
對輸出流,它默許被設置成輸入音頻通道的數量。
設置音頻采樣頻率。輸出流,默許被設置成相應的輸入流的頻率。對輸入流,該選項僅僅對音頻獲得裝備、元數據解復用器成心義。并且被映照到相應的解復用選項。
-an (output)
關閉音頻記錄。
-acodec codec (input/output)
設置音頻編碼。該選項是-codec:a的簡稱。


-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)
設置音頻采樣格式。
用-sample_fmts獲得所支持的采樣格式列表。


-af filtergraph (output)
創建過指定的過濾圖,用過濾數據流。
這是-filter:a的別名,參照-filter選項。




5.8 高級音頻選項


-atag fourcc/tag (output)


強迫音頻 tag/fourcc。該選項是-tag:a的別名。


-absf bitstream_filter
已被廢棄,參照-bsf。


-guess_layout_max channels (input,per-stream)
如果1些輸入通道層是不辨認的,僅在如果它相當于指定的通道數,它會嘗試著猜想。 
例如,2告知ffmpeg去辨認1通道作為單聲道,且2通道作為立體聲,但不是6通道作為5.1.
默許總是試圖猜想。
使用0禁用所有的猜想。


5.9 字幕選項


-scodec codec (input/output)
設置字幕編碼,它是-codec:s的別名。


-sn (output)
禁用字幕記錄。


-sbsf bitstream_filter
過時選項,參照-bsf


5.10 高級字幕選項


-fix_sub_duration
固定字幕延續時間。


對沒個字幕,在相同的流中等待下1個包,且調劑第1時間以免堆疊。
在1些字幕編碼特別是DVB字幕時,這是必須的。由于,在原始數據包的時間只是1個粗略的估計,并且,最后實際上是由1個空的字幕幀標記。
不使用此選項,在必要的時候可以致使夸大的延續時間或由于非單調的時間戳致使復用的失敗。


注意,該選項會延遲所有數據的輸出,直到下1個字幕包被解碼:它可以大大增加內存消耗和延遲。
-canvas_size size
設置被用于渲染字幕的畫布大小。


5.11 高級選項


-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)


指定1個或更多的作為1個輸出文件源的輸入流。


每一個輸入流通過輸入文件索引input_file_id和輸入流索引input_stream_id辨認。


兩個標示符都是從0開始的。如果被指定,sync_file_id:stream_specifier 設置哪一個輸入流被用作1個預設同步援用。


第1個-map選項在命令行指定了輸出流0的輸入源,第2個-map選項指定了輸出流1的輸入源,等等。


在流標示符之前的1個 - 字符創建1個'負'的映照。


它禁用了從已創建的映照匹配流。


另外一個[LinkLabel]情勢,會從復雜過濾圖映照輸出(參見-filter_complex選項)到輸出文件。


LinkLabel必須對應1個定義的圖中的輸出鏈接標簽。


例如,從第1個輸入文件映照所有的流到輸出。


ffmpeg -i INPUT -map 0 output
例如,如果在第1個輸入文件,你有兩個音頻流,這些流被 "0:0" 和 "0:1"辨認. 
你能用-map選擇哪一個流被丟在輸出文件。例如:


ffmpeg -i INPUT -map 0:1 out.wav
會把 在INPUT 被"0:1"標示的輸入流映照到在out.wav的輸出流.
例如,從輸入文件a.mov當選擇2號索引的流(被標示符'0:2'指定),并且從輸入文件b.mov選擇6索引號的流(被標示符'1:6'指定),并且復制他們到輸出文件out.mov:
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
從1個輸入文件中,選擇所有的視頻和第3方音頻流。


ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
映照除第2個音頻流以外的所有流,可以使用負的映照。
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
挑選英文音頻流:


ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
注意使用該選項禁用了該輸出文件的默許映照。


-map_channel [input_file_id.stream_specifier.channel_id|⑴][:output_file_id.stream_specifier]
從頭1個給出的輸入映照1個音頻通道到輸出。


如果output_file_id.stream_specifier沒有設置,音頻通道會被映照到所有的音頻流。


使用'⑴'替換input_file_id.stream_specifier.channel_id 會映照1個柔和的通道。


例如,假定INPUT是1個立體聲音頻文件,你可以用下面的命令開關的兩個音頻通道:


ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
如果你想第1個通道靜音,保存第2個通道工作:
ffmpeg -i INPUT -map_channel ⑴ -map_channel 0.0.1 OUTPUT


"-map_channel" 選項的順序唆使了在輸出流中通道的順序。
輸出通道層,被根據輸入被映照通道數猜想(如果'-map_channel',則是單聲道,如果是兩個,則是立體聲,等等。)
組合使用'-map_channel'和'-ac',使得通道抓取級別被更新,如果輸入和輸出通道不匹配。(例如,兩個'-map_channel'選項且'-ac 6')。


你還可以提取每一個輸入通道到特定的輸出;


下面的命令提取輸入音頻流的兩個通道(文件0,流0)到各自的output_ch0和output_ch1輸出:


ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1


下面的示例將1個立體聲輸入通道分隔成兩個流,這是放在同1輸出文件:
ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg
注意,當前每一個輸出流只能包括來自單個輸入流的特定通道。


你不可以例如用“- map_channel”選擇多個輸入音頻通道中包括的不同的流(從相同或不同的文件)并將它們合并成1個單1的輸出流。


因此,目前不可能,例如,把兩個獨立的單流到1個單1的立體流。
但是分裂成兩個單聲道立體聲流流是可能的。


如果您需要此功能,1個可能的解決方法是使用amerge濾波器。
例如,如果你需要合并1個媒體(這里是input.mkv)和2單聲道音頻流到1個立體聲聲道音頻流(并保持視頻流),你可使用下面的命令:
ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)
從輸入文件中,設置下1個輸出文件的元數據信息。
注意那些事文件標示符(從0開始),不是文件名。
選項metadata_spec_in/out參數指定,哪一個元數據被復制。
1個元數據指定可以下面的情勢:
g
全局元數據,例如,利用到全部文件中的元數據。
s[:stream_spec]
流元數據。
stream_spec是1個流唆使符就像在流唆使符章節描寫的1樣。
用1個輸入元數據唆使符,第1個匹配的流被從它那里復制。
用1個輸出元數據唆使符,所有匹配的流被復制到它那里。
c:chapter_index
章節元數據。
chapter_index 是從0開始的章節索引。
p:program_index
程序元數據。
program_index是從0開始的程序索引。
如果元數據設定被遺漏,它默許到全局。


默許情況下,全局元數據從第1輸入文件復制,每章每流和元數據復制隨著流/章。
通過創建任何相干類型的映照,這些默許的映照會被禁用。


這些默許的映照是通過創建任何映照的相干類型的殘疾。
1個負數文件索引可以被用來創建1個虛擬映照,它僅禁用自動復制。
例如,從第1個輸入文件的第1個流復制元數據到輸出文件的全局元數據:
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
做反向工作,例如,復制全局元數據到所有的音頻流:


ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
值得注意的是,簡單的0在這個例子會很好的工作,由于缺省假定為全局的元數據。


-map_chapters input_file_index (output)
用索引從input_file_index輸入文件復制章節到下1個輸出為文件。
如果沒有章映照指定的章節,然后復制從第1輸入文件最少1章。
使用1個負指文件索引數來禁用任何章節的復制。
-benchmark (global)
在編碼末端顯示基準信息。


顯示CPU時間和最大內存消耗。


最大內存消耗不被所有的系統支持,如果不支持,它會通常作為0顯示。
-benchmark_all (global)
在編碼進程中顯示基準信息。
顯示在1些步驟中的CPU時間(音頻、視頻 編碼、解碼)
-timelimit duration (global)
ffmpeg運行1段秒數以后退出。


-dump (global)
復制每一個輸入包到stderr.


-hex (global)
當復制包,也復制有效載荷。


-re (input)
讀取本地的輸入幀速率。主要用于摹擬1個抓取裝備或1個直播輸入流(例如,當從1個文件中讀取)。不利用于實際抓取裝置或活的輸入流(它會致使數據包丟失)。


默許ffmpeg試圖盡可能快的讀取輸入。這個選項會減慢輸入的讀取幀率到本地輸入幀速率。它用于實時輸出(例如,直播流)。


-loop_input
在輸入流回路。目前它只對圖象流。該選項被用于自動FFserver測試。該選項已過期不用,使用-loop 1.


-loop_output number_of_times
對格式的支持,如動畫GIF反復循環回路的輸出(0將回路輸出無窮)。


該選項過時了。使用,-loop.
-vsync parameter
視頻同步方式。
 
出于兼容性斟酌舊值可以指定為數。


新添加的值將總是被指定為字符串。
0, passthrough
從解復用器到復用器,每一個幀帶著它的時間戳被傳遞。
1, cfr
幀將被復制或拋棄 以準確到達要求的恒定的幀速率。


2, vfr
帶時間戳的幀被通過或拋棄,以致于避免2個幀有相同的時間戳。


drop
當通過破壞了所有的時間戳,使復用器的產生基于幀速率的新的時間戳。


⑴, auto
在1和2之間選擇取決于復用器能力。


這是默許的方式。


注意,打這以后,時間戳可以進1步被復用器修改。


例如,在格式選項avoid_negative_ts啟用的情況下。
用-map你能選擇在哪一個流獲得時間戳。
你可以不改變視頻和音頻,并且同步設置剩余流不被改變。
-async samples_per_second
音頻同步方法。
"Stretches/squeezes" 音頻流匹配時間戳,參數是最大的每秒采樣,通過它音頻被改變了。


-async 1 是1個特殊情況,只有音頻流的開始被校訂,而沒有任何后校訂。


注意,打這以后,時間戳可以進1步被復用器修改。
例如,在格式選項avoid_negative_ts啟用的情況下。


該選項已過時不用。使用aresample音頻濾波器取代。
-copyts
不要處理輸入時間戳,但保持它們的值不用清算它們。
特別是,不要移除初始啟動時間偏移值。


注意,根據在vsync選項或乃至當該項被選擇時,特定的復用途理輸出時間戳可以不和輸入時間戳匹配。
-start_at_zero
當使用copyts,轉換輸入時間戳,它們從0開始。


這意味著使用,例如,-ss 50會使得輸出時間戳從50秒開始,疏忽輸入文件開始的時間戳。
-copytb mode
指定當流復制的時候,怎樣設置基于時間的編碼器。
模式是1個整數值,并且能指定下面的1個值:
1
使用基于時間的解復用。


基于時間,被從相應的輸入解復用器復制到輸出編碼器。


這是當使用可變幀速率復制的視頻流的時候,要避免非單調增加的時間戳。


0
使用基于時間的解碼。


基于時間,被從相應的輸入解碼器復制到輸出編碼器。



嘗試自動做出選擇,以產生1個理智的輸出。


默許值是⑴。


-shortest (output)
當最短輸入流結束時,完成編碼。


-dts_delta_threshold
時間戳不連續的峰值。
-muxdelay seconds (input)
設置最大復用解碼延遲。


-muxpreload seconds (input)
設置初始復用器的解碼延遲。


-streamid output-stream-index:new-value (output)
指定1個新的流id到1個輸出流。


該選項應當被指定于之前它利用的1個輸出文件名。
在多個輸出文件中存在的情況下,1個流id可能被分配到1個不同的值。


例如,為1個mpegts輸出文件設置流0 PID為33 并且流1 的PID為36:
ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts


-bsf[:stream_specifier] bitstream_filters (output,per-stream)


為匹配的流設置比特流過濾器。


bitstream_filters是1個逗號分隔的比特流過濾器列表。可使用-bsfs選項取得比特流過濾器列表。


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
-tag[:stream_specifier] codec_tag (input/output,per-stream)
為匹配流逼迫1個tag/fourcc。


-timecode hh:mm:ssSEPff
為輸出,指定時間碼。


SEP是':',標示不拋棄時間碼,并且,';'(或'.')表示拋棄時間碼。


ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
-filter_complex filtergraph (global)
定義1個復雜過濾圖,例如,1個任意數量的輸入和/或輸出。
對簡單的過濾圖 - 那些帶相同類型的1個輸入和1個輸出 - 參照-filter選項。


過濾圖本身是1個描寫,就像在ffmpeg-filters手冊的'過濾圖語法'描寫。


輸入鏈接標簽必須參考輸入流,使用[ file_index:stream_specifier ]語法(例如,跟-map的使用相同)。


如果stream_specifier匹配多個流,第1個會被使用。


1個未標記的輸入將被連接到的匹配類型的第1個未使用的輸入流。


輸出鏈接標簽被稱為-map。未標記的輸出被添加到第1個輸出文件。


注意通過這些選項可以僅用不帶普通文件的lavfi 源。


例如,把圖象疊加到視頻。


ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
'[out]' out.mkv


在這里[0:v]是指在第1輸入文件的第1視頻流,它被連接到第1個(主)的疊加過濾器輸入。


類似地,在第2個輸入的第1個視頻流被連接到第2個(疊加)輸入的疊加。


假定唯一1個視頻流在每一個輸入文件中,我們能疏忽輸入標簽,因此上面的命令同等于:


ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
'[out]' out.mkv
另外,我們可以省略輸出標簽和過濾器圖單輸出將被自動添加到輸出文件,所以我們可以簡單地寫


ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv


用lavfi色采源產生5秒鐘的純紅視頻:


ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
-lavfi filtergraph (global)
定義1個復雜的過濾圖,例如,1個帶任意數量的輸入或/和輸出。同等于-filter_complex.
-filter_complex_script filename (global)


這個選項是類似于-filter_complex,唯1不同的是,它的參數是文件名,從中讀取1個復雜的filtergraph描寫。


-accurate_seek (input)
此選項啟用或禁用準確尋覓輸入文件的通訊選項。使用-ss選項,該選項啟用或關閉準確尋覓輸入文件。這是默許啟用的,因此轉換的時候尋求文件是準確的。


使用-noaccurate_seek禁用它,多是很有用的。例如,當復制1些流和轉碼另外一些流的時候。
-override_ffserver (global)
覆蓋來自ffserver真個輸入指定。
 
使用該選項,你可以映照任何輸入流到ffserver并且控制很多ffmpeg編碼的方面。


沒有該選項,ffmpeg會把ffserver要求的傳送到ffserver。


沒有這個選項,FFmpeg傳送到要求ffserver ffserver甚么。


該選項的目的是為了這類情況。在這類情況下,1種必須的但又不能指定用于ffserver的,但是可以指定用于ffmpeg的功能。


該選項用于的情況下,特點是必要的,不能被指定為ffserver但可以實現。


-discard (input)
允許在分離器拋棄特定流或特定流的幀。


不是所有的解復用器都支持這項。


none
不拋棄任何幀。


default
默許情況,不拋棄任何幀。


noref
拋棄所有非參考幀。


bidir
拋棄所有雙向幀。


nokey
拋棄除關鍵幀之外的所有幀。


all
拋棄所有幀。


作為1個例外,你可以用1個bitmap字幕流作為輸入:


它會被轉化成1個在文件中跟最大尺寸相同的視頻,或720x576,如果當前沒有視頻的話。


注意,這是1個實驗中和臨時的解決方案。


1旦libavfilter有適合的字幕支持,它會被刪除。


例如,在以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
(x2d0, 0x2dc and 0x2ef 是分別的視頻,音頻和字幕流的MPEG-TS PID;0:0, 0:3 和 0:7 一樣也會工作)


5.12 預設文件


1個文件包括1個 選項=值 對序列,每行1個,指定1個,難以在命令行中指定的選項序列。
以'#'開頭的行被疏忽,并被用作提供注釋。
檢查預設的目錄,例如,在FFmpeg的源碼樹。
預設文件由vpre, apre, spre, 和 fpre選項指定。


fpre選項獲得預設文件名而不是作為輸入的1個預設名稱,并且能被用于任何的編碼。


vpre, apre, 和 spre選項,被1個預設文件指定的選項被利用到當前選項相同預設選項類型的編碼。


傳遞給pre, apre, 和 spre預設選項的參數,標示了使用以下規則使用的預設文件:


首先,ffmpeg搜索1個名叫arg的文件。


ffpreset 在$FFMPEG_DATADIR目錄(如果設置過),$HOME/.ffmpeg和在配置時的數據目錄(通常PREFIX/share/ffmpeg)或在1個ffpresets文件夾跟可履行程序在1起的那個win32文件夾。
例如,付過參數是libvpx⑴080p,它會搜索libvpx⑴080p.ffpreset文件。
如果沒有發現文件,那末ffmpeg會搜索1個名叫codec_name-arg的文件。
ffpreset 在上面提到的目錄,那里codec_name是預設文件選項會被利用到的編碼名稱。
例如,如果你用-vcodec libvpx和-vpre 1080p選項,選擇視頻編碼,那末它會搜索libvpx⑴080p.ffpreset文件。


6 提示


對在非常低比特率的流,使用1個低幀率且,1個小GOP尺寸。
對RealVideo,這是特別肯定的,linux播放器好像不能太快,因此,它會失幀。
1個例子是:


ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm
參數'q',它擋編碼的時候顯現,是當前的 量化器
值1表示會到達1個非常好的質量,值31表示最差質量。


如果q=31出現的太頻繁,它意味著編碼器不能足夠充分的緊縮,以符合你的比特率。


你必須要末增加比特率,減少幀率或減少幀的尺寸。
如果你的計算機的速度不夠快,你可以加快在緊縮比的緊縮的消耗。
你能使用'-me zero'加速運動估計,和使用'-g 0'來完全禁用運動估計(你唯一I-frames,這意味著它和JPEG緊縮1樣的好)
為取得很低的音頻比特率,減少采樣頻率(對MPEG音頻,減少至22050 Hz,對AC⑶,減少至22050 或 11025)。
為取得1個恒定的質量(但是1個變化的比特率),使用選項'-qscale n',當'n'是在1(最好質量)和31(最差質量)之間時。


7 舉例


7.1 預設文件


1個預設文件,包括1個 選項=值對 的序列,每行1個,指定1個選項序列。該選項序列也能在命令行里被指定。
以字符'#'開頭的行被疏忽,并且被用于提供注釋。
空行也是被疏忽的。例如,檢查在FFmpeg源代碼樹里的預設目錄。


預設文件被pre選項指定,該選項獲得1個預設名稱作為輸入。


FFmpeg 搜索1個名叫preset_name.avpreset的文件,在$AVCONV_DATADIR目錄(如果設置過),$HOME/.ffmpeg和在配置時的數據目錄(通常是$PREFIX/share/ffmpeg)


例如,如果參數是libx264-max,它會搜索libx264-max.avpreset文件。


7.2 視頻和音頻收集


如果你指定了輸入格式和裝備,那末ffmpeg可以直接抓取視頻和音頻。


ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg


或用1個ALSA音頻源(單聲道輸入,卡id 1)替換OSS:


ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg


注意,在啟動ffmpeg之前,你必須激活正確的視頻源和通道,ffmpeg使用任何的TV閱讀器例如,xawtv。
你也必須正確的設置帶有標準復用器的音頻記錄級別。
7.3 X11 收集


抓取 X11 顯示,用ffmpeg:


ffmpeg通過X11抓取顯示器:


ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg


0.0是顯示器X11服務器的屏幕編號,跟DISPLAY環境變量相同。


ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg


0.0是顯示器X11服務器的屏幕編號,跟DISPLAY環境變量相同。
抓取時,10是橫向偏移,20是縱向偏移。


7.4 視頻和音頻文件格式轉換


任何被支持的文件格式和協議,能作為ffmpeg的輸入:


例如:


你能用YUV文件作為輸入:
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg


它會用文件:


/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...


Y文件使用u和v文件的分辨率兩次。


他們是原始文件,不帶頭的。它們能被所有的適合的視頻解碼器生成。


如果ffmpeg不能猜想它,你必須用-s選項指定圖象的尺寸。


你能從1個原始YUV420P文件輸入:


ffmpeg -i /tmp/test.yuv /tmp/out.avi


test.yuv 是1個文件,它包括原始YUV平面數據。


每一個幀是由Y平面,隨著U和V平面在1半的垂直和水平的分辨率。
你能輸出到1個原始YUV420P文件:


ffmpeg -i mydivx.avi hugefile.yuv


你能設置幾個輸入文件和輸出文件:


ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg


轉化音頻文件a.wav和原始YUV視頻文件a.yuv到1個MPEG文件a.mpg.
你也能夠同時做音頻和視頻的轉化:


ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2


轉化a.wav成22050 Hz采樣率的MPEG音頻。


你能同時編碼幾個格式,并且從輸入流到輸出流定義1個映照:
ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2


轉化1個a.wav到a.mp2在64 kbits,并且到b.mp2在128 kbits。'-map file:index'表示哪一個輸入流被用于每一個輸出流,用定義的輸出流順序。


你能轉碼解密的VOBs:


ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi


這是1個典型的DVD分用例子;輸入是1個VOB文件,輸出1個帶有MPEG⑷的視頻和MP3的音頻的AVI文件。
注意,在這個命令,我們用B-frames因此MPEG⑷流是兼容DivX5的,并且GOP大小是300,這意味著每10秒1個intra幀,大約29.97fps的輸入視頻。
另外,MP3編碼的音頻流,你需要通過使瘸腿的支持——enable-libmp3lame配置。
另外,MP3編碼的音頻流,你需要通過傳遞--enable-libmp3lame到配置,來啟用LAME支持。
對DVD 轉碼獲得想要的音頻語言來講,映照是相當有用的。
注意:參照支持的輸入格式,使用ffmpeg -formats.


你可以從1個視頻中提取圖象,或從很多圖象中創建視頻:


對,從視頻中提取圖象:


ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg


這會從視頻中每秒提取1個視頻幀,并且以文件的情勢輸出它們,命名為foo-001.jpeg, foo-002.jpeg, 等。
圖象將被重新調劑以適應新的辯白率值。
如果你想提取的只是1個有限數量的幀,可以結合上面的命令使用vframes或-t選項,或結合上面的命令使用-ss開始從1個特定的時間點提取。


從很多圖象中創建1個視頻:


ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi


語法foo-%03d.jpeg表示用由3個用零填充的數字組成的1個10進制數來表示序列號。


它支持于C printf 函數相似的語法,但只適用于接受普通整數。


當導入1個圖片序列,-i 內部也支持擴大像shell通配符表達式(全局),通過選擇image2-specific -pattern_type全局選項。


例如,對,從匹配全局表達式foo-*.jpeg的文件名創建1個視頻:

ffmpeg -f image2 -pattern_type glob -i 'foo-*.jpeg' -r 12 -s WxH foo.avi


你能把很多相同類型的流輸出:

ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut

結果輸出文件test12.nut,會包括來自輸入文件的以反向順序排列的頭4個流。

強迫CBR輸出:

ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v

這4個選項,lmin, lmax, mblmin 和 mblmax 使用'lambda'單元,但是你可使用QP2LAMBDA 常量來容易的從'q'單元轉化:
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美xxxxx九色视频免费观看 | 欧美一级大黄特黄毛片视频 | 18一19xxx日本护士 | 在线观看亚洲人成网站 | 日本不卡在线视频 | 国产精品福利自产拍网站 | 国产精品国产午夜免费福利看 | 国产在线观看福利 | 一区二区三区在线看 | 福利在线看 | a级成人毛片久久 | 校园春色 亚洲 | 99精品国产在这里白浆 | 一区福利视频 | 欧美男男作爱gayxxx | 日本艳鉧动漫1~6中文在线观看 | 亚洲精品在线免费观看视频 | 97精品一区二区三区在线不卡 | 国产成人欧美 | 九九黄色 | 亚洲欧洲一区 | 亚洲精品综合一区二区 | 羞羞影视 | 精品国产乱码久久久久久一区二区 | 999国产精品亚洲77777 | 亚洲综合视频网 | 免费一级欧美片在线观免看 | 午夜视频在线观看免费视频 | 国产精品成 | 日本不卡不码高清免费观看 | 伊人性视频 | 国产福利在线观看永久免费 | 亚洲精品一区二区三区在 | 中文字幕亚洲在线 | 国产亚洲欧美另类久久久 | 中文国产| 日本久久影视 | 日韩精品欧美一区二区三区 | 亚洲特一级毛片 | 国产成人精品午夜二三区 | 成人国产激情福利久久精品 |