免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

ffmpeg中文文檔

 waston 2016-05-12

1. 概要

ffmpeg [global_options] {[input_file_options] -i INPUT_FILE} ... {[output_file_options] OUTPUT_FILE} ...

2. 說明

ffmpeg是一個非常快的視頻和音頻轉(zhuǎn)換器,還可以抓取實時的音頻/視頻流。它可以在任意的采樣率之間的轉(zhuǎn)換和調(diào)整視頻,并同時使用高品質(zhì)的多相濾波器。

ffmpeg從輸入“文件”(其可以是常規(guī)文件,管道,網(wǎng)絡(luò)流,錄制裝置等),由指定任意數(shù)量的讀取-i選項,并寫入到任意數(shù)量的輸出“文件”,只需指定一個輸出的文件名。任何一個命令行中不能被解釋為選項的內(nèi)容都被認(rèn)為是一個輸出文件名。

每個輸入或輸出文件可以在原則上,包含任意數(shù)量的不同類型(視頻/音頻/字幕/附件/數(shù)據(jù))的流。輸出文件中允許流的數(shù)量和類型是由輸出格式容器限制決定的。輸入流和輸出流直接的映射可以自動完成也可以用-map選項給定(見流選擇章節(jié))。

引用輸入文件的選項時,則必須使用他們的索引(從0開始)。例如:第一輸入文件是0 ,第二個是1等。類似地,一個文件中的流也通過其索引指定。例如2:3指的是在第三個輸入文件中的第四數(shù)據(jù)流。參見流章節(jié)。

作為一般規(guī)則,選項作用于下一個指定的文件。因此,命令的順序是重要,你可以在命令行上多次相同的選項。每次選項的出現(xiàn)都將作用于下一個輸入或輸出文件。這條規(guī)則若有例外將會提前聲明(例如冗余級別)。

不要混合輸入和輸出文件。首先指定所有輸入文件,那么所有的輸出文件。也不要混用屬于不同的文件的選項。所有選項僅適用于下一個輸入或輸出文件,之后選項將被重置。

設(shè)置輸出文件以64千比特/秒的視頻比特率:

ffmpeg -i input.avi -b:V 64K -bufsize 64K output.avi

要強(qiáng)制輸出文件為24 fps的幀速率:

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

要強(qiáng)制輸入文件的幀頻(僅對原始格式有效),以1 FPS讀入文件,以每秒24幀的幀速率輸出:

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

format 選項可能需要指定,對于原始輸入文件。

3. 詳細(xì)描述

在轉(zhuǎn)碼過程ffmpeg每個輸出可以由以下圖描述:

 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                           v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
                                      |_________|
 ________             ______________       |
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder
|________|           |______________|

ffmpeg調(diào)用libavformat庫(含分流器)來讀取輸入文件并獲得含有他們編碼信息的數(shù)據(jù)包。當(dāng)有多個輸入文件, ffmpeg將通過跟蹤最小的時間戳來試圖在所有活躍的輸入流間同步。編碼的數(shù)據(jù)包然后被傳遞到解碼器(除非復(fù)制音頻流被選擇用于流,見進(jìn)一步的說明)。解碼器產(chǎn)生的未壓縮的幀(原始視頻/ PCM音頻/ …),它可以進(jìn)一步通過濾鏡進(jìn)行處理(見下一節(jié))。通過濾鏡后,這些幀被傳遞到編碼器,編碼器將其編碼并輸出編碼后的數(shù)據(jù)包。最后,這些將被傳輸給混合器以將編碼數(shù)據(jù)寫入到輸出文件。

3.1 濾鏡

在編碼之前, ffmpeg可以使用libavfilter庫中的濾鏡處理原始的音頻和視頻幀。幾個連接的濾鏡可以形成一個濾鏡組(filtergraphs)。 ffmpeg有兩種filtergraphs:簡單和復(fù)雜。

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)容。例如,在上例中,fps改變幀的數(shù)量,但不觸及幀的內(nèi)容。又如setpts濾鏡,其僅設(shè)置時間戳而保持幀不變。

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可使用-filter_complex選項配置。注意,此選項是全局性的,因為復(fù)雜FilterGraph,就其本質(zhì),不能明確地與單個流或文件相關(guān)聯(lián)。

-lavfi選項相當(dāng)于-filter_complex

一個復(fù)雜FilterGraph動態(tài)的簡單的例子是在overlay濾鏡,它具有兩個視頻輸入和一個視頻輸出,含有一個視頻重疊在另一個的上面。其對應(yīng)的音頻濾鏡是amix

3.2 復(fù)制流

復(fù)制流是通過添加copy選項到-codec選項完成的。它使ffmpeg對指定的流忽略解碼和編碼步驟,所以它只能混合和拆包。它用于改變所述容器的格式或修改容器級別的元數(shù)據(jù)是有用的。在這種情況下,可以簡化為這樣:

 _______              ______________            ________
|       |            |              |          |        |
| input |  demuxer   | encoded data |  muxer   | output |
| file  | ---------> | packets      | -------> | file   |
|_______|            |______________|          |________|

由于不存在解碼或編碼,它是非???,沒有質(zhì)量損失。然而因為許多因素的工作,它可能無法在某些情況下使用。應(yīng)用濾鏡顯然也是不可能的,因為濾鏡僅能作用在未壓縮的數(shù)據(jù)上。

4 選擇流

默認(rèn)情況下, ffmpeg只包含輸入文件中每個類型流各一個(視頻,音頻,字幕),并將它們添加到每個輸出文件。它選擇“最好”的每一個流基于以下標(biāo)準(zhǔn):用于視頻,它選擇最高分辨率的流;對于音頻,它使用最多聲道的流;對于字幕,它是第一個字幕流。在相同類型中,參數(shù)相等的若干流中具有最低索引的流被選擇。

