FFmpeg 參數詳解(二)


https://blog.csdn.net/yizhizouxiaqu/article/details/52233673

5、參數選項

 

如果沒有特殊聲明,所有的數字參數都以一個字符串代表數字的形式作為輸入參數接收,所有的數字參數都會帶着一個SI前綴單位,例如’K’, ’M’或者’G’。

如果 ‘i’被追加到SI的首字母,完整的字母會被當做i的二進制倍數解釋,倍數需要乘以1024,而不是乘以1000。追加 ‘B’到SI單位的前面倍數是8。下面幾個參數的用法都是作為數字的后綴,例如’KB’,’MiB’,’G’和’B’。

沒有設置值為ture的boolean類型的參數。boolean類型的false可以在選項前面加上”no”來表示。例如使用 “-nofoo”會設置”foo”參數為boolean類型的false。

5.1、流的詳細說明

 

一些選項是被應用到單個流上的,例如碼率和編碼。流的詳情參數被用來精確的控制參數屬於哪個流。

流的說明通常是被追加到選項名字后面並且用分號分開的一個字符串。例如:-codec:a:1 ac3包含了 a:1 流聲明符,這個參數是來匹配第二個音頻流的。因此,音頻流將會選擇ac3編碼作為第二個音頻流。

一個流聲明符可以匹配幾個流,因此參數選項是被用到所有流上的。例如 -b:a 128k 參數,匹配所有的音頻流。

空的流聲明匹配所有的流上。例如,-codec copy 或者 -codec:copy 會復制所有不需要再次編碼的流。

可能的流參數如下所示:

stream_index

根據索引去匹配流。例如: -threads:1 4 將會為第二個流設置4個線程處理。

stream_type[:stream_index]

stream_type針對視頻可以選擇’v’或’V’其中一個參數表示,針對音頻的參數是’a’表示,針對字幕的參數是’s’表示,針對數據的參數為’d’表示,針對附件的參數為’t’表示。用 ‘v’匹配所有的視頻流,用’V’僅僅匹配沒有附加圖片、視頻縮略圖或者封面的視頻流。如果提供了stream_index,stream_type會根據stream_index去匹配視頻流。否則,stream_type會匹配所有的視頻流。

p:program_id[:stream_index]

如果提供了stream_index,program_id的程序去匹配對應stream_index的視頻流。否則在程序中會匹配所有的視頻流。

#stream_id or i:stream_id

根據流id匹配對應的流(例如在MPEG-TS容器中的PID)。

m:key[:value]

用元數據中帶有key=value的ag去匹配流。如果value沒有聲明,會匹配此tag的任何流。

u

用可用的配置匹配流,編碼必須被定義,並且例如視頻尺寸或者音頻采樣率等必要的信息必須提供。

注意在ffmpeg中,根據元數據匹配僅僅會在輸入的文件起作用。

 

5.2、通用參數

 

以ff*開始的工具都可以使用下面的參數。

-L

顯示授權信息

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

顯示幫助信息。可以根據一個特定的可選參數來打印具體的幫助信息。如果沒有參數聲明,僅僅展示基本的工具參數信息。

可能的參數值為:

long

打印除基本工具選項外的高級工具選項。

full

打印完整的選項列表,包括編碼、解碼、解封裝、封裝,過濾器等私有的或共享的選項。

decoder=decoder_name

打印解碼器名字為decoder_name的詳細信息。使用-decoders選項會打印所有解碼器列表。

encoder=encoder_name

打印編碼器名字為encoder_name的詳細信息。使用-encoders選項會打印所有編碼器列表。

demuxer=demuxer_name

打印解封裝器名字為demuxer_name的詳細信息。使用-formats選項會打印所有解封裝器和封裝器的列表。

muxer=muxer_name

打印封裝器名字為muxer_name的詳細信息。使用-formats選項會打印所有解封裝器和封裝器的列表。

filter=filter_name

