1. 程式人生 > >FFmpeg命令列

FFmpeg命令列

FFmpeg命令列

記錄一下常用的命令列

介紹

基礎語法與流程

ffmpeg [gl-opt] {[input-file-opt] -i input-url} ... {[output-file-opt] output-url} ...

其中, -i 表示輸入引數.

主要引數

下表中:

  1. <> 包裹的表示由使用者具體指定;以 [] 包裹的表示是可選引數,可以指定也可以省略。
  2. 括號內的 i 表示該引數用於輸入流,o 表示用於輸出流,i/o 表示均可,global 表示全域性引數。
  3. 關鍵字 duration, position
    offset 滿足:[-][HH:]MM:SS[.m...] 這種時間戳格式。或者以秒為單位的 SS[.m...] 格式。

常用的如下:

  • -b[:stream_specifier] (o):輸出位元率。
  • -f <fmt> (i/o):指定 fmt 作為輸入或輸出的視訊格式。一般會根據副檔名自動選擇,但有時需要手動指定。
  • -i <filename> (i):指定 filename 作為原始檔。
  • -y (global):檔案存在時直接覆蓋。
  • -n (global):檔案存在時不覆蓋並立即退出。
  • -bsf[:stream_specifier] <bitstream_filters> (o)
    :設定位元流濾鏡。bitstream_filters 是一個逗號分隔的濾鏡列表。
  • -stream_loop <num> (i):指定輸入流的迴圈次數。0 表示不迴圈,-1 表示無限迴圈。
  • -c[:stream_specifier] <codec> (i/o)-c可寫為-codec。選擇一個 codec ,即編碼器(輸出時)或一個解碼器(輸入時),參與到 stream_specifier 指定的一個或多個流的編碼/解碼中。在輸出時,<codec> 可以被指定為 copy,表示複製資料流。
  • -t <duration> (i/o):(在引數 -i
    之前指定)工作持續 duration 時長。一般用於指定剪輯資料流的範圍。 它與 -to 引數相互衝突,但本引數優先。
  • -to <position> (o):到 position 位置後,終止輸出。與 -t 引數衝突,本引數優先順序低。
  • -fs <limit_size> (o):輸出檔案大小達到 limit_size 後停止輸出,單位是 byte.
  • -ss <position> (i/o):(在引數 -i 之前指定)從 position 指定的位置開始工作。注意:大多數情形下,工作起始位置是不精確的。ffmpeg會找到其前部的一個點作為真正的起始,並在結束工作後將該點與使用者指定點之間的內容拋棄。然而,如果你使用了 copy 引數,這部分內容卻會被保留。
  • -sseof <position> (i/o):類似 -ss 引數,只不過是從資料流末端向前尋找 position。此時 0 表示資料流末。
  • -itsoffset <offset> (i):指定輸入流以原時間戳加上 offset 作為其輸入時間戳。
  • -metadata[:metadata_specifier] key=value (o):以鍵值對的形式設定元資料。
  • -frames[:stream_specifier] <num> (o):在輸出 num 幀後停止寫入。
  • -qscale[:stream_specifier] q (o):使用固定質量(VBR)。
  • stats (global):輸出編碼過程,是系統預設值。可以使用 -nostats 關閉。
  • -attach <filename> (o):將 filename 檔案附加到輸出檔案。附件流作為檔案的最後一個流,只有很少的檔案型別被支援(例如字型)。

視訊引數

  • -vframes <num>:檔案的總幀數。-frames:v 的別名。
  • -r[:steam_specifier] <fps> (i/o):檔案的幀率。
  • -s[:steam_specifier] <size> (i/o):幀尺寸。引數 size 需要滿足格式 <width>x<height>,例如320x240。 -aspect[:steam_specifier] <asp> (o):寬高比,例如 4:3。如果使用了 -vcodec copy,那麼指定容器的寬高比而不是視訊的。
  • -vn (o):禁止輸出視訊。
  • -vcodec <codec> (o):設定視訊編碼器。-codec:v 的別名。

