轉(zhuǎn)自:https://wanglongqi.github.io/tools/2015/02/13/ffmpegcn/
0.常用參數(shù)快捷:
主要參數(shù):
-
-i
——設(shè)置輸入文件名。 -
-f
——設(shè)置輸出格式后控。 -
-y
——若輸出文件已存在時(shí)則覆蓋文件屉来。 -
-fs
——超過指定的文件大小時(shí)則結(jié)束轉(zhuǎn)換。 -
-t
——指定輸出文件的持續(xù)時(shí)間,以秒為單位洁灵。 -
-ss
——從指定時(shí)間開始轉(zhuǎn)換,以秒為單位掺出。 -
-t
從-ss
時(shí)間開始轉(zhuǎn)換(如-ss 00:00:01.00 -t 00:00:10.00
即從00:00:01.00開始到00:00:11.00)徽千。 -
-title
——設(shè)置標(biāo)題。 -
-timestamp
——設(shè)置時(shí)間戳汤锨。 -
-vsync
——增減Frame使影音同步双抽。 -
-c
——指定輸出文件的編碼。 -
-metadata
——更改輸出文件的元數(shù)據(jù)泥畅。 -
-help
——查看幫助信息
影像參數(shù):
-
-b:v
——設(shè)置影像流量荠诬,默認(rèn)為200Kbit/秒琅翻。(單位請(qǐng)引用下方注意事項(xiàng)) -
-r
——設(shè)置幀率值位仁,默認(rèn)為25。 -
-s
——設(shè)置畫面的寬與高方椎。 -
-aspect
——設(shè)置畫面的比例聂抢。 -
-vn
——不處理影像,于僅針對(duì)聲音做處理時(shí)使用棠众。 -
-vcodec( -c:v )
——設(shè)置影像影像編解碼器琳疏,未設(shè)置時(shí)則使用與輸入文件相同之編解碼器。
聲音參數(shù):
-
-b:a
——設(shè)置每Channel(最近的SVN版為所有Channel的總合)的流量闸拿。(單位請(qǐng)引用下方注意事項(xiàng)) -
-ar
——設(shè)置采樣率空盼。 -
-ac
——設(shè)置聲音的Channel數(shù)。 -
-acodec ( -c:a )
——設(shè)置聲音編解碼器新荤,未設(shè)置時(shí)與影像相同揽趾,使用與輸入文件相同之編解碼器。 -
-an
——不處理聲音苛骨,于僅針對(duì)影像做處理時(shí)使用篱瞎。 -
-vol
——設(shè)置音量大小苟呐,256為標(biāo)準(zhǔn)音量。(要設(shè)置成兩倍音量時(shí)則輸入512俐筋,依此類推牵素。)
1. 概要
ffmpeg [global_options] {[input_file_options] -i INPUT_FILE} ... {[output_file_options] OUTPUT_FILE} ...}
2. 說明
是一個(gè)非常快的視頻和音頻轉(zhuǎn)換器澄者,還可以抓取實(shí)時(shí)的音頻/視頻流笆呆。它可以在任意的采樣率之間的轉(zhuǎn)換和調(diào)整視頻,并同時(shí)使用高品質(zhì)的多相濾波器粱挡。
從輸入“文件”(其可以是常規(guī)文件腰奋,管道,網(wǎng)絡(luò)流抱怔,錄制裝置等)劣坊,由指定任意數(shù)量的讀取
選項(xiàng),并寫入到任意數(shù)量的輸出“文件”屈留,只需指定一個(gè)輸出的文件名局冰。任何一個(gè)命令行中不能被解釋為選項(xiàng)的內(nèi)容都被認(rèn)為是一個(gè)輸出文件名。
每個(gè)輸入或輸出文件可以在原則上灌危,包含任意數(shù)量的不同類型(視頻/音頻/字幕/附件/數(shù)據(jù))的流康二。輸出文件中允許流的數(shù)量和類型是由輸出格式容器限制決定的。輸入流和輸出流直接的映射可以自動(dòng)完成也可以用選項(xiàng)給定(見流選擇章節(jié))勇蝙。
引用輸入文件的選項(xiàng)時(shí)沫勿,則必須使用他們的索引(從0開始)。例如:第一輸入文件是0 味混,第二個(gè)是1等产雹。類似地,一個(gè)文件中的流也通過其索引指定翁锡。例如2:3指的是在第三個(gè)輸入文件中的第四數(shù)據(jù)流蔓挖。參見流章節(jié)。
作為一般規(guī)則馆衔,選項(xiàng)作用于下一個(gè)指定的文件瘟判。因此,命令的順序是重要角溃,你可以在命令行上多次相同的選項(xiàng)拷获。每次選項(xiàng)的出現(xiàn)都將作用于下一個(gè)輸入或輸出文件。這條規(guī)則若有例外將會(huì)提前聲明(例如冗余級(jí)別)减细。
不要混合輸入和輸出文件匆瓜。首先指定所有輸入文件,那么所有的輸出文件。也不要混用屬于不同的文件的選項(xiàng)陕壹。所有選項(xiàng)僅適用于下一個(gè)輸入或輸出文件质欲,之后選項(xiàng)將被重置。
設(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)制輸入文件的幀頻(僅對(duì)原始格式有效)糠馆,以1 FPS讀入文件嘶伟,以每秒24幀的幀速率輸出:
ffmpeg -r 1 -i input.m2v -r 24 output.avi
format 選項(xiàng)可能需要指定,對(duì)于原始輸入文件又碌。
3. 詳細(xì)描述
在轉(zhuǎn)碼過程ffmpeg每個(gè)輸出可以由以下圖描述:
_______ ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|
調(diào)用libavformat庫(含分流器)來讀取輸入文件并獲得含有他們編碼信息的數(shù)據(jù)包九昧。當(dāng)有多個(gè)輸入文件, ffmpeg將通過跟蹤最小的時(shí)間戳來試圖在所有活躍的輸入流間同步毕匀。編碼的數(shù)據(jù)包然后被傳遞到解碼器(除非復(fù)制音頻流被選擇用于流铸鹰,見進(jìn)一步的說明)。解碼器產(chǎn)生的未壓縮的幀(原始視頻/ PCM音頻/ …)皂岔,它可以進(jìn)一步通過濾鏡進(jìn)行處理(見下一節(jié))蹋笼。通過濾鏡后,這些幀被傳遞到編碼器躁垛,編碼器將其編碼并輸出編碼后的數(shù)據(jù)包剖毯。最后,這些將被傳輸給混合器以將編碼數(shù)據(jù)寫入到輸出文件教馆。
3.1 濾鏡
在編碼之前逊谋, ffmpeg可以使用libavfilter庫中的濾鏡處理原始的音頻和視頻幀。幾個(gè)連接的濾鏡可以形成一個(gè)濾鏡組(filtergraphs)土铺。 ffmpeg有兩種filtergraphs:簡(jiǎn)單和復(fù)雜胶滋。
3.1.1 簡(jiǎn)單filtergraphs
簡(jiǎn)單filtergraphs是那些具有相同的類型且正好一個(gè)輸入和輸出的濾鏡組。另外悲敷,在上圖中究恤,他們可以由簡(jiǎn)單地在解碼和編碼之間插入附加步驟來表示:
_________ ______________
| | | |
| decoded | | encoded data |
| frames |\ _ | packets |
|_________| \ /||______________|
\ __________ /
simple _\|| | / encoder
filtergraph | filtered |/
| frames |
|__________|
簡(jiǎn)單filtergraphs配置了每個(gè)流的篩選器選項(xiàng)(與視頻和音頻分別-vf和-af別名)。一個(gè)簡(jiǎn)單的FilterGraph動(dòng)態(tài)視頻可以看一下這樣的例子:
_______ _____________ _______ ________
| | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______| |_____________| |_______| |________|
需要注意的是一些濾鏡改變幀屬性而不是畫面的內(nèi)容镀迂。例如丁溅,在上例中唤蔗,fps改變幀的數(shù)量探遵,但不觸及幀的內(nèi)容。又如setpts濾鏡妓柜,其僅設(shè)置時(shí)間戳而保持幀不變箱季。
3.1.2 復(fù)雜filtergraphs
復(fù)雜filtergraphs是那些不能被描述為簡(jiǎn)單的線性處理鏈的濾鏡組。例如棍掐,當(dāng)濾鏡組具有多個(gè)輸入和/或輸出藏雏,或當(dāng)輸出流的類型是不同于輸入。它們可以被表示為以下圖:
_________
| |
| input 0 |\ __________
|_________| \ | |
\ _________ /| output 0 |
\ | | / |__________|
_________ \| complex | /
| | | |/
| input 1 |---->| filter ||_________| | | \ __________
/| graph | \ | |
/ | | \| output 1 |
_________ / |_________| |__________|
| | /
| input 2 |/
|_________|
復(fù)雜filtergraphs可使用-filter_complex選項(xiàng)配置作煌。注意掘殴,此選項(xiàng)是全局性的赚瘦,因?yàn)閺?fù)雜FilterGraph,就其本質(zhì)奏寨,不能明確地與單個(gè)流或文件相關(guān)聯(lián)起意。
-lavfi選項(xiàng)相當(dāng)于-filter_complex。
一個(gè)復(fù)雜FilterGraph動(dòng)態(tài)的簡(jiǎn)單的例子是在overlay濾鏡病瞳,它具有兩個(gè)視頻輸入和一個(gè)視頻輸出揽咕,含有一個(gè)視頻重疊在另一個(gè)的上面。其對(duì)應(yīng)的音頻濾鏡是amix套菜。
3.2 復(fù)制流
復(fù)制流是通過添加copy選項(xiàng)到-codec選項(xiàng)完成的亲善。它使ffmpeg對(duì)指定的流忽略解碼和編碼步驟,所以它只能混合和拆包逗柴。它用于改變所述容器的格式或修改容器級(jí)別的元數(shù)據(jù)是有用的蛹头。在這種情況下,可以簡(jiǎn)化為這樣:
_______ ______________ ________
| | | | | |
| input | demuxer | encoded data | muxer | output |
| file | ---------> | packets | -------> | file |
|_______| |______________| |________|
由于不存在解碼或編碼戏溺,它是非尘蚨快,沒有質(zhì)量損失于购。然而因?yàn)樵S多因素的工作袍睡,它可能無法在某些情況下使用。應(yīng)用濾鏡顯然也是不可能的肋僧,因?yàn)闉V鏡僅能作用在未壓縮的數(shù)據(jù)上斑胜。
4 選擇流
默認(rèn)情況下, ffmpeg只包含輸入文件中每個(gè)類型流各一個(gè)(視頻嫌吠,音頻止潘,字幕),并將它們添加到每個(gè)輸出文件辫诅。它選擇“最好”的每一個(gè)流基于以下標(biāo)準(zhǔn):用于視頻凭戴,它選擇最高分辨率的流;對(duì)于音頻炕矮,它使用最多聲道的流么夫;對(duì)于字幕,它是第一個(gè)字幕流肤视。在相同類型中档痪,參數(shù)相等的若干流中具有最低索引的流被選擇。
您可以通過-vn/-an/-sn選項(xiàng)禁用其中的一些默認(rèn)值邢滑。若需全手動(dòng)控制腐螟,請(qǐng)使用-map選項(xiàng),它將禁用剛才所描述的默認(rèn)設(shè)置。
5 選項(xiàng)
所有的數(shù)值選項(xiàng)中乐纸,如果不另外指明衬廷,均表示接受數(shù)作為輸入,其后可添加一個(gè)SI單位的字符串汽绢,例如:K泵督,M,或G庶喜。
如果i被附加在SI單位小腊,完整的前綴將被解釋為一個(gè)單元前綴的二進(jìn)制倍數(shù),也即1024倍久窟,而不是1000倍秩冈。追加B可使數(shù)值增加8倍。這允許使用斥扛,例如:KB入问,MiB,G和B的數(shù)量后綴稀颁。
選項(xiàng)??不帶參數(shù)是布爾選項(xiàng)芬失,并設(shè)置相應(yīng)的值設(shè)置為true。他們可以通過在選項(xiàng)前添加no來將選項(xiàng)設(shè)置為false匾灶。例如使用-nofoo將設(shè)置名稱為foo為假棱烂。
5.1 流標(biāo)識(shí)符
有些選項(xiàng)是按流的,例如比特率或編解碼器阶女。流標(biāo)識(shí)符被用來精確地指定一個(gè)給定的選項(xiàng)作用于哪一個(gè)數(shù)據(jù)流(多個(gè))颊糜。
一個(gè)標(biāo)識(shí)符一般是選項(xiàng)名稱加冒號(hào)分隔的字符串。例如-codec:a:1 ac3包含流標(biāo)識(shí)符a:1秃踩,它匹配第二音頻流衬鱼。因此,將選擇AC3編解碼器的第二音頻流憔杨。
一個(gè)標(biāo)識(shí)符可以匹配多個(gè)流鸟赫,這個(gè)選項(xiàng)將適用于所有流。比如消别,流標(biāo)識(shí)符-b:a 128k標(biāo)識(shí)了所有的音頻流腊脱。
空標(biāo)識(shí)符匹配所有的流凌净。例如惩猫, -codec copy或-codec: copy會(huì)復(fù)制所有的數(shù)據(jù)流而不重新編碼查牌。
流標(biāo)識(shí)符的可能形式有:
stream_index
匹配與該索引對(duì)應(yīng)的流。例如-threads:1 4將設(shè)置第二個(gè)流的線程計(jì)數(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)簽的所有流。
請(qǐng)注意丢烘,在ffmpeg中柱宦,按元數(shù)據(jù)匹配僅能用于輸入文件。
5.2 通用選項(xiàng)
這些選項(xiàng)當(dāng)中的FF *工具共享播瞳。
-L
顯示許可證掸刊。
-h, -?, -help, --help [arg]
顯示幫助。一個(gè)可選參數(shù)可以被指定為打印與特定項(xiàng)目相關(guān)的幫助赢乓。如果沒有指定參數(shù)痒给,則只顯示基本的(非高級(jí))工具選項(xiàng)。
arg的可能值是:
`long`
除了基本的工具選項(xiàng)外骏全,打印高級(jí)的工具選項(xiàng)苍柏。
`full`
打印所有選項(xiàng),包括編碼器姜贡,解碼器试吁,分流器,混合器楼咳,濾鏡等的共享和私有選項(xiàng)熄捍。
`decoder=decoder_name`
打印有關(guān)的解碼器`decoder_name`的詳細(xì)信息。使用`-decoders`選項(xiàng)來獲得所有的解碼器的列表母怜。
`encoder=encoder_name`
打印有關(guān)指定編碼器`encoder_name`的詳細(xì)信息余耽。使用`-encoders`選項(xiàng)來獲得所有編碼器的列表。
`demuxer=demuxer_name`
打印有關(guān)的分流器`demuxer_name`的詳細(xì)信息苹熏。使用`-formats`選項(xiàng)來獲取所有分流器和混合器的列表碟贾。
`muxer=muxer_name`
打印有關(guān)混合器`muxer_name`的詳細(xì)信息币喧。使用`-formats`選項(xiàng)來獲取所有混合器和分流器的列表。
`filter=filter_name`
打印有關(guān)濾鏡`filter_name`的詳細(xì)信息袱耽。使用`-filters`選項(xiàng)來獲得所有濾鏡的列表杀餐。
-version
顯示的版本。
-formats
顯示可用的格式(包括設(shè)備)朱巨。
-devices
顯示可用的設(shè)備史翘。
-codecs
顯示libavcodec已知的所有編解碼器。
注意冀续,整個(gè)文檔中術(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]...]
顯示自動(dòng)檢測(cè)到的輸入設(shè)備的源。某些設(shè)備可提供不能自動(dòng)檢測(cè)系統(tǒng)相關(guān)的源名稱薪伏。返回的列表不能被假定為總是完整的滚澜。
ffmpeg -sources pulse,server=192.168.0.4
-sinks device[,opt1=val1[,opt2=val2]...]
自動(dòng)檢測(cè)顯示輸出設(shè)備的接收器。某些設(shè)備可提供不能自動(dòng)檢測(cè)系統(tǒng)相關(guān)的接收器名稱嫁怀。返回的列表不能被假定為總是完整的设捐。
ffmpeg -sinks pulse,server=192.168.0.4
-loglevel [repeat+]loglevel | -v [repeat+]loglevel
設(shè)置庫使用的日志記錄級(jí)別。加入repeat+表示重復(fù)日志輸出不應(yīng)該被壓縮到所述第一條日志和“最后的日志重復(fù)n次”線將被省略塘淑。 repeat萝招,也可以單獨(dú)使用。如果repeat可以單獨(dú)使用存捺,并沒有預(yù)設(shè)的記錄級(jí)別槐沼,默認(rèn)記錄級(jí)將被使用。如果給定多個(gè)日志級(jí)別參數(shù)捌治,使用repeat不會(huì)改變?nèi)罩炯?jí)別岗钩。loglevel是一個(gè)字符串或數(shù)字,可為以下值之一
:
`quiet, -8`
保持沉默肖油。
`panic, 0`
只顯示可能導(dǎo)致程序崩潰的致命錯(cuò)誤兼吓。目前沒有此類錯(cuò)誤。
`fatal, 8`
只顯示致命錯(cuò)誤森枪。這些錯(cuò)誤會(huì)導(dǎo)致進(jìn)程絕對(duì)無法繼續(xù)视搏。
`error, 16`
顯示所有的錯(cuò)誤审孽,包括那些可以修復(fù)的。
`warning, 24`
顯示所有警告和錯(cuò)誤凶朗。將顯示任何有關(guān)可能不正確或不正常事件的信息瓷胧。
`info, 32`
顯示處理過程中的信息显拳。不單單是警告和錯(cuò)誤棚愤。這是默認(rèn)值。
`verbose, 40`
與info類似 杂数,但更詳細(xì)宛畦。
`debug, 48`
顯示一切信息,包括調(diào)試信息揍移。
默認(rèn)情況下次和,程序日志輸出到標(biāo)準(zhǔn)錯(cuò)誤流,如果終端支持著色那伐,顏色用來標(biāo)記錯(cuò)誤和警告踏施。日志著色可以被環(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)儲(chǔ)完整的命令行和控制臺(tái)輸出到當(dāng)前目錄一個(gè)文件名 ??為program - YYYYMMDD - HHMMSS .log
的文件诉探。此文件對(duì)于錯(cuò)誤報(bào)告非常有用日熬。這也意味著-loglevel verbose
。
將環(huán)境變量設(shè)置FFREPORT
為任何值具有相同的效果肾胯。如果該值是一個(gè)’:’ - 分隔鍵=值序列竖席,這些選項(xiàng)會(huì)影響報(bào)表;如果包含特殊字符則需要使用轉(zhuǎn)義字符,或者“:”分隔(參見的ffmpeg-utils
的手冊(cè)中的“引用與轉(zhuǎn)義”一節(jié))敬肚。
下列選項(xiàng)也可使用:
`file`
設(shè)置報(bào)告使用的文件名??; %p添加程序名毕荐, %t添加時(shí)間戳, %%添加一個(gè)普通的%
`level`
設(shè)置使用的數(shù)值(查看日志詳細(xì)級(jí)別`-loglevel` )艳馒。
例如憎亚,要輸出到名為
ffreport.log
使用的一個(gè)日志級(jí)別文件的報(bào)告32 (日志級(jí)別info的別稱 ):
FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
非致命的環(huán)境變量的解析錯(cuò)誤不會(huì)出現(xiàn)在報(bào)告中。
-hide_banner
不打印橫幅鹰溜。
所有FFmpeg的工具通常會(huì)顯示一個(gè)版權(quán)聲明虽填,構(gòu)建選項(xiàng)和庫版本。此選項(xiàng)可以用來抑制打印此信息曹动。
-cpuflags flags (global)
允許設(shè)置和清除CPU標(biāo)志斋日。此選項(xiàng)用于測(cè)試。不要使用它墓陈,除非你知道自己在做什么恶守。
ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...
可能選項(xiàng)有:
`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
測(cè)試所有可用的OpenCL設(shè)備并顯示結(jié)果第献。此選項(xiàng)僅當(dāng)FFmpeg含有–enable-opencl 編譯時(shí)可用。
-opencl_options options (global)
設(shè)置的OpenCL環(huán)境選項(xiàng)兔港。此選項(xiàng)僅當(dāng)FFmpeg的已編譯–enable-opencl 庸毫。
options必須是冒號(hào)分隔的key = value選項(xiàng)對(duì)。參見ffmpeg-utils的手冊(cè)中的“OpenCL的選項(xiàng)”部分的內(nèi)容衫樊。
5.3 AVOption選項(xiàng)
這些選項(xiàng)直接由libavformat飒赃,libavdevice和libavcodec
庫提供。要查看可用AVOption的列表科侈,請(qǐng)使用-help
選項(xiàng)载佳。它們被分為兩類:
generic 這些選項(xiàng)可以為任何容器,編解碼器或設(shè)備進(jìn)行設(shè)置臀栈。通用的選項(xiàng)都列在AVFormatContext選擇容器/設(shè)備和AVCodecContext選擇編解碼器小節(jié)蔫慧。
private 這些選項(xiàng)是作用于給定的容器,裝置或編解碼器权薯。私有選項(xiàng)列在其相應(yīng)的容器/設(shè)備/編解碼器姑躲。
比如編輯ID3v2.3頭而不是默認(rèn)的ID3v2.4到MP3文件,使用MP3混合器的id3v2_version
私有選項(xiàng):
ffmpeg -i input.flac -id3v2_version 3 out.mp3
所有編解碼器AVOption選項(xiàng)是按流指定的盟蚣,并且因此應(yīng)該指定相應(yīng)的流標(biāo)識(shí)符黍析。
注: -nooption
語法不能用于布爾AVOption選項(xiàng),請(qǐng)使用-option 0/-option 1
刁俭。
注:老的前綴v/a/s的流標(biāo)識(shí)記號(hào)已經(jīng)過時(shí)橄仍,將被移除。
5.4 主要選項(xiàng)
-f fmt (input/output)
強(qiáng)制指定輸入或輸出的文件格式牍戚。輸入文件的格式通常是自動(dòng)檢測(cè)的侮繁,輸出文件的格式由該文件的擴(kuò)展名猜測(cè),所以在大多數(shù)情況下不需要此選項(xiàng)如孝。
-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)
用于對(duì)一個(gè)或多個(gè)數(shù)據(jù)流指定一個(gè)編碼器(一個(gè)輸出文件之前使用時(shí))或一個(gè)解碼器(一個(gè)輸入文件之前使用時(shí))。 codec是一個(gè)解碼器/編碼器的名稱或特殊值copy (僅輸出)茁瘦,copy表示該流不是被重新編碼品抽。
例如
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
使用libx264編碼所有視頻流并拷貝所有音頻流。
對(duì)于每個(gè)數(shù)據(jù)流甜熔,最后匹配的c選項(xiàng)被應(yīng)用圆恤,所以
ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
將復(fù)制的所有流除了第二視頻流,并將用libx264進(jìn)行編碼腔稀,并且對(duì)于第138個(gè)音頻流用libvorbis進(jìn)行編碼盆昙。
-t duration (input/output)
當(dāng)作為輸入選項(xiàng)(在-i
之前 )羽历,限制從輸入文件中讀取數(shù)據(jù)的duration
。
當(dāng)作為輸出選項(xiàng)(輸出文件名之??前)使用淡喜,在達(dá)到duration
后停止寫入輸出文件秕磷。
duration可能是以秒為單位,或以hh:mm:ss[.xxx]形式出現(xiàn)炼团。
-to和-t是相互排斥的澎嚣,-t具有優(yōu)先權(quán)。
-to position (output)
在position
位置停止輸出们镜。 position
可能是一個(gè)表示秒數(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)用作輸入選項(xiàng)一起使用(在-i 以前),跳轉(zhuǎn)到輸入文件中position 位置驱富。請(qǐng)注意锚赤,在大多數(shù)的格式是不可能確切定位,這樣ffmpeg將尋求最接近的position位置點(diǎn)褐鸥。當(dāng)轉(zhuǎn)碼和-accurate_seek啟用(默認(rèn)設(shè)置)线脚,尋找點(diǎn)和position位置之間的附加段將被解碼并丟棄。當(dāng)進(jìn)行流復(fù)制或當(dāng)-noaccurate_seek被使用時(shí)叫榕,它都將被保留浑侥。
當(dāng)用作輸出選項(xiàng)(在輸出文件名??前),解碼但丟棄輸入直到時(shí)間戳到達(dá)的位置晰绎。
position位置可以是秒數(shù)或hh:mm:ss[.xxx]形式寓落。
-itsoffset offset (input)
設(shè)置輸入時(shí)間偏移。
offset
必須是持續(xù)時(shí)間規(guī)范荞下,請(qǐng)參閱(ffmpeg-utils)在FFmpeg-utils(1)手動(dòng)的持續(xù)時(shí)間段的相關(guān)內(nèi)容 伶选。
偏移被添加到輸入文件的時(shí)間戳。指定一個(gè)正偏移意味著相應(yīng)流將延遲offset所指定的時(shí)間尖昏。
-timestamp date (output)
設(shè)置在容器內(nèi)記錄的時(shí)間戳仰税。
date必須是一個(gè)規(guī)范的持續(xù)時(shí)間,請(qǐng)參閱(ffmpeg-utils)在FFmpeg-utils的(1)日期部分 抽诉。
-metadata[:metadata_specifier] key=value (output,per-metadata)
設(shè)置元數(shù)據(jù)的鍵/值對(duì)陨簇。
可選metadata_specifier
可以被用于設(shè)置流或章節(jié)的元數(shù)據(jù)。見-map_metadata文檔的詳細(xì)信息掸鹅。
此選項(xiàng)將覆蓋-map_metadata設(shè)置的元數(shù)據(jù)塞帐。另外拦赠,也可以通過使用空值來刪除元數(shù)據(jù)。
例如葵姥,設(shè)置輸出文件的標(biāo)題:
ffmpeg -i in.avi -metadata title="my title" out.flv
設(shè)置第一個(gè)音頻流的語言:
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)牍疏。所有的格式選項(xiàng)(比特率,編解碼器拨齐,緩沖大辛墼伞)都將自動(dòng)設(shè)置。你僅需鍵入:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
不過瞻惋,你可以指定其他選項(xiàng)厦滤,只需你知道他們與標(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ù)賦給兩個(gè)不同的編解碼器通常并不是用戶想要的,因此若需要這樣的功能履植,可以使用流標(biāo)識(shí)符(stream_specifier)來指定计雌。
-filter[:stream_specifier] filtergraph (output,per-stream)
創(chuàng)建由FilterGraph指定的濾鏡組并使用它。
FilterGraph是作用于流的濾鏡組的描述玫霎,而且必須有一個(gè)單一的輸入和同一類型的數(shù)據(jù)流輸出凿滤。
在濾鏡組里,輸入被關(guān)聯(lián)到in標(biāo)簽 庶近,輸出到out標(biāo)簽 翁脆。關(guān)于ffmpeg濾鏡組的語法可參見ffmpeg-filters的手冊(cè)。
如果你想創(chuàng)建具有多個(gè)輸入或輸出的濾鏡組鼻种,參見-filter_complex
的相關(guān)選項(xiàng)反番。
-filter_script[:stream_specifier] filename (output,per-stream)
這個(gè)選項(xiàng)類似于-filter
,唯一的區(qū)別是,它的參數(shù)是濾鏡組所在的文件名罢缸。
-pre[:stream_specifier] preset_name (output,per-stream)
指定匹配流(S)的預(yù)設(shè)篙贸。
-stats (global)
打印編碼進(jìn)度/統(tǒng)計(jì)數(shù)據(jù)。這是默認(rèn)值枫疆,你可通過指定-nostats禁用 爵川。
-progress url (global)
發(fā)送程序友好的進(jìn)展信息到url
進(jìn)度信息大約每秒和編碼過程結(jié)束后寫入。它是由key = value行組成息楔。 key只能包含字母和數(shù)字字符寝贡。最后一個(gè)關(guān)鍵字序列始終是progress。
-stdin
啟用標(biāo)準(zhǔn)輸入交互值依。這是默認(rèn)設(shè)置圃泡,除非標(biāo)準(zhǔn)輸入被作為輸入。要明確禁用互動(dòng)愿险,你需要指定-nostdin颇蜡。
在標(biāo)準(zhǔn)輸入禁用相互作用是很有用的,例如拯啦,如果ffmpeg在后臺(tái)進(jìn)程組中澡匪。大致相同的結(jié)果可以用ffmpeg ... < /dev/null實(shí)現(xiàn),但它需要一個(gè)終端褒链。
-debug_ts (global)
打印時(shí)間戳信息。它默認(rèn)是關(guān)閉的疑苔。此選項(xiàng)主要是用于測(cè)試和調(diào)試目的甫匹,輸出格式可從一個(gè)版本切換到另一個(gè),所以它不應(yīng)該在可移植腳本中使用惦费。
參見-fdebug ts選項(xiàng)兵迅。
-attach filename (output)
添加一個(gè)附件到輸出文件。這僅由幾個(gè)格式支持薪贫。例如Matroska格式恍箭,這個(gè)文件可以是用來渲染字幕使用的字體。附件被實(shí)現(xiàn)為數(shù)據(jù)流的一個(gè)特定類型的瞧省,因此該選項(xiàng)將增加一個(gè)新的流的文件扯夭。因此,可以以通常的方式在此流使用每個(gè)流的選??項(xiàng)鞍匾。使用此選項(xiàng)創(chuàng)建的附件流將所有的其他流之后創(chuàng)建(也即那些由-map或自動(dòng)映射創(chuàng)建的流)交洗。
請(qǐng)注意,對(duì)于Matroska橡淑,你還必須設(shè)置mimetype元數(shù)據(jù)標(biāo)簽:
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
(假設(shè)該附件流將是輸出文件的第三個(gè)流)构拳。
-dump_attachment[:stream_specifier] filename (input,per-stream)
提取匹配的附件流成一個(gè)名??為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ù)實(shí)現(xiàn)的凫海,所以這個(gè)選項(xiàng)實(shí)際上可以用來提取任意額外數(shù)據(jù)蜜笤,而不僅僅是附件。
5.5 視頻選項(xiàng)
-vframes number (output)
設(shè)置視頻幀的輸出數(shù)量盐碱。這是的-frames:v別名 把兔。
-r[:stream_specifier] fps (input/output,per-stream)
設(shè)置幀速率(Hz值,分?jǐn)?shù)或縮寫)瓮顽。
作為輸入選項(xiàng)县好,忽略存儲(chǔ)在文件中的任何時(shí)間戳,而是產(chǎn)生時(shí)間戳假設(shè)恒定的幀速率fps這與一些輸入格式暖混,諸如image2或者v4l2缕贡,中的-framerate選項(xiàng)是不同的(在老版本的ffmpeg中是一樣的)。如有疑問拣播,使用的輸入選項(xiàng)-framerate代替-r晾咪。
作為輸出選項(xiàng),復(fù)制或刪除輸入幀以達(dá)到恒定的輸出幀速率fps贮配。
-s[:stream_specifier] size (input/output,per-stream)
設(shè)置幀尺寸谍倦。
作為輸入的選項(xiàng),這是私有選項(xiàng)video_size的快捷方式泪勒,部分分流器可以識(shí)別該參數(shù)昼蛀,這時(shí)幀大小或者未存儲(chǔ)在文件中或不可配置,例如原始視頻或視頻采集卡。
作為輸出的選擇圆存,這將插入scale視頻濾鏡到相應(yīng)濾鏡組的末端 叼旋。如需改變?yōu)V鏡位置,請(qǐng)將scale濾鏡直接插入到開頭或其他地方沦辙。
格式是wxh(默認(rèn)值是使用與源相同的尺寸)夫植。
-aspect[:stream_specifier] aspect (output,per-stream)
設(shè)置指定視頻顯示的寬高比aspect。
aspect可以是一個(gè)浮點(diǎn)數(shù)油讯,或使用形如 num: den 的形式详民,其中num是分子,den是分母撞羽。例如阐斜,“4:3”,“16:9”诀紊,“1.3333”谒出,和“1.7777”都是有效的參數(shù)值隅俘。
如果與-vcodec copy一起使用,這會(huì)影響儲(chǔ)存在容器級(jí)別的寬高比笤喳,而不是存儲(chǔ)在編碼幀的寬高比为居,如果有的話。
-vn (output)
禁用視頻錄制杀狡。
-vcodec codec (output)
設(shè)置視頻編解碼器蒙畴。這是-codec:v的別名。
-pass[:stream_specifier] n (output,per-stream)
選擇通過次數(shù)(1或2)呜象。它是用來做兩遍視頻編碼膳凝。視頻的統(tǒng)計(jì)信息記錄在第一次編碼時(shí)寫入到日志文件中(也參見選項(xiàng)-passlogfile),在第二次編碼時(shí)恭陡,該日志文件被用于按要求生成準(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是一個(gè)輸出流的特定數(shù)字
-vf filtergraph (output)
創(chuàng)建由filtergraph指定的濾鏡組永部,并使用它。
這是-filter:v的別名 呐矾,參見-filter選項(xiàng)苔埋。
5.6 高級(jí)視頻選項(xiàng)
-pix_fmt[:stream_specifier] format (input/output,per-stream)
設(shè)置的像素格式。使用-pix_fmts顯示所有支持的像素格式凫佛。如果所選擇的像素格式不能被選擇讲坎,ffmpeg將打印警告,并選擇由編碼器所支持的最好的像素格式愧薛。如果pix_fmt前綴+ ,如果請(qǐng)求的像素格式不能被選中衫画,ffmpeg會(huì)出現(xiàn)錯(cuò)誤退出毫炉,同時(shí)濾鏡組中的自動(dòng)轉(zhuǎn)換將被禁用。如果pix_fmt是一個(gè)單一的+ 削罩,ffmpeg的選擇與輸入或者濾鏡輸出相同的像素格式瞄勾,并將禁用自動(dòng)轉(zhuǎn)換。
-sws_flags flags (input/output)
設(shè)置軟件縮放的標(biāo)志弥激。
-vdt n
丟棄的閾值进陡。
-rc_override[:stream_specifier] override (output,per-stream)
覆蓋特定的時(shí)間間隔內(nèi)的幀率控制,格式為用斜杠分隔的“整型微服,整型趾疚,整型”列表。前兩個(gè)值是在開始和結(jié)束幀編號(hào),最后一個(gè)如果是正數(shù)糙麦,則為量化器辛孵;負(fù)數(shù)則為品質(zhì)因數(shù)。
-ilme
支持編碼器force interlacing(僅對(duì)MPEG-2和MPEG-4有效)赡磅。如果你的輸入文件是隔行并要保持隔行格式最小損失魄缚,請(qǐng)使用此選項(xiàng)。另一種方法是使用-deinterlace反交錯(cuò)輸入流焚廊,但這會(huì)引入損失冶匹。
-psnr
計(jì)算壓縮幀的PSNR(偽信噪比)。
-vstats
輸出視頻編碼統(tǒng)計(jì)到vstats_HHMMSS.log咆瘟。
-vstats_file file
輸出頻編碼統(tǒng)計(jì)到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í)間戳,更精確地在每個(gè)指定的時(shí)間之后的第一幀匿乃。
如果參數(shù)的前綴expr:桩皿,expr將解釋為一個(gè)表達(dá)式,并在每一幀執(zhí)行幢炸。如果運(yùn)行結(jié)果非零泄隔,一個(gè)關(guān)鍵幀被強(qiáng)制加入。
如果時(shí)間之一是chapters [ delta ]宛徊,它被擴(kuò)展成的文件中的所有章節(jié)開始通過delta偏移的時(shí)間(時(shí)間以秒為單位)佛嬉。這個(gè)選項(xiàng)可能是有用的,以確保存在一個(gè)搜索點(diǎn)位于章節(jié)標(biāo)記或者在輸出文件中的任何其它指定的地方闸天。
例如暖呕,在5分鐘插入一個(gè)關(guān)鍵幀,同時(shí)在每章開始前0.1秒插入一個(gè)關(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)鍵幀時(shí)荔仁,它是NAN
prev_forced_t
先前強(qiáng)制幀的時(shí)間勺馆,當(dāng)沒有強(qiáng)制關(guān)鍵幀時(shí)粘茄,它是NAN
t
當(dāng)前處理的幀的時(shí)間
例如每5秒強(qiáng)制插入一個(gè)關(guān)鍵幀,你可以使用:
-force_key_frames expr:gte(t,n_forced*5)
自13秒開始贷帮,強(qiáng)制插入一個(gè)關(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)鍵幀對(duì)某些編碼器的超前算法是非常有害的:使用固定的GOP選項(xiàng)或類似選項(xiàng)會(huì)更有效戚揭。
-copyinkf[:stream_specifier] (output,per-stream)
當(dāng)復(fù)制流時(shí),也復(fù)制起始處的非關(guān)鍵幀撵枢。
-hwaccel[:stream_specifier] hwaccel (input,per-stream)
使用硬件加速解碼匹配流民晒。hwaccel的允許值包括:
none
不要使用任何硬件加速(默認(rèn))精居。
auto
自動(dòng)選擇硬件加速的方法。
vda
使用蘋果VDA硬件加速镀虐。
vdpau
使用VDPAU(視頻解碼和演示API對(duì)于Unix)硬件加速箱蟆。
dxva2
使用DXVA2(DirectX視頻加速)硬件加速。
如果選擇的hwaccel不可用或不支持選擇的解碼器刮便,此選項(xiàng)沒有效果空猜。
注意,大多數(shù)加速方法適用于播放恨旱,但并不會(huì)比現(xiàn)代CPU軟件解碼更快辈毯。此外, ffmpeg通常需要解碼幀從GPU存儲(chǔ)器復(fù)制到系統(tǒng)存儲(chǔ)器搜贤,從而導(dǎo)致進(jìn)一步的性能損失谆沃。因此此選項(xiàng)主要用于測(cè)試。
-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
選擇一個(gè)設(shè)備使用硬件加速仪芒。
此選項(xiàng)僅使得同時(shí)與-hwaccel選項(xiàng)使用唁影。它的確切含義取決于所選擇的具體硬件加速方法。
vdpau
對(duì)于VDPAU掂名,此選項(xiàng)在X11中使用据沈。如果沒有指定這個(gè)選項(xiàng), DISPLAY環(huán)境變量的值被使用
dxva2
對(duì)于DXVA2饺蔑,這個(gè)選項(xiàng)應(yīng)包含在顯示適配器使用的數(shù)量锌介。如果未指定此選項(xiàng),默認(rèn)的適配器將被使用猾警。
5.7 音頻選項(xiàng)
-aframes number (output)
設(shè)定的音頻幀輸出的數(shù)目孔祸。這是-frames:a 的別名。
-ar[:stream_specifier] freq (input/output,per-stream)
設(shè)置音頻采樣頻率发皿。對(duì)于輸出流崔慧,將默認(rèn)設(shè)置為相應(yīng)的輸入流的采樣頻率。對(duì)于輸入流該選項(xiàng)僅對(duì)音頻抓取設(shè)備和raw格式分流器和映射到相應(yīng)分流器上的選項(xià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ù)目捣作。對(duì)于輸入流該選項(xiàng)僅對(duì)音頻抓取設(shè)備和raw格式分流器和映射到相應(yīng)分流器上的選項(xià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選項(xiàng)。
5.8 高級(jí)音頻選項(xiàng)
-atag fourcc/tag (output)
強(qiáng)制音頻tag/fourcc值蔓钟。這是-tag:a的別名永票。
-absf bitstream_filter
已過時(shí),參見-bsf
-guess_layout_max channels (input,per-stream)
如果一些輸入通道布局是未知的滥沫,試圖猜測(cè)它最多的聲道數(shù)量侣集。例如,2要求ffmpeg識(shí)別1個(gè)通道為單聲道和2聲道立體聲兰绣,6聲道作為5.1世分。默認(rèn)是總是試圖去猜測(cè)。用0來禁用所有的猜測(cè)缀辩。
5.9 字幕選項(xiàng)
-scodec codec (input/output)
設(shè)置字幕的編解碼器臭埋。這是-codec:s的別名。
-sn (output)
關(guān)閉字幕記錄臀玄。
-sbsf bitstream_filter
已過時(shí)瓢阴,參見-bsf
5.10 高級(jí)字幕選項(xiàng)
-fix_sub_duration
調(diào)整字幕的持續(xù)時(shí)間。對(duì)于每個(gè)字幕镐牺,等待在相同的流中的下一個(gè)分組炫掐,并調(diào)節(jié)第一持續(xù)時(shí)間,以避免重疊睬涧。這對(duì)某些字幕編解碼器是必要的募胃,特別是數(shù)字電視廣播字幕(DVB),因?yàn)樵谠瓉淼姆纸M的持續(xù)時(shí)間僅僅是一個(gè)粗略的估計(jì)畦浓,結(jié)束標(biāo)記是通過一個(gè)空的字幕幀完成的痹束。沒有使用這個(gè)選項(xiàng)在必要時(shí)可導(dǎo)致夸張的持續(xù)時(shí)間,或由于非單調(diào)時(shí)間戳混流故障讶请。
注意祷嘶,此選項(xiàng)將延遲所有數(shù)據(jù)的輸出直到下一個(gè)字幕分組被解碼:它可能會(huì)增加內(nèi)存消耗和延遲。
-canvas_size size
設(shè)置用于呈現(xiàn)字幕的畫布的大小夺溢。
5.11 高級(jí)選項(xiàng)
-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)
指定一個(gè)或多個(gè)輸入流作為用于輸出文件的來源论巍。每個(gè)輸入流由輸入文件索引input_file_id和輸入流索引input_stream_id標(biāo)識(shí)。這兩個(gè)指標(biāo)都是從0開始风响。sync_file_id:stream_specifier可用于指定輸入流作為同步參考嘉汰。
在命令行上第一個(gè)-map選項(xiàng)指定的輸出流0,第二-map選項(xiàng)指定的源輸出流1等
一個(gè)連字符-創(chuàng)建一個(gè)“否定的”的映射状勤。它禁用從已經(jīng)建立映射中匹配流鞋怀。
另一種LinkLabel的形式將映射從復(fù)雜濾波器組輸出到輸出文件(見-filter_complex選項(xiàng))双泪。 LinkLabel必須對(duì)應(yīng)于一個(gè)鏈路中已定義的輸出標(biāo)簽。
例如密似,映射第一輸入文件的所有流到輸出
ffmpeg -i INPUT -map 0 output
例如焙矛,如果在第一輸入文件中的兩個(gè)音頻流,這些流記為“0:0”残腌,“0:1”村斟。您可以使用-map選擇哪個(gè)流輸出到輸出文件。例如:
ffmpeg -i INPUT -map 0:1 out.wav
將映射INPUT的輸入數(shù)據(jù)流“0:1”到在(單)輸出流out.wav废累。
例如邓梅,從輸入文件a.mov選擇索引2流(由識(shí)別符“0:2”指定的)與從輸入b.mov索引6(由識(shí)別符“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
請(qǐng)注意,使用此選項(xiàng)將禁用此輸出文件的默認(rèn)映射掖看。
-map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]
映射從一個(gè)給定的輸入音頻聲道到輸出匣距。如果output_file_id.stream_specifier未設(shè)置時(shí),聲道將被映射的所有音頻流哎壳。
使用-1替代input_file_id.stream_specifier.channel_id將映射一個(gè)靜音聲道毅待。
例如,假設(shè)INPUT是一個(gè)立體聲音頻文件归榕,你可以切換兩個(gè)音頻通道與下面的命令:
ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
如果您想要靜音的第一聲道尸红,并保留第二個(gè):
ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
-map_channel選項(xiàng)的順序指定在輸出流中的聲道的順序。所述輸出信道的布局是從映射信道數(shù)猜測(cè)的(如果只有一個(gè)-map_channel刹泄,則使用單聲道外里,如果是2,則使用立體聲特石,如此等等)盅蝗。如果輸入和輸出信道的布局不匹配(例如2個(gè)-map_channel和-ac 6),聯(lián)合使用-map_channel和-ac將更新聲道的增益水平姆蘸。
您也可以提取各個(gè)輸入通道到特定的輸出墩莫;以下命令中提取的兩個(gè)通道的INPUT音頻流(文件0,流0)到相應(yīng)的OUTPUT_CH0和OUTPUT_CH1輸出:
ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
以下示例拆分立體聲輸入的通道成兩個(gè)獨(dú)立的數(shù)據(jù)流逞敷,其被放入同一個(gè)輸出文件:
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
注意狂秦,目前每個(gè)輸出流只能包含來自單個(gè)輸入流的聲道;不能使用-map_channel從不同的數(shù)據(jù)流提取的多個(gè)輸入音頻聲道(來自相同的或不同的文件)推捐,并將它們合并成一個(gè)單一的輸出流故痊。因此,目前不可能完成例如把兩個(gè)單獨(dú)的單聲道流成一個(gè)單一的立體聲流的任務(wù)。然而愕秫,拆分立體聲流分成兩個(gè)單信道單聲道流則是可能的。
如果你需要這個(gè)功能焰络,一個(gè)可能的解決方法是使用amerge濾鏡戴甩。例如,如果你需要用2個(gè)單聲道音頻融合媒體中的(在這里是input.mkv)流成一個(gè)單一的立體聲聲道音頻流(并保持視頻流)闪彼,可以使用下面的命令:
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è)置下一個(gè)輸出文件的元數(shù)據(jù)信息甜孤。請(qǐng)注意,這些都是文件索引(從零開始)畏腕,而不是文件名缴川。可選參數(shù)metadata_spec_in/out可用于指定哪些元數(shù)據(jù)進(jìn)行復(fù)制描馅。元數(shù)據(jù)說明可以有以下幾種形式:
`g`
全局元數(shù)據(jù)把夸,即元數(shù)據(jù)應(yīng)用于整個(gè)文件
`s[:stream_spec]`
每個(gè)流的元數(shù)據(jù)`stream_spec`是一個(gè)流標(biāo)識(shí)符,參見流標(biāo)識(shí)符一章铭污。在輸入的元數(shù)據(jù)時(shí)恋日,將從第一個(gè)匹配的流復(fù)制。在輸出元數(shù)據(jù)時(shí)嘹狞,將復(fù)制到所有匹配流岂膳。
`c:chapter_index`
每章的元數(shù)據(jù)`chapter_index`是從零開始的章節(jié)索引。
`p:program_index`
每個(gè)項(xiàng)目的元數(shù)據(jù)`program_index`是從零開始的的項(xiàng)目索引磅网。
如果元數(shù)據(jù)說明被省略谈截,則默認(rèn)為全球性的。
缺省情況下涧偷,全局元數(shù)據(jù)是從第一輸入文件復(fù)制的簸喂,每個(gè)流和每個(gè)章節(jié)的元數(shù)據(jù)與數(shù)據(jù)流/章節(jié)將被依次復(fù)制。創(chuàng)建相關(guān)類型的任何映射將禁用這些默認(rèn)映射嫂丙。否定的文件索引可以用來創(chuàng)建只禁用自動(dò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í)例中能起到相同的效果诽表,由于全局元數(shù)據(jù)被假定默認(rèn)。
-map_chapters input_file_index (output)
從輸入文件復(fù)制章節(jié)與索引input_file_index到下一個(gè)輸出文件中隅肥。如果不指定章節(jié)映射竿奏,則章節(jié)從第一輸入文件復(fù)制并至少有一個(gè)章節(jié)。使用負(fù)的文件索引來排除任何章節(jié)的復(fù)制腥放。
-benchmark (global)
在編碼結(jié)束顯示基準(zhǔn)信息泛啸。顯示使用的CPU時(shí)間和最大內(nèi)存消耗。不是所有系統(tǒng)都支持最大內(nèi)存消耗秃症,如果不支持候址,它通常會(huì)顯示為0吕粹。
-benchmark_all (global)
顯示編碼過程中基準(zhǔn)信息。顯示各個(gè)步驟(音頻/視頻編碼/解碼)所使用的CPU時(shí)間岗仑。
-timelimit duration (global)
在已經(jīng)運(yùn)行duration秒后退出ffmpeg
-dump (global)
轉(zhuǎn)儲(chǔ)每個(gè)輸入包到標(biāo)準(zhǔn)錯(cuò)誤流匹耕。
-hex (global)
當(dāng)dump包時(shí),也dump有效載荷荠雕。
-re (input)
讀取輸入的原始幀速率稳其。主要用于模擬抓取設(shè)備≌ū埃或?qū)崟r(shí)輸入流(例如從文件讀取時(shí))既鞠。不應(yīng)該在實(shí)際的抓取設(shè)備或?qū)崟r(shí)輸入流中使用(它可能會(huì)導(dǎo)致數(shù)據(jù)包丟失)。默認(rèn)ffmpeg嘗試盡可能快地讀出輸入端盖文。此選項(xiàng)會(huì)減慢輸入的本地幀速率的讀取嘱蛋。它是用于實(shí)時(shí)輸出(如直播)是有用的。
-loop_input
循環(huán)輸入流椅寺。目前浑槽,它僅適用于圖像流。此選項(xiàng)用于自動(dòng)測(cè)試ffserver返帕。此選項(xiàng)已被棄用桐玻,使用-loop 1。
-loop_output number_of_times
反復(fù)循環(huán)輸出支持循環(huán)的格式如動(dòng)畫GIF(0意味著無限循環(huán)輸出)荆萤。此選項(xiàng)已被棄用镊靴,使用-loop。
-vsync parameter
視頻同步方法链韭。出于兼容性考慮舊值可以被指定為數(shù)字偏竟。新添加的值將必須總是指定為字符串。
0, passthrough
每一幀傳遞從分流器到復(fù)用器的時(shí)間戳敞峭。
1, cfr
幀將被復(fù)制并下降至達(dá)到完全所需的恒定幀速率踊谋。
2, vfr
幀通過與其時(shí)間戳或下降,從而防止兩幀具有相同的時(shí)間戳旋讹。
drop
與passthrough相同殖蚕,但破壞所有時(shí)間戳,使得復(fù)用器生成基于幀速率新的時(shí)間戳沉迹。
-1, auto
根據(jù)復(fù)用器的功能選擇1或者2睦疫。這是默認(rèn)的方法。
注意鞭呕,該時(shí)間戳在此之后可以進(jìn)一步由復(fù)用器修改蛤育。例如,在格式選項(xiàng)avoid_negative_ts被啟用時(shí)。
與-map聯(lián)用瓦糕,您可以選擇從哪個(gè)流提取時(shí)間戳底洗。您可以留下視頻或音頻不變,同步剩余流不變的刻坊。
-async samples_per_second
音頻同步的方法枷恕。“伸展/擠壓”音頻流相匹配的時(shí)間戳谭胚,所述參數(shù)是音頻發(fā)生改變所容許的每秒最大點(diǎn)數(shù)。-async 1是一種特殊情況未玻,音頻數(shù)據(jù)流僅在開始校正灾而,而其后將不再校正。
注意扳剿,該時(shí)間戳在此之后可以進(jìn)一步由復(fù)用器修改旁趟。例如,在格式選項(xiàng)avoid_negative_ts被啟用時(shí)庇绽。
此選項(xiàng)已被棄用锡搜。使用aresample音頻過濾器代替。
-copyts
不要處理輸入時(shí)間戳瞧掺,但保持它們的值耕餐,不嘗試對(duì)它們進(jìn)行sanitize。尤其是辟狈,不要?jiǎng)h除初始啟動(dòng)時(shí)間偏移值肠缔。
需要注意的是,即使使用了該選項(xiàng)哼转,根據(jù)不同的vsync選項(xiàng)或?qū)μ囟◤?fù)用器處理(例如格式選項(xiàng)avoid_negative_ts被啟用)輸出時(shí)間戳與輸入可能不匹配時(shí)間戳明未。
-start_at_zero
當(dāng)與copyts使用,調(diào)整輸入時(shí)間戳壹蔓,使他們從零開始趟妥。
這意味著使用例如-ss 50將使輸出時(shí)間戳開始50秒時(shí),不管輸入文件開始處的時(shí)間戳是多少佣蓉。
-copytb mode
指定在拷貝流時(shí)如何設(shè)置編碼器的時(shí)間基準(zhǔn)披摄,mode是一個(gè)整型,可以假定為下列值之一:
1
使用分流器的時(shí)間基準(zhǔn)偏螺。
時(shí)間基準(zhǔn)從相應(yīng)的輸入分流器復(fù)制到輸出編碼器行疏。該情況下,對(duì)可變幀速率的視頻流的復(fù)制套像,有時(shí)需要避免非單調(diào)的時(shí)間戳酿联。
0
使用解碼器時(shí)間基準(zhǔn)。
時(shí)間基準(zhǔn)從相應(yīng)的輸入解碼器復(fù)制到輸出編碼器。
-1
嘗試自動(dòng)做出選擇贞让,以便產(chǎn)生一個(gè)合理的輸出周崭。
默認(rèn)值為-1。
-shortest (output)
最短的輸入流結(jié)束時(shí)完成編碼喳张。
-dts_delta_threshold
時(shí)間戳間斷門檻续镇。
-muxdelay seconds (input)
設(shè)置最大分流解碼延時(shí)。
-muxpreload seconds (input)
設(shè)定初始解碼分流延遲销部。
-streamid output-stream-index:new-value (output)
分配一個(gè)新流id值到輸出流摸航。該選項(xiàng)?需指定到輸出文件名之前。對(duì)于在多個(gè)輸出文件存在的情況下舅桩,一個(gè)流id將被重新分配到不同的值酱虎。
例如,要設(shè)置流0 到流33擂涛,同時(shí)流1至流36读串,到MPEGTS格式的輸出文件:
ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
-bsf[:stream_specifier] bitstream_filters (output,per-stream)
指定匹配流的bitstream_filters。它是一個(gè)逗號(hào)分隔的濾鏡列表撒妈。使用-bsfs選項(xiàng)得到的濾鏡列表恢暖。
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
指定寫入的時(shí)間碼狰右。對(duì)于non drop 時(shí)間碼杰捂,分隔符SEP是: 對(duì)于drop時(shí)間碼是; (或.)。
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
-filter_complex filtergraph (global)
定義復(fù)雜FilterGraph挟阻,即具有輸入和/或輸出任意個(gè)數(shù)的濾鏡組琼娘。對(duì)于簡(jiǎn)單濾鏡——那些具有一個(gè)輸入和相同類型的一個(gè)輸出的濾鏡——參見-filter選項(xiàng)。FilterGraph是FilterGraph的描述附鸽,參見FFMPEG濾鏡手冊(cè)的“FilterGraph語法”部分中的描述脱拼。
輸入鏈路標(biāo)簽必須關(guān)聯(lián)到使用[file_index:stream_specifier]語法標(biāo)記的輸入流(即-map選項(xiàng)中使用的格式)。如果stream_specifier匹配多個(gè)流坷备,第一個(gè)將被使用熄浓。未標(biāo)記的輸入將被連接到匹配類型的第一未使用的輸入流。
輸出鏈接標(biāo)簽由-map指定省撑。未標(biāo)記的輸出被加到第一輸出文件赌蔑。
注意,使用該選項(xiàng)竟秫,可以只有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]指的是在第一輸入文件中的第一視頻流肥败,這是與覆蓋濾波器的第一(主)輸入趾浅。同樣愕提,在第二輸入的第一視頻流鏈接到覆蓋層的第二(覆蓋)輸入。
假定在每個(gè)輸入文件中只有一個(gè)視頻流皿哨,就可以省略輸入標(biāo)簽浅侨,因此上述命令相當(dāng)于
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map'[out]' out.mkv
此外,我們可以省略輸出標(biāo)簽和單輸出的濾鏡证膨,它將被自動(dòng)添加到輸出文件如输,所以我們可以簡(jiǎn)單地寫
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,即具有輸入和/或輸出任意個(gè)數(shù)的濾鏡組央勒。相當(dāng)于-filter_complex不见。
-filter_complex_script filename (global)
這個(gè)選項(xiàng)類似于-filter_complex,唯一的區(qū)別是崔步,它的參數(shù)是包含被讀取FilterGraph的文件的名稱脖祈。
-accurate_seek (input)
此選項(xiàng)啟用或禁用準(zhǔn)確尋求輸入文件,配合-ss選項(xiàng)使用刷晋。它默認(rèn)是啟用的,所以當(dāng)轉(zhuǎn)碼時(shí)是準(zhǔn)確的慎陵。使用-noaccurate_seek禁用它眼虱,在拷貝一些數(shù)據(jù)流和轉(zhuǎn)碼時(shí),這可能是有用的席纽。
-override_ffserver (global)
從ffserver 覆蓋輸入規(guī)格捏悬。使用這個(gè)選項(xiàng),你可以映射任何輸入流到ffserver润梯,并從ffmpeg 控制編碼的許多方面过牙。如果沒有這個(gè)選項(xiàng)ffmpeg將發(fā)送ffserver要求的內(nèi)容。
該選項(xiàng)用于那些不能被指定到ffserver的功能 纺铭,即便他們可以用于ffmpeg 寇钉。
-discard (input)
允許在分路器丟棄特定流或流幀。不是所有的分路器都支持舶赔。
none
禁止丟棄幀扫倡。
default
默認(rèn)情況下,不丟棄幀竟纳。
noref
丟棄所有非參考幀撵溃。
bidir
放棄所有雙向幀。
nokey
丟棄所有幀除了關(guān)鍵幀锥累。
all
丟棄所有幀缘挑。
作為一個(gè)特例,可以使用一個(gè)位圖字幕流作為輸入:它將被轉(zhuǎn)換到文件中最大的視頻相同尺寸桶略,或720×576语淘,如果沒有視頻诲宇。需要注意的是,這是一個(gè)實(shí)驗(yàn)性和臨時(shí)解決方案亏娜。它會(huì)在libavfilter有適當(dāng)字幕支持后刪除焕窝。
例如,硬編碼存儲(chǔ)在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
的文件 溯泣,每行一個(gè)虐秋,指定的選項(xiàng)需按照命令行中的順序±伲’?透’開頭的字符行被忽略,并用來提供注釋肢簿。參見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大小池充。這對(duì)于那些配置較低的Linux用戶上播放RealVideo尤是如此桩引,它可能會(huì)丟幀。例如: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)動(dòng)估計(jì)和-g 0完全禁用運(yùn)動(dòng)估計(jì)(你僅有I-frames忱详,這意味著它幾乎和JPEG壓縮一樣好)围来。
可通過降低采樣頻率獲得非常低的音頻比特率(對(duì)于MPEG音頻,下降到22050Hz匈睁,對(duì)于AC-3监透, 使用22050或11025Hz)。
有一個(gè)恒定的質(zhì)量(但可變比特率)航唆,使用選項(xiàng)-qscale N時(shí)胀蛮,N是1(優(yōu)秀品質(zhì))和31(質(zhì)量最差)之間。
7 范例
7.1 預(yù)置文件
預(yù)置文件包含option=value糯钙,一個(gè)用于每行粪狼,指定其也可以指定的命令行上的選項(xiàng)的序列的序列退腥。’T匍’開頭的字符行被忽略狡刘,并用來提供注釋±福空行將也被忽略嗅蔬。檢查的例子FFmpeg的源代碼樹中的preset目錄。
預(yù)置文件中指定的pre選項(xiàng)疾就,這個(gè)選項(xiàng)需要一個(gè)預(yù)設(shè)名稱作為輸入澜术。FFmpeg在$AVCONV_DATADIR
和$HOME/.ffmpeg
以及編譯時(shí)指定的目錄(通常是$PREFIX/share/ffmpeg
)的目錄中搜索文件名??為preset_name.avpreset
的文件。例如猬腰,如果該參數(shù)是libx264-max鸟废,它會(huì)搜索文件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
請(qǐng)注意兰英,您必須在啟動(dòng)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選項(xiàng),如果ffmpeg的不能猜測(cè)它净赴。
您可以從原始YUV420P文件輸入: ffmpeg -i /tmp/test.yuv /tmp/out.avi
test.yuv是含有生YUV平面數(shù)據(jù)的文件绳矩。每個(gè)幀是由Y平面后跟U和V平面的一半的垂直和水平分辨率。
可以輸出到原始文件YUV420P: ffmpeg -i mydivx.avi hugefile.yuv
您可以設(shè)置多個(gè)輸入文件和輸出文件: ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
轉(zhuǎn)換音頻文件a.wav和原始YUV視頻文件a.yuv到MPEG文件a.mpg玖翅。
你也可以同時(shí)做音頻和視頻轉(zhuǎn)換:ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
使用22050赫茲的采樣率轉(zhuǎn)換a.wav到MPEG音頻翼馆。
可以同時(shí)進(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ù)流的定義的順序指定了用于每一個(gè)輸出流的輸入流应媚。
您可以轉(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
這是一個(gè)典型的DVD翻錄的例子;輸入是VOB文件严沥,輸出與MPEG-4視頻和MP3音頻的AVI文件。注意中姜,在這個(gè)命令消玄,我們使用B幀,以便對(duì)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
這將每秒提取一個(gè)視頻幀桦卒,并輸出到名為foo-001.jpeg,foo-002.jpeg等圖片中匿又。圖片將被重新縮放到定義的尺寸方灾。
如果你想提取有限數(shù)量的幀,你可以組合使用上面的命令與-vframes或-t選項(xiàng)碌更,或與-ss開始從某一個(gè)時(shí)間點(diǎn)提取裕偿。
從圖像創(chuàng)建視頻:ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
語法foo-%03d.jpeg指定要使用的三個(gè)數(shù)字組成的十進(jìn)制數(shù)用零填充到表達(dá)的序列號(hào)。它支持C語言printf函數(shù)相同的語法痛单,但只有格式接受整數(shù)嘿棘。
當(dāng)導(dǎo)入圖像序列,-i
還支持Shell擴(kuò)展通配符旭绒。這在內(nèi)部通過image2-specific-pattern_type glob選項(xiàng)選擇鸟妙。
例如,從文件名?匹配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將包含從以相反的順序存儲(chǔ)的輸入文件中的四個(gè)流挥吵。
要強(qiáng)制CBR視頻輸出: ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
lmin重父,lmax,mblmin和mblmax四個(gè)選項(xiàng)的單位是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