打印名字為filter_name的過濾器詳細信息。使用-filters選項會打印過濾器的列表。

-version

展示ffmpeg版本

-formats

展示可以使用的格式(包括設備)。

-devices

展示所有可用的設備。

-codecs

展示所有已知的libavcodec。

注意在整個文檔中都使用了術語’codec’作為二進制流媒體格式的簡稱。

-decoders

展示所有可用的解碼器。

-bsfs

展示所有可用的碼流過濾器。

-protocols

展示所有可用的協議。

-filters

展示可用的libavfilter過濾器

-pix_fmts

展示可用的像素格式

-sample_fmts

展示可用的采樣格式

-layouts

展示視頻流的信道名稱和布局。

-colors

展示注冊的顏色名稱

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

展示可自動識別的輸入設備的源。一些提設備供了可能探測不到的源的名字。返回的列表通常不是完整的。

<span style="white-space:pre"> </span>ffmpeg -sources pulse,server=192.168.0.4

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

顯示自動探測到接收器的輸出設備。一些提設備供了可能探測不到的源的名字。因此返回的列表是不完整的。

<span style="white-space:pre"> </span>ffmpeg -sinks pulse,server=192.168.0.4

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

設置library使用的日志級別。增加’repeat+’說明日志的輸出不會被壓縮到第一行,並且會刪除”Last message repeated n times”。”repeat”也可以獨立使用。如果 “repeat”獨立使用,並且沒有設置日志的等級,就會使用默認的日志等級。如果給出了多個日志的等級參數,使用”repeat”將不會改變日志級別。日志級別是如下所示的一個字符串或者數字。

‘quiet, -8’

不會顯示任何信息

‘panic, 0’

僅僅展示可能導致進程崩潰的致命錯誤,例如段錯誤。這個目前還沒有什么用。

‘fatal, 8’

僅僅展示致命錯誤。如果出現錯誤進程將不會繼續執行。

‘error, 16’

展示所有的錯誤,包括不能恢復的錯誤。

‘warning, 24’

展示所有的警告和錯誤。任何可能不對或不期望的事件都會被展示出來。

‘info, 32’

展示處理過程中的信息。包含了警告和錯誤信息。這個是默認值。

‘verbose, 40’

同“info”類似,增加了更多的冗余信息。

‘debug, 48’

展示了包含調試的所有信息。

‘trace, 56’

程序默認輸出log到標准輸出,如果輸出終端支持顏色展示,錯誤和警告會被用帶有顏色的字體展示出來。日志顏色可以通過設置AV_LOG_FORCE_NOCOLOR或NO_COLOR,或者設置系統變量AV_LOG_FORCE_COLOR禁用掉。系統變量 NO_COLOR 已經被廢棄了,並且在下一個版本中刪除。


-report

轉存完整的命令行和控制台的輸入到當前目錄的一個program-YYYYMMDD-HHMMSS.log的日志。這個文件也能用來記錄bug報告。也可以使用 -loglevel verbose參數。

設置 FFREPORT 這個環境變量為任何值都會有同樣的效果。如果這個值是用 ‘:’ 分割的key=value序列,這些值也會影響報告;如果包含特別的字符或者 ‘:’分割符,這些參數值必須被轉譯(請看ffmpeg-utils手冊的 “引用和轉譯”一章)。

可以使用以下參數值:

file

為報告設置名字; %p是程序名字的擴展,%t是時間戳的擴展,%%是%的擴展。

level

使用數字(看 -loglevel)設置日志的冗余級別。

例如,使用日志級別32(別名為r日志級別 info)輸出報告到名字為ffreport.log的日志上。

 

<span style="white-space:pre"> </span>FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

若果在環境變量的解析過程中出現錯誤並非是致命的,在報告中也不會出現的。

 

-hide-banner

不打印版權標志。

所有的ffmpeg 工具都會正常展示一個版權聲明,編譯選項和庫的版本。這個可選的參數用來控制打印這個信息。