音訊引數

  • -aframes <num> (o):檔案的總幀數。-frames:a 的別名。
  • -ar[:stream_specifier] <freq> (i/o):取樣率。預設輸出等於輸入。僅當輸入檔案為真實裝置或者 raw 資料時,該引數才能用於輸入過程。
  • -aq <q> (o):音訊品質(VBR)。 -q:a 的別名。
  • -ac[:stream_specifier] <channel> (i/o):設定音訊通道數。預設輸出等於輸入。僅當輸入檔案為真實裝置或者 raw 資料時,該引數才能用於輸入過程。
  • -an (o):禁止輸出音訊。
  • -acode <codec> (i/o):設定音訊的解碼器或編碼器。-codec:a 的別名。

其他引數

以下直接在 ffmpeg 後使用,例如:ffmpeg -version

  • -bsfs:可用的位元流濾鏡。
  • -h [arg]:幫助。arg 的內容可以是:
  • decoders:可用的解碼器。或特指:decoder=。
  • encoders:可用的編碼器。或特指:encoder=。
  • filters:所有濾鏡。或特指:filter=。
  • formats:可用的分流器與混流器。或特指分流器:demuxer=,或特指混流器:muxer=。
  • -protocols:支援的協議。
  • -version:版本資訊。

示例

編碼

1. yuv -> h265

ffmpeg -s 3840x1920 -pix_fmt yuv420p -r 30 -i basketball_3840x1920.yuv -vframes 300 -c:v libx265 basketball.h265

2. yuv - > h265 全I幀編碼

ffmpeg -s 3840x1920 -pix_fmt yuv420p -r 30 -i basketball_3840x1920.yuv -vframes 300 -c:v libx265 -x265-params keyint=1:ref=1:no-open-gop=1:weightp=0:weightb=0:cutree=0:rc-lookahead=0:bframes=0:scenecut=0:b-adapt=0:repeat-headers=1 -y basketball_3840x1920.h265

3. yuv -> h265 IPPP編碼

  • 待續

解碼

1. MP4 -> h265

ffmpeg -i shark.MP4 -s 3840x1920 -vcodec libx265 -y TestStream1_ViewPoint1.h265

2.MP4 -> yuv

ffmpeg -i basketball.MP4 -s 3840x1920 -y -pix_fmt yuv420p basketball_3840x1920.yuv

擷取 / 上下采樣

1. 切取YUV某個區域

ffmpeg.exe	-s 3840x1920 -r 30 -pix_fmt yuv420p	-i	AerialCityStr_3840x1920.yuv -vf crop=1280:320:0:0 -qscale 1 -s 320x320 -sws_flags lanczos -vframes 100 -r 30     enc_AerialCityStr_Tile_0.yuv  -y

/*
引數: 
源寬x源高 源幀率 源YUV為420 YUV源           
切割小塊的寬:高:在源中左上角的座標x: 左上角座標y  
輸出長寬              
插值方法    
幀數                
輸出幀率          
輸出路徑
*/

2. 下采樣

for 迴圈對YUV下采樣,並264編碼

set bitrate=(200,500,800,1500,3000)
set bitrate2=(200,500,800,1500,3000)
set target_resolution=720x360
set width=720
set height=360

rem 對檔名在filename1中30fps的檔案YUV進行取樣至目標解析度
for %%a in %file_name1% do (for %%b in %bitrate% do (
if not exist %yuv_out%\%%a_sample_%target_resolution%.yuv (ffmpeg -s %initial_resolution% -i %yuv_in%\%%a.yuv -s %target_resolution% %yuv_out%\%%a_sample_%target_resolution%.yuv)
x264.exe -I 30 -i 30 --ref 1 --qpstep 2 --profile baseline --bitrate %%b --vbv-maxrate %%b --vbv-bufsize %%b --vbv-init 0.9 -m 1 --threads 1 --fps %fps1% -o %yuv_out%\%%a_%target_resolution%_%%brat_%fps1%fr.264 %yuv_out%\%%a_sample_%target_resolution%.yuv --input-res %target_resolution% ))
::del %yuv_out%\*.264
::del %yuv_out%\*.yuv

參考文獻

FFmeg命令列

FFMPEG的畫素格式