您可以通過-vn/-an/-sn選項禁用其中的一些默認(rèn)值。若需全手動控制,請使用-map選項,它將禁用剛才所描述的默認(rèn)設(shè)置。

5 選項

所有的數(shù)值選項中,如果不另外指明,均表示接受數(shù)作為輸入,其后可添加一個SI單位的字符串,例如:K,M,或G。

如果i被附加在SI單位,完整的前綴將被解釋為一個單元前綴的二進(jìn)制倍數(shù),也即1024倍,而不是1000倍。追加B可使數(shù)值增加8倍。這允許使用,例如:KB,MiB,GB的數(shù)量后綴。

選項??不帶參數(shù)是布爾選項,并設(shè)置相應(yīng)的值設(shè)置為true。他們可以通過在選項前添加no來將選項設(shè)置為false。例如使用-nofoo將設(shè)置名稱為foo為假。

5.1 流標(biāo)識符

有些選項是按流的,例如比特率或編解碼器。流標(biāo)識符被用來精確地指定一個給定的選項作用于哪一個數(shù)據(jù)流(多個)。

一個標(biāo)識符一般是選項名稱加冒號分隔的字符串。例如-codec:a:1 ac3包含流標(biāo)識符a:1,它匹配第二音頻流。因此,將選擇AC3編解碼器的第二音頻流。

一個標(biāo)識符可以匹配多個流,這個選項將適用于所有流。比如,流標(biāo)識符-b:a 128k標(biāo)識了所有的音頻流。

空標(biāo)識符匹配所有的流。例如, -codec copy-codec: copy會復(fù)制所有的數(shù)據(jù)流而不重新編碼。

流標(biāo)識符的可能形式有:

stream_index

匹配與該索引對應(yīng)的流。例如-threads:1 4將設(shè)置第二個流的線程計數(shù)為4。

stream_type[:stream_index]

流類型是下列字母之一:v為視頻,a為聲音,s為字幕,d為數(shù)據(jù),t為附件。如果stream_index給出,則它匹配該類型的索引為stream_index的流。否則,它匹配所有這種類型的流。

p:program_id[:stream_index]

如果給定stream_index,那其將與在與ID為 program_id的program的stream_index的流相匹配。否則,它將匹配在program_id中的所有流。

#stream_id 或者 i:stream_id

按流索引逐一匹配流(如在MPEG-TS容器中的PID)。

m:key[:value]

匹配流的元數(shù)據(jù)標(biāo)簽中具有指定key的流。如果value 沒有給出,將匹配包含給定標(biāo)簽的所有流。

請注意,在ffmpeg中,按元數(shù)據(jù)匹配僅能用于輸入文件。

5.2 通用選項

這些選項當(dāng)中的FF *工具共享。

-L

顯示許可證。

-h, -?, -help, --help [arg]

顯示幫助。一個可選參數(shù)可以被指定為打印與特定項目相關(guān)的幫助。如果沒有指定參數(shù),則只顯示基本的(非高級)工具選項。

arg的可能值是:

`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`選項來獲得所有濾鏡的列表。

-version

顯示的版本。

-formats

顯示可用的格式(包括設(shè)備)。

-devices

顯示可用的設(shè)備。

-codecs

顯示libavcodec已知的所有編解碼器。

注意,整個文檔中術(shù)語“解碼器”更正確地稱呼是比特流媒體格式(media bitstream format)。

-decoders

顯示可用的解碼器。

-encoders

顯示所有可用的編碼器。

-bsfs

顯示可用的流濾鏡。

-protocols

顯示可用的協(xié)議。

-filters

顯示可用的libavfilter濾鏡。

-pix_fmts

顯示可用的像素格式。

-sample_fmts

顯示可用的采樣格式。

-layouts

顯示頻道名稱和標(biāo)準(zhǔn)的渠道布局。

-colors

顯示公認(rèn)的顏色名稱。

-sources device[,opt1=val1[,opt2=val2]...]

顯示自動檢測到的輸入設(shè)備的源。某些設(shè)備可提供不能自動檢測系統(tǒng)相關(guān)的源名稱。返回的列表不能被假定為總是完整的。

`ffmpeg -sources pulse,server=192.168.0.4`

-sinks device[,opt1=val1[,opt2=val2]...]

自動檢測顯示輸出設(shè)備的接收器。某些設(shè)備可提供不能自動檢測系統(tǒng)相關(guān)的接收器名稱。返回的列表不能被假定為總是完整的。

`ffmpeg -sinks pulse,server=192.168.0.4`

-loglevel [repeat+]loglevel | -v [repeat+]loglevel