-cpuflags flags (global)

允許設置和清除cpu標志。這個選項是用來測試的。除了你知道你正在使用這個選項改什么外請不要使用這個選項。

<span style="white-space:pre"> </span>ffmpeg -cpuflags -sse+mmx ... <span style="white-space:pre"> </span>ffmpeg -cpuflags mmx ... <span style="white-space:pre"> </span>ffmpeg -cpuflags 0 ...

 

此選項的可能值為:

'x86'的機器為:‘mmx’,‘mmxext’,‘sse’,‘sse2’,‘sse2slow’,‘sse3’,‘sse3slow’,‘ssse3’,‘atom’,‘sse4.1‘,‘sse4.2’,‘avx’,‘avx2’,‘xop’,‘fma3’,‘fma4’,‘3dnow’,‘3dnowext’,‘bmi1’,‘bmi2’,‘cmov’

’ARM‘的機器為:‘armv5te’,‘armv6’,‘armv6t2’,‘vfp’,‘vfpv3’,‘neon’,‘setend’

'AArch64'的機器為:‘armv8’,‘vfp’,‘neon’

‘PowerPC’的機器為:‘altivec’

‘Specific Processors’的機器為:‘pentium2’,‘pentium3’,‘pentium4’,‘k6’,‘k62’,‘athlon’,‘athlonxp’,‘k8’

 

-opencl_bench

這個選項是用來所有可使用的OpenCL設備基准測試並且打印結果。只有當FFmpeg用—enable-opencl編譯時才可以使用這個選項。

FFmpeg是通過—enable-opencl配置編譯時,全局OpenCL上下文選項設置通過-opencl_options設置的。閱讀在ffmpeg-utils手冊中”OpenCL Options”一節,有關於這個選項完整的支持列表。另外,這些選項包含選擇一個特定平台和設備運行OpenCL代碼的能力。默認的,FFmpeg會運行第一個平台上的第一個設備。盡管全局的OpenCL上下文選項為用戶提供了選擇OpenCL設備的靈活性,但是大多數用戶都可能為他們的系統選擇最快的OpenCL設備。

這個選項根據用戶的系統識別有效的設備來幫助用戶做最有效配置的選擇。內在的基准測試運行在所有的OpenCL設備上,並且性能是根據每個設備衡量的。在結果列表中的設備首先是根據最快設備的性能排序的。用戶隨后可以通過使用-opencl_options去獲得最佳性能OpenCL加速代碼調用 ffmpeg。

使用OpenCL設備加速的典型用法步驟如下

運行命令:

<span style="white-space:pre"> </span>ffmpeg -opencl_bench

 

記錄下在列表中最快設備的平台ID(pidx)和設備ID(didx)。使用下面的命令選擇平台和設備:

 

<span style="white-space:pre"> </span>ffmpeg -opencl_options platform_idx=pidx:device_idx=didx

 

-opencl_options options (global)

設置OpenCL的環境變量。這個選項當且僅當ffmpeg使用了 —enable_opencl編譯。

選項必須是用 ‘:’分割的key=value列表。詳情見ffmpeg-utils手冊的”OpenCL Options”一節。

 

5.3 AVOptions

這些選項是由libavformat,libavdevice和libavcodec這3個庫直接提供的。因此使用-help選項可以查看AVOptions的參數列表。這些參數列表分為2類:

generic

這些選項可以為任何容器、編碼器和設備設置。通用選項在容器/設備的AVFormatContext選項下和編碼器的AVCodecContext選項下被列出。

private

這些選項是為特殊的容器、編碼器和設備特有。私有選項在容器/設備/編碼器下被列出。