設(shè)置庫使用的日志記錄級別。加入repeat+表示重復(fù)日志輸出不應(yīng)該被壓縮到所述第一條日志和“最后的日志重復(fù)n次”線將被省略。 repeat,也可以單獨使用。如果repeat可以單獨使用,并沒有預(yù)設(shè)的記錄級別,默認(rèn)記錄級將被使用。如果給定多個日志級別參數(shù),使用repeat不會改變?nèi)罩炯墑e。loglevel是一個字符串或數(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的版本將被丟棄。

-report

轉(zhuǎn)儲完整的命令行和控制臺輸出到當(dāng)前目錄一個文件名 ??為program - YYYYMMDD - HHMMSS .log的文件。此文件對于錯誤報告非常有用。這也意味著-loglevel verbose。

將環(huán)境變量設(shè)置FFREPORT為任何值具有相同的效果。如果該值是一個’:’ - 分隔鍵=值序列,這些選項會影響報表;如果包含特殊字符則需要使用轉(zhuǎn)義字符,或者“:”分隔(參見的ffmpeg-utils的手冊中的“引用與轉(zhuǎn)義”一節(jié))。

下列選項也可使用:

`file`
設(shè)置報告使用的文件名??; %p添加程序名, %t添加時間戳, %%添加一個普通的%

`level`
設(shè)置使用的數(shù)值(查看日志詳細(xì)級別`-loglevel` )。

例如,要輸出到名為ffreport.log使用的一個日志級別文件的報告32 (日志級別info的別稱 ):

FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

非致命的環(huán)境變量的解析錯誤不會出現(xiàn)在報告中。

-hide_banner

不打印橫幅。

所有FFmpeg的工具通常會顯示一個版權(quán)聲明,構(gòu)建選項和庫版本。此選項可以用來抑制打印此信息。

-cpuflags flags (global)

允許設(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_bench

測試所有可用的OpenCL設(shè)備并顯示結(jié)果。此選項僅當(dāng)FFmpeg含有–enable-opencl 編譯時可用。

-opencl_options options (global)

設(shè)置的OpenCL環(huán)境選項。此選項僅當(dāng)FFmpeg的已編譯–enable-opencl 。

options必須是冒號分隔的key = value選項對。參見ffmpeg-utils的手冊中的“OpenCL的選項”部分的內(nèi)容。

5.3 AVOption選項

這些選項直接由libavformat,libavdevicelibavcodec庫提供。要查看可用AVOption的列表,請使用-help選項。它們被分為兩類:

generic 這些選項可以為任何容器,編解碼器或設(shè)備進(jìn)行設(shè)置。通用的選項都列在AVFormatContext選擇容器/設(shè)備和AVCodecContext選擇編解碼器小節(jié)。

private 這些選項是作用于給定的容器,裝置或編解碼器。私有選項列在其相應(yīng)的容器/設(shè)備/編解碼器。

比如編輯ID3v2.3頭而不是默認(rèn)的ID3v2.4到MP3文件,使用MP3混合器的id3v2_version私有選項:

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

所有編解碼器AVOption選項是按流指定的,并且因此應(yīng)該指定相應(yīng)的流標(biāo)識符。

注: -nooption語法不能用于布爾AVOption選項,請使用-option 0/-option 1 。

注:老的前綴v/a/s的流標(biāo)識記號已經(jīng)過時,將被移除。

5.4 主要選項

-f fmt (input/output)

強(qiáng)制指定輸入或輸出的文件格式。輸入文件的格式通常是自動檢測的,輸出文件的格式由該文件的擴(kuò)展名猜測,所以在大多數(shù)情況下不需要此選項。

-i filename (input)

輸入的文件名

-y (global)

直接覆蓋輸出文件。

-n (global)

如果指定的輸出文件已經(jīng)存在,不要覆蓋輸出文件,并立即退出。

-c[:stream_specifier] codec (input/output,per-stream)

-codec[:stream_specifier] codec (input/output,per-stream)

用于對一個或多個數(shù)據(jù)流指定一個編碼器(一個輸出文件之前使用時)或一個解碼器(一個輸入文件之前使用時)。 codec是一個解碼器/編碼器的名稱或特殊值copy (僅輸出),copy表示該流不是被重新編碼。

例如

`ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT`
使用libx264編碼所有視頻流并拷貝所有音頻流。

對于每個數(shù)據(jù)流,最后匹配的c選項被應(yīng)用,所以

`ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT`
將復(fù)制的所有流除了第二視頻流,并將用libx264進(jìn)行編碼,并且對于第138個音頻流用libvorbis進(jìn)行編碼。

-t duration (input/output)

當(dāng)作為輸入選項(在-i之前 ),限制從輸入文件中讀取數(shù)據(jù)的duration。

當(dāng)作為輸出選項(輸出文件名之??前)使用,在達(dá)到duration后停止寫入輸出文件。

duration可能是以秒為單位,或以hh:mm:ss[.xxx]形式出現(xiàn)。

-to-t是相互排斥的,-t具有優(yōu)先權(quán)。

-to position (output)

position位置停止輸出。 position可能是一個表示秒數(shù)的數(shù),或hh:mm:ss[.xxx]形式。

-to-t是相互排斥的,-t具有優(yōu)先權(quán)。

-fs limit_size (output)

設(shè)置文件大小限制,以字節(jié)表示。

-ss position (input/output)

當(dāng)用作輸入選項一起使用(在-i 以前),跳轉(zhuǎn)到輸入文件中position 位置。請注意,在大多數(shù)的格式是不可能確切定位,這樣ffmpeg將尋求最接近的position位置點。當(dāng)轉(zhuǎn)碼和-accurate_seek啟用(默認(rèn)設(shè)置),尋找點和position位置之間的附加段將被解碼并丟棄。當(dāng)進(jìn)行流復(fù)制或當(dāng)-noaccurate_seek被使用時,它都將被保留。

當(dāng)用作輸出選項(在輸出文件名??前),解碼但丟棄輸入直到時間戳到達(dá)的位置。

position位置可以是秒數(shù)或hh:mm:ss[.xxx]形式。

-itsoffset offset (input)

設(shè)置輸入時間偏移。

offset必須是持續(xù)時間規(guī)范,請參閱(ffmpeg-utils)在FFmpeg-utils(1)手動的持續(xù)時間段的相關(guān)內(nèi)容 。

偏移被添加到輸入文件的時間戳。指定一個正偏移意味著相應(yīng)流將延遲offset所指定的時間。

-timestamp date (output)

設(shè)置在容器內(nèi)記錄的時間戳。

date必須是一個規(guī)范的持續(xù)時間,請參閱(ffmpeg-utils)在FFmpeg-utils的(1)日期部分 。

-metadata[:metadata_specifier] key=value (output,per-metadata)

設(shè)置元數(shù)據(jù)的鍵/值對。

可選metadata_specifier可以被用于設(shè)置流或章節(jié)的元數(shù)據(jù)。見-map_metadata文檔的詳細(xì)信息。

此選項將覆蓋-map_metadata設(shè)置的元數(shù)據(jù)。另外,也可以通過使用空值來刪除元數(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`

-target type (output)

指定目標(biāo)文件類型( vcd , svcd , dvd , dv , dv50 )。 類型可能與前綴pal- , ntsc-film-使用相應(yīng)的標(biāo)準(zhǔn)。所有的格式選項(比特率,編解碼器,緩沖大小)都將自動設(shè)置。你僅需鍵入:

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

不過,你可以指定其他選項,只需你知道他們與標(biāo)準(zhǔn)不沖突,如:

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

-dframes number (output)

設(shè)置輸出數(shù)據(jù)的幀數(shù)。這是-frames:d的別名。

-frames[:stream_specifier] framecount (output,per-stream)

framecount幀后停止寫入流。

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

使用固定編碼率(VBR)。q/qscale的意思與編解碼器定義相關(guān)。如果qscale不與stream_specifier聯(lián)用,那么它僅適用于視頻流,這是為了保持兼容性。另外將相同的編碼器參數(shù)賦給兩個不同的編解碼器通常并不是用戶想要的,因此若需要這樣的功能,可以使用流標(biāo)識符(stream_specifier)來指定。

-filter[:stream_specifier] filtergraph (output,per-stream)

創(chuàng)建由FilterGraph指定的濾鏡組并使用它。

FilterGraph是作用于流的濾鏡組的描述,而且必須有一個單一的輸入和同一類型的數(shù)據(jù)流輸出。

在濾鏡組里,輸入被關(guān)聯(lián)到in標(biāo)簽 ,輸出到out標(biāo)簽 。關(guān)于ffmpeg濾鏡組的語法可參見ffmpeg-filters的手冊。

如果你想創(chuàng)建具有多個輸入或輸出的濾鏡組,參見-filter_complex的相關(guān)選項。

-filter_script[:stream_specifier] filename (output,per-stream)

這個選項類似于-filter,唯一的區(qū)別是,它的參數(shù)是濾鏡組所在的文件名。

-pre[:stream_specifier] preset_name (output,per-stream)

指定匹配流(S)的預(yù)設(shè)。

-stats (global)

打印編碼進(jìn)度/統(tǒng)計數(shù)據(jù)。這是默認(rèn)值,你可通過指定-nostats禁用 。

-progress url (global)

發(fā)送程序友好的進(jìn)展信息到url

進(jìn)度信息大約每秒和編碼過程結(jié)束后寫入。它是由key = value行組成。 key只能包含字母和數(shù)字字符。最后一個關(guān)鍵字序列始終是progress

-stdin

啟用標(biāo)準(zhǔn)輸入交互。這是默認(rèn)設(shè)置,除非標(biāo)準(zhǔn)輸入被作為輸入。要明確禁用互動,你需要指定-nostdin。

在標(biāo)準(zhǔn)輸入禁用相互作用是很有用的,例如,如果ffmpeg在后臺進(jìn)程組中。大致相同的結(jié)果可以用ffmpeg ... < /dev/null實現(xiàn),但它需要一個終端。

-debug_ts (global)

打印時間戳信息。它默認(rèn)是關(guān)閉的。此選項主要是用于測試和調(diào)試目的,輸出格式可從一個版本切換到另一個,所以它不應(yīng)該在可移植腳本中使用。

參見-fdebug ts選項。

-attach filename (output)

添加一個附件到輸出文件。這僅由幾個格式支持。例如Matroska格式,這個文件可以是用來渲染字幕使用的字體。附件被實現(xiàn)為數(shù)據(jù)流的一個特定類型的,因此該選項將增加一個新的流的文件。因此,可以以通常的方式在此流使用每個流的選??項。使用此選項創(chuàng)建的附件流將所有的其他流之后創(chuàng)建(也即那些由-map或自動映射創(chuàng)建的流)。

請注意,對于Matroska,你還必須設(shè)置mimetype元數(shù)據(jù)標(biāo)簽:

`ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv`
(假設(shè)該附件流將是輸出文件的第三個流)。

-dump_attachment[:stream_specifier] filename (input,per-stream)

提取匹配的附件流成一個名??為filename的文件??。如果filename??是空的,那么??元數(shù)據(jù)標(biāo)簽中的filename標(biāo)簽的值將被使用。

例如,提取第一附件到“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 視頻選項

-vframes number (output)

設(shè)置視頻幀的輸出數(shù)量。這是的-frames:v別名 。

-r[:stream_specifier] fps (input/output,per-stream)

設(shè)置幀速率(Hz值,分?jǐn)?shù)或縮寫)。

作為輸入選項,忽略存儲在文件中的任何時間戳,而是產(chǎn)生時間戳假設(shè)恒定的幀速率fps這與一些輸入格式,諸如image2或者v4l2,中的-framerate選項是不同的(在老版本的ffmpeg中是一樣的)。如有疑問,使用的輸入選項-framerate代替-r。

作為輸出選項,復(fù)制或刪除輸入幀以達(dá)到恒定的輸出幀速率fps。

-s[:stream_specifier] size (input/output,per-stream)

設(shè)置幀尺寸。

作為輸入的選項,這是私有選項video_size的快捷方式,部分分流器可以識別該參數(shù),這時幀大小或者未存儲在文件中或不可配置,例如原始視頻或視頻采集卡。

作為輸出的選擇,這將插入scale視頻濾鏡到相應(yīng)濾鏡組的末端 。如需改變?yōu)V鏡位置,請將scale濾鏡直接插入到開頭或其他地方。

格式是wxh(默認(rèn)值是使用與源相同的尺寸)。

-aspect[:stream_specifier] aspect (output,per-stream)

設(shè)置指定視頻顯示的寬高比aspect。

aspect可以是一個浮點數(shù),或使用形如 num: den 的形式,其中num是分子,den是分母。例如,“4:3”,“16:9”,“1.3333”,和“1.7777”都是有效的參數(shù)值。

如果與-vcodec copy一起使用,這會影響儲存在容器級別的寬高比,而不是存儲在編碼幀的寬高比,如果有的話。

-vn (output)

禁用視頻錄制。

-vcodec codec (output)

設(shè)置視頻編解碼器。這是-codec:v的別名。

-pass[:stream_specifier] n (output,per-stream)

選擇通過次數(shù)(1或2)。它是用來做兩遍視頻編碼。視頻的統(tǒng)計信息記錄在第一次編碼時寫入到日志文件中(也參見選項-passlogfile),在第二次編碼時,該日志文件被用于按要求生成準(zhǔn)確比特率的視頻。在第一次編碼中,你可以通過禁用音頻并將輸出設(shè)置為null,下面為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)

設(shè)置二次編碼的日志文件名 ??前綴為prefix ,默認(rèn)的文件名 ??前綴是ffmpeg2pass。完整的文件名 ??將是PREFIX-N.log,其中N是一個輸出流的特定數(shù)字

-vf filtergraph (output)

創(chuàng)建由filtergraph指定的濾鏡組,并使用它。

這是-filter:v的別名 ,參見-filter選項。

5.6 高級視頻選項

-pix_fmt[:stream_specifier] format (input/output,per-stream)

設(shè)置的像素格式。使用-pix_fmts顯示所有支持的像素格式。如果所選擇的像素格式不能被選擇,ffmpeg將打印警告,并選擇由編碼器所支持的最好的像素格式。如果pix_fmt前綴+ ,如果請求的像素格式不能被選中,ffmpeg會出現(xiàn)錯誤退出,同時濾鏡組中的自動轉(zhuǎn)換將被禁用。如果pix_fmt是一個單一的+ ,ffmpeg的選擇與輸入或者濾鏡輸出相同的像素格式,并將禁用自動轉(zhuǎn)換。

-sws_flags flags (input/output)

設(shè)置軟件縮放的標(biāo)志。

-vdt n

丟棄的閾值。

-rc_override[:stream_specifier] override (output,per-stream)

覆蓋特定的時間間隔內(nèi)的幀率控制,格式為用斜杠分隔的“整型,整型,整型”列表。前兩個值是在開始和結(jié)束幀編號,最后一個如果是正數(shù),則為量化器;負(fù)數(shù)則為品質(zhì)因數(shù)。

-ilme

支持編碼器force interlacing(僅對MPEG-2和MPEG-4有效)。如果你的輸入文件是隔行并要保持隔行格式最小損失,請使用此選項。另一種方法是使用-deinterlace反交錯輸入流,但這會引入損失。

-psnr

計算壓縮幀的PSNR(偽信噪比)。

-vstats

輸出視頻編碼統(tǒng)計到vstats_HHMMSS.log。

-vstats_file file

輸出頻編碼統(tǒng)計到file。

-top[:stream_specifier] n (output,per-stream)

top=1/bottom=0/auto=-1 field first

-dc precision

Intra_dc_precision.

-vtag fourcc/tag (output)

強(qiáng)制視頻 tag/ fourcc。這是-tag:v的別名。

-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)

強(qiáng)制關(guān)鍵幀在指定的時間戳,更精確地在每個指定的時間之后的第一幀。

如果參數(shù)的前綴expr:,expr將解釋為一個表達(dá)式,并在每一幀執(zhí)行。如果運(yùn)行結(jié)果非零,一個關(guān)鍵幀被強(qiáng)制加入。

如果時間之一是chapters [ delta ],它被擴(kuò)展成的文件中的所有章節(jié)開始通過delta偏移的時間(時間以秒為單位)。這個選項可能是有用的,以確保存在一個搜索點位于章節(jié)標(biāo)記或者在輸出文件中的任何其它指定的地方。

例如,在5分鐘插入一個關(guān)鍵幀,同時在每章開始前0.1秒插入一個關(guān)鍵幀:

`-force_key_frames 0:05:00,chapters-0.1`

expr中可以包含以下常量:

`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選項或類似選項會更有效。

-copyinkf[:stream_specifier] (output,per-stream)

當(dāng)復(fù)制流時,也復(fù)制起始處的非關(guān)鍵幀。

-hwaccel[:stream_specifier] hwaccel (input,per-stream)

使用硬件加速解碼匹配流。hwaccel的允許值包括:

`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)一步的性能損失。因此此選項主要用于測試。

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)

選擇一個設(shè)備使用硬件加速。

此選項僅使得同時與-hwaccel選項使用。它的確切含義取決于所選擇的具體硬件加速方法。

`vdpau`
對于VDPAU,此選項在X11中使用。如果沒有指定這個選項, DISPLAY環(huán)境變量的值被使用

`dxva2`
對于DXVA2,這個選項應(yīng)包含在顯示適配器使用的數(shù)量。如果未指定此選項,默認(rèn)的適配器將被使用。

5.7 音頻選項

-aframes number (output)

設(shè)定的音頻幀輸出的數(shù)目。這是-frames:a 的別名。

-ar[:stream_specifier] freq (input/output,per-stream)

設(shè)置音頻采樣頻率。對于輸出流,將默認(rèn)設(shè)置為相應(yīng)的輸入流的采樣頻率。對于輸入流該選項僅對音頻抓取設(shè)備和raw格式分流器和映射到相應(yīng)分流器上的選項有效。

-aq q (output)

設(shè)置音頻質(zhì)量(與編解碼器有關(guān),VBR)。這是-q:a的別名。

-ac[:stream_specifier] channels (input/output,per-stream)

設(shè)置音頻通道的數(shù)目。輸出流默認(rèn)將設(shè)置為輸入音頻信道的數(shù)目。對于輸入流該選項僅對音頻抓取設(shè)備和raw格式分流器和映射到相應(yīng)分流器上的選項有效。

-an (output)

禁用錄音。

-acodec codec (input/output)

設(shè)置音頻解碼器。這是-codec:a的別名。

-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)

設(shè)置音頻樣本格式。使用-sample_fmts得到支持的采樣格式的列表。

-af filtergraph (output)

創(chuàng)建由FilterGraph指定的濾鏡組并使用它。

這是-filter:a的別名 ,參見-filter選項。

5.8 高級音頻選項

-atag fourcc/tag (output)

強(qiáng)制音頻tag/fourcc值。這是-tag:a的別名。

-absf bitstream_filter

已過時,參見-bsf

-guess_layout_max channels (input,per-stream)

如果一些輸入通道布局是未知的,試圖猜測它最多的聲道數(shù)量。例如,2要求ffmpeg識別1個通道為單聲道和2聲道立體聲,6聲道作為5.1。默認(rèn)是總是試圖去猜測。用0來禁用所有的猜測。

5.9 字幕選項

-scodec codec (input/output)

設(shè)置字幕的編解碼器。這是-codec:s的別名。

-sn (output)

關(guān)閉字幕記錄。

-sbsf bitstream_filter

已過時,參見-bsf

5.10 高級字幕選項

-fix_sub_duration

調(diào)整字幕的持續(xù)時間。對于每個字幕,等待在相同的流中的下一個分組,并調(diào)節(jié)第一持續(xù)時間,以避免重疊。這對某些字幕編解碼器是必要的,特別是數(shù)字電視廣播字幕(DVB),因為在原來的分組的持續(xù)時間僅僅是一個粗略的估計,結(jié)束標(biāo)記是通過一個空的字幕幀完成的。沒有使用這個選項在必要時可導(dǎo)致夸張的持續(xù)時間,或由于非單調(diào)時間戳混流故障。

注意,此選項將延遲所有數(shù)據(jù)的輸出直到下一個字幕分組被解碼:它可能會增加內(nèi)存消耗和延遲。

-canvas_size size

設(shè)置用于呈現(xiàn)字幕的畫布的大小。

5.11 高級選項

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

指定一個或多個輸入流作為用于輸出文件的來源。每個輸入流由輸入文件索引input_file_id和輸入流索引input_stream_id標(biāo)識。這兩個指標(biāo)都是從0開始。sync_file_id:stream_specifier可用于指定輸入流作為同步參考。

在命令行上第一個-map選項指定的輸出流0,第二-map選項指定的源輸出流1等

一個連字符-創(chuàng)建一個“否定的”的映射。它禁用從已經(jīng)建立映射中匹配流。

另一種LinkLabel的形式將映射從復(fù)雜濾波器組輸出到輸出文件(見-filter_complex選項)。 LinkLabel必須對應(yīng)于一個鏈路中已定義的輸出標(biāo)簽。

例如,映射第一輸入文件的所有流到輸出
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)映射。

-map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]

映射從一個給定的輸入音頻聲道到輸出。如果output_file_id.stream_specifier未設(shè)置時,聲道將被映射的所有音頻流。

使用-1替代input_file_id.stream_specifier.channel_id將映射一個靜音聲道。

例如,假設(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

-map_channel選項的順序指定在輸出流中的聲道的順序。所述輸出信道的布局是從映射信道數(shù)猜測的(如果只有一個-map_channel,則使用單聲道,如果是2,則使用立體聲,如此等等)。如果輸入和輸出信道的布局不匹配(例如2個-map_channel-ac 6),聯(lián)合使用-map_channel-ac將更新聲道的增益水平。

您也可以提取各個輸入通道到特定的輸出;以下命令中提取的兩個通道的INPUT音頻流(文件0,流0)到相應(yīng)的OUTPUT_CH0OUTPUT_CH1輸出:

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

注意,目前每個輸出流只能包含來自單個輸入流的聲道;不能使用-map_channel從不同的數(shù)據(jù)流提取的多個輸入音頻聲道(來自相同的或不同的文件),并將它們合并成一個單一的輸出流。因此,目前不可能完成例如把兩個單獨的單聲道流成一個單一的立體聲流的任務(wù)。然而,拆分立體聲流分成兩個單信道單聲道流則是可能的。

如果你需要這個功能,一個可能的解決方法是使用amerge濾鏡。例如,如果你需要用2個單聲道音頻融合媒體中的(在這里是input.mkv)流成一個單一的立體聲聲道音頻流(并保持視頻流),可以使用下面的命令:

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)

根據(jù)infile設(shè)置下一個輸出文件的元數(shù)據(jù)信息。請注意,這些都是文件索引(從零開始),而不是文件名。可選參數(shù)metadata_spec_in/out可用于指定哪些元數(shù)據(jù)進(jìn)行復(fù)制。元數(shù)據(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)。

-map_chapters input_file_index (output)

從輸入文件復(fù)制章節(jié)與索引input_file_index到下一個輸出文件中。如果不指定章節(jié)映射,則章節(jié)從第一輸入文件復(fù)制并至少有一個章節(jié)。使用負(fù)的文件索引來排除任何章節(jié)的復(fù)制。

-benchmark (global)

在編碼結(jié)束顯示基準(zhǔn)信息。顯示使用的CPU時間和最大內(nèi)存消耗。不是所有系統(tǒng)都支持最大內(nèi)存消耗,如果不支持,它通常會顯示為0。

-benchmark_all (global)

顯示編碼過程中基準(zhǔn)信息。顯示各個步驟(音頻/視頻編碼/解碼)所使用的CPU時間。

-timelimit duration (global)

在已經(jīng)運(yùn)行duration秒后退出ffmpeg

-dump (global)

轉(zhuǎn)儲每個輸入包到標(biāo)準(zhǔn)錯誤流。

-hex (global)

當(dāng)dump包時,也dump有效載荷。

-re (input)

讀取輸入的原始幀速率。主要用于模擬抓取設(shè)備?;?qū)崟r輸入流(例如從文件讀取時)。不應(yīng)該在實際的抓取設(shè)備或?qū)崟r輸入流中使用(它可能會導(dǎo)致數(shù)據(jù)包丟失)。默認(rèn)ffmpeg嘗試盡可能快地讀出輸入端。此選項會減慢輸入的本地幀速率的讀取。它是用于實時輸出(如直播)是有用的。

-loop_input

循環(huán)輸入流。目前,它僅適用于圖像流。此選項用于自動測試ffserver。此選項已被棄用,使用-loop 1。

-loop_output number_of_times

反復(fù)循環(huán)輸出支持循環(huán)的格式如動畫GIF(0意味著無限循環(huán)輸出)。此選項已被棄用,使用-loop。

-vsync parameter

視頻同步方法。出于兼容性考慮舊值可以被指定為數(shù)字。新添加的值將必須總是指定為字符串。

0, passthrough
每一幀傳遞從分流器到復(fù)用器的時間戳。

1, cfr
幀將被復(fù)制并下降至達(dá)到完全所需的恒定幀速率。

2, vfr
幀通過與其時間戳或下降,從而防止兩幀具有相同的時間戳。

drop
與passthrough相同,但破壞所有時間戳,使得復(fù)用器生成基于幀速率新的時間戳。

-1, auto
根據(jù)復(fù)用器的功能選擇1或者2。這是默認(rèn)的方法。

注意,該時間戳在此之后可以進(jìn)一步由復(fù)用器修改。例如,在格式選項avoid_negative_ts被啟用時。

-map聯(lián)用,您可以選擇從哪個流提取時間戳。您可以留下視頻或音頻不變,同步剩余流不變的。

-async samples_per_second

音頻同步的方法?!吧煺?擠壓”音頻流相匹配的時間戳,所述參數(shù)是音頻發(fā)生改變所容許的每秒最大點數(shù)。-async 1是一種特殊情況,音頻數(shù)據(jù)流僅在開始校正,而其后將不再校正。

注意,該時間戳在此之后可以進(jìn)一步由復(fù)用器修改。例如,在格式選項avoid_negative_ts被啟用時。

此選項已被棄用。使用aresample音頻過濾器代替。

-copyts

不要處理輸入時間戳,但保持它們的值,不嘗試對它們進(jìn)行sanitize。尤其是,不要刪除初始啟動時間偏移值。

需要注意的是,即使使用了該選項,根據(jù)不同的vsync選項或?qū)μ囟◤?fù)用器處理(例如格式選項avoid_negative_ts被啟用)輸出時間戳與輸入可能不匹配時間戳。

-start_at_zero

當(dāng)與copyts使用,調(diào)整輸入時間戳,使他們從零開始。

這意味著使用例如-ss 50將使輸出時間戳開始50秒時,不管輸入文件開始處的時間戳是多少。

-copytb mode

指定在拷貝流時如何設(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。

-shortest (output)

最短的輸入流結(jié)束時完成編碼。

-dts_delta_threshold

時間戳間斷門檻。

-muxdelay seconds (input)

設(shè)置最大分流解碼延時。

-muxpreload seconds (input)

設(shè)定初始解碼分流延遲。

-streamid output-stream-index:new-value (output)

分配一個新流id值到輸出流。該選項?需指定到輸出文件名之前。對于在多個輸出文件存在的情況下,一個流id將被重新分配到不同的值。

例如,要設(shè)置流0 到流33,同時流1至流36,到MPEGTS格式的輸出文件:
ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts

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

指定匹配流的bitstream_filters。它是一個逗號分隔的濾鏡列表。使用-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)

指定匹配流的tag/fourcc。

-timecode hh:mm:ssSEPff

指定寫入的時間碼。對于non drop 時間碼,分隔符SEP是: 對于drop時間碼是; (或.)。

ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg

-filter_complex filtergraph (global)

定義復(fù)雜FilterGraph,即具有輸入和/或輸出任意個數(shù)的濾鏡組。對于簡單濾鏡——那些具有一個輸入和相同類型的一個輸出的濾鏡——參見-filter選項。FilterGraph是FilterGraph的描述,參見FFMPEG濾鏡手冊的“FilterGraph語法”部分中的描述。

輸入鏈路標(biāo)簽必須關(guān)聯(lián)到使用[file_index:stream_specifier]語法標(biāo)記的輸入流(即-map選項中使用的格式)。如果stream_specifier匹配多個流,第一個將被使用。未標(biāo)記的輸入將被連接到匹配類型的第一未使用的輸入流。

輸出鏈接標(biāo)簽由-map指定。未標(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

-lavfi filtergraph (global)

定義復(fù)雜FilterGraph,即具有輸入和/或輸出任意個數(shù)的濾鏡組。相當(dāng)于-filter_complex。

-filter_complex_script filename (global)

這個選項類似于-filter_complex,唯一的區(qū)別是,它的參數(shù)是包含被讀取FilterGraph的文件的名稱。

-accurate_seek (input)

此選項啟用或禁用準(zhǔn)確尋求輸入文件,配合-ss選項使用。它默認(rèn)是啟用的,所以當(dāng)轉(zhuǎn)碼時是準(zhǔn)確的。使用-noaccurate_seek禁用它,在拷貝一些數(shù)據(jù)流和轉(zhuǎn)碼時,這可能是有用的。

-override_ffserver (global)

從ffserver 覆蓋輸入規(guī)格。使用這個選項,你可以映射任何輸入流到ffserver,并從ffmpeg 控制編碼的許多方面。如果沒有這個選項ffmpeg將發(fā)送ffserver要求的內(nèi)容。

該選項用于那些不能被指定到ffserver的功能 ,即便他們可以用于ffmpeg 。

-discard (input)

允許在分路器丟棄特定流或流幀。不是所有的分路器都支持。

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ù)置文件是包含option = value的文件 ,每行一個,指定的選項需按照命令行中的順序?!!_頭的字符行被忽略,并用來提供注釋。參見FFmpeg的源代碼樹中的preset目錄中的例子。

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 提示

  • 為在非常低的比特率流,使用低幀速率和小的GOP大小。這對于那些配置較低的Linux用戶上播放RealVideo尤是如此,它可能會丟幀。例如:ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm

  • 編碼中顯示的參數(shù)“q”是當(dāng)前量化器。值1表示非常良好的質(zhì)量。值31表示最差的質(zhì)量。如果Q = 31出現(xiàn)過于頻繁,這意味著該編碼器無法壓縮到滿足您的比特率要求的碼率。您必須增加比特率,降低幀率或減少幀的大小。

  • 如果你的電腦不夠快,可以犧牲壓縮比換取速度。你可以用-me 0加快運(yùn)動估計和-g 0完全禁用運(yùn)動估計(你僅有I-frames,這意味著它幾乎和JPEG壓縮一樣好)。

  • 可通過降低采樣頻率獲得非常低的音頻比特率(對于MPEG音頻,下降到22050Hz,對于AC-3, 使用22050或11025Hz)。

  • 有一個恒定的質(zhì)量(但可變比特率),使用選項-qscale N時,N是1(優(yōu)秀品質(zhì))和31(質(zhì)量最差)之間。

7 范例

7.1 預(yù)置文件

預(yù)置文件包含option=value,一個用于每行,指定其也可以指定的命令行上的選項的序列的序列?!!_頭的字符行被忽略,并用來提供注釋??招袑⒁脖缓雎?。檢查的例子FFmpeg的源代碼樹中的preset目錄。

預(yù)置文件中指定的pre選項,這個選項需要一個預(yù)設(shè)名稱作為輸入。FFmpeg在$AVCONV_DATADIR$HOME/.ffmpeg以及編譯時指定的目錄(通常是$PREFIX/share/ffmpeg)的目錄中搜索文件名??為preset_name.avpreset 的文件。例如,如果該參數(shù)是libx264-max,它會搜索文件libx264-max.avpreset。

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文件作為輸入: 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,/ tmp目錄/ TEST0。U, /tmp/test0.V,
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...

Y文件使用的U和V文件的分辨率的兩倍。他們是原始文件,沒有頭信息。他們可以通過所有視頻解碼器產(chǎn)生。您必須指定圖像的大小與-s選項,如果ffmpeg的不能猜測它。

您可以從原始YUV420P文件輸入: ffmpeg -i /tmp/test.yuv /tmp/out.avi

test.yuv是含有生YUV平面數(shù)據(jù)的文件。每個幀是由Y平面后跟U和V平面的一半的垂直和水平分辨率。

可以輸出到原始文件YUV420P: ffmpeg -i mydivx.avi hugefile.yuv

您可以設(shè)置多個輸入文件和輸出文件: ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

轉(zhuǎn)換音頻文件a.wav和原始YUV視頻文件a.yuv到MPEG文件a.mpg。

你也可以同時做音頻和視頻轉(zhuǎn)換: ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2

使用22050赫茲的采樣率轉(zhuǎn)換a.wav到MPEG音頻。

可以同時進(jìn)行多種格式的編碼,并定義從輸入流到輸出數(shù)據(jù)流的映射: ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2

轉(zhuǎn)換a.wav到64千比特的a.mp2和128千比特的b.mp2。-map file:index輸出數(shù)據(jù)流的定義的順序指定了用于每一個輸出流的輸入流。

您可以轉(zhuǎn)碼解密的VOB: 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

這是一個典型的DVD翻錄的例子;輸入是VOB文件,輸出與MPEG-4視頻和MP3音頻的AVI文件。注意,在這個命令,我們使用B幀,以便對MPEG-4流與DivX5兼容,并且GOP大小為300,這意味著每10秒插入一幀到29.97fps的輸入視頻。此外,音頻流是MP3編碼,所以你需要啟用通過傳遞LAME支持可使用–enable-libmp3lame配置。該映射是特別有用的用于DVD的轉(zhuǎn)碼,以獲得所需的音頻語言。

注意:使用ffmpeg -formats查看支持的輸入格式。

您可以從視頻中提取圖像,或從圖像創(chuàng)建視頻:

從視頻中提取圖片: ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

這將每秒提取一個視頻幀,并輸出到名為foo-001.jpeg,foo-002.jpeg等圖片中。圖片將被重新縮放到定義的尺寸。

如果你想提取有限數(shù)量的幀,你可以組合使用上面的命令與-vframes或-t選項,或與-ss開始從某一個時間點提取。

從圖像創(chuàng)建視頻: ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi

語法foo-%03d.jpeg指定要使用的三個數(shù)字組成的十進(jìn)制數(shù)用零填充到表達(dá)的序列號。它支持C語言printf函數(shù)相同的語法,但只有格式接受整數(shù)。

當(dāng)導(dǎo)入圖像序列,-i還支持Shell擴(kuò)展通配符。這在內(nèi)部通過image2-specific-pattern_type glob選項選擇。

例如,從文件名?匹配foo-*.jpeg的圖片創(chuàng)建視頻 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

產(chǎn)生的輸出文件test12.nut將包含從以相反的順序存儲的輸入文件中的四個流。

要強(qiáng)制CBR視頻輸出: ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v

lmin,lmaxmblminmblmax四個選項的單位是lambda,但你可以使用QP2LAMBDA常熟輕松地從q單位轉(zhuǎn)換: ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多