例如把一個mp3文件的頭由默認的ID3v2.4替換為ID3v2.3。(ID3詳見 https://en.wikipedia.org/wiki/ID3):

 

<span style="white-space:pre"> </span>ffmpeg -i input.flac -id3v2_version 3 out.mp3

 

所有的AVOptions編碼器是針對每個流的,因此流說明應該附加到編碼器上。

注意:-nooption語法不能使用布爾值,使用-option 0或-option 1來代替。

注意:舊的沒有文件聲明的在每個流前面加v/a/s的AVOptions已經過時並會被刪除。

 

 

5.4 主要選項

-f fmt (input/output)

強制輸入或輸出文件的格式。通常輸入文件的格式被自動檢測,輸出文件的格式根據輸出文件的擴展名進行推測,因此多數情況下是不需要這個選項的。

-i filename (input)

輸入文件的名字

-y (global)

不需要詢問覆蓋輸出文件

-n (global)

不會覆蓋輸出文件,如果輸出文件已經存在程序立即退出。

-stream_loop number (input)

設置輸入流被循環的次數。循環0次意味着沒有循環,循環-1意味着無限循環。

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

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

為一個或多個流選擇一個編碼器(當用在輸出文件的前面時)或一個解碼器(當使用在輸入文件的前面時)。codec是一個解碼器或編碼器的名字或特殊值 copy(僅對輸出有效)說明流不會被重新編碼。

例如:

 

<span style="white-space:pre"> </span>ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

 

使用libx264編碼所有的視頻流,並復制所有的音頻流。

對每個流,最后匹配的c選項起作用,因此

 

<span style="white-space:pre"> </span>ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

 

這個命令會復制除被libx264編碼的第二個視頻流、被libvorbis編碼的第138個音頻流外所有的流。

-t duration (input/output)

當在input選項前使用-t參數時(在 -i 參數前),限制從輸入文件讀取數據的持續時間。

當在output選項前使用時(在輸出文件名前),當達到了設置的持續時間則停止向輸出寫。

持續時間必須是根據規范設置的,詳見(ffmpeg-utils)duration一章。

-to 和-t 是互斥的,-t具有優先權。

-to position (output)

在position時刻停止向輸出文件中寫。position必須滿足duration的規范。詳見(ffmpeg-utils)duration一章。

-to 和-t 是互斥的,-t具有優先權。

-fs limit_size (output)

設置文件大小限制,以字節表示。當超出限制后不會有字節被寫入文件。輸出文件的大小會比所需文件稍小。

-ss position(input/output)

當用來作為一個輸入選項時(在 -i之前),ffmpeg會尋找到 position時間的位置。注意在大多數的編碼中ffmpeg不會精確的查找,因此 ffmpeg會查找到最接近position的位置。當轉碼開啟了 -accurate_seek選項時(默認開啟),在查找點和最終位置(position)之間的片段會被解碼並拋棄。當做流拷貝或使用-noaccurate_seek選項時,在查找點和最終位置(position)之間的片段會被保留。

-sseof position (input/output)

類似使用 -ss參數,但是從文件末尾計算。文件的前面可以使用負值,0代表了文件的結束。

-itsoffset offset(input)

設置輸入文件的偏移量

offset 必須是時間類型的參數,詳見 ffmpeg-utils 的duration一章。

偏移量是加給輸入文件的時間戳。指定一個正的偏移量意味着對應的流是被延遲了offset時間。

-timestamp date (output)

設置容器的時間戳記錄。

date 必須是日期標准,詳見 ffmpeg-utils的Date一章。

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

設置元數據 key/value對。

一個可選的metadata_specifier可以設置在流,段或者program(?)的元數據上。

這個選項可以使用-map_metadata來覆蓋。也可以使用空值來刪除元數據。

例如,設置輸出文件的主題

 

<span style="white-space:pre"> </span>ffmpeg -i in.avi -metadata title=“my title” out.flv

 

設置第一個音頻流的語言

 

<span style="white-space:pre"> </span>ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

 

-program [title=tilte:][program_num=program_num:]st=stream[:st=stream…] (output)

用指定的title,program_num創建一個program,並且把指定的流加到這個program上。

-target type (output)

聲明目標文件類型(vcd, dvcd, dvd, dv, dv50)。type可以附加pal-, ntsc-, film- 前綴來使用相應的標准。所有format選項(bitrate, codecs, buffer sizes)會被自動設置。

例如:

 

<span style="white-space:pre"> </span>ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

 

另外你可以添加其他的選項,只要保證和這個標准不沖突,例如:

 

<span style="white-space:pre"> </span>ffmpeg -i my file.avi -target vcd -bf 2 /tmp/vcd.mpg

 

-dframes number  (output)

設置寫到輸出的數據幀數量。此選項有個別名為 -frames:d。

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

在framecount幀后,停止向流繼續寫。

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

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

使用固定的量化標准(可變碼率)。這意味着q|qscale是編碼器的依賴。如果qscale被使用並且沒有聲明stream_specifier,qscale僅能被使用在視頻流上,這是為了和以前的行為保持兼容 並且聲明相同的編碼值給音頻和視頻兩個不同的編碼器(當沒有使用stream_specifier選項時這兩個不同的編碼器也沒有打算使用qscal選項)。

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

根據filtergraph創建過濾圖用來過濾流。

filtergraph是應用到流上的過濾圖描述,並且相同類型的流只能有一個輸入和一個輸出。在過濾圖中,輸入是和 “in”標簽相關的, 輸出是和“out”標簽相關的。詳見ffmpeg-filters文檔有關於這個預發的詳細介紹。

如果你想用多個輸入和輸出創建過濾圖可以看-filter_complex 選項。

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

這個選項和-filter選項類似,不同之處是這個選項的參數是從過濾圖描述中讀取的文件名字。

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

指定預設名字的流。

-stats (global)

打印編碼的過程/統計。默認開啟,可以通過-nostats禁用。

-progress url (global)

把編碼過程信息發送到url。

過程信息每隔1秒中寫一次,在編碼結束后也寫一次。過程信息以”key=value”的形式展示。”key”僅僅包含了字母組成的字符。過程信息的最后一位key總是”progress”。

-stdin

可以和標准輸入交互。在默認情況下除了非標准輸入作為輸入。禁止交互可以聲明”-nostdin”。

禁止標准輸入的交互是有用的,例如,ffmpeg作為后台進程時。也可以粗暴的通過 ffmpeg … < /dev/null來達成這個目的,但還是仍然需要從shell調用。

-debug_ts (global)

打印時間戳信息。默認關閉。這個選項是用來測試和調試的,並且輸出格式可以從一個版本變為另外一個版本,因此它不應該在移植的腳本中使用。

也可以看“-fdebug ts” 這個選項。

-attach filename (output)

為輸入的文件增加附件。這個選項是被幾種格式支持的,例如Matroska等 用來渲染字母的字體。附件被實現為一種特殊形式的流,因此這個選項添加了一個新的流到輸出文件。然后可以使用通常的方式對待這個流。附件流是在所有其他流被創建后創建的(其他流通過-map或自動匹配創建)。

注意為Matroska你必須設置mimetype元數據標簽:

 

<span style="white-space:pre"> </span>ffmpeg-i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

 

(推測附件流是作為輸出文件的第三個流)

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

提取匹配的附件流到名字為 filename的文件。如果文件是空的,filename的元數據標簽會被使用作為filename。

例如提取第一個附件流到 out.ttf的文件中:

 

<span style="white-space:pre"> </span>ffmpeg -dump_attachment:t:0 out.ttf -i INPUT

 

提取所有的附件到根據filename的標簽來確定的文件中:

 

<span style="white-space:pre"> </span>ffmpeg -dump_attachment:t “” -i INPUT

 

技術說明-附件是被編碼的額外數據實現,因此這個選項可以用來從任何流中抽取額外數據,而不僅僅是附件。

-noautorotate

在視頻的元數據中設置禁止轉換視頻角度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM