ffmpeg入門教程之ffmpeg命令行瓜皮書------全局命令(翻譯)

文章目錄

ffmpeg入門教程https://www.jianshu.com/p/042c7847bd8a

本文將會持續更新,敬請關注

視頻播放器原理

———————————————— 版權聲明

此處摘抄部分爲CSDN博主「雷霄驊」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/leixiaohua1020/article/details/18893769

視音頻技術主要包含以下幾點:封裝技術,視頻壓縮編碼技術以及音頻壓縮編碼技術。如果考慮到網絡傳輸的話,還包括流媒體協議技術。

視頻播放器播放一個互聯網上的視頻文件,需要經過以下幾個步驟:解協議,解封裝,解碼視音頻,視音頻同步。如果播放本地文件則不需要解協議,爲以下幾個步驟:解封裝,解碼視音頻,視音頻同步。他們的過程如圖所示。

在這裏插入圖片描述

解協議的作用

就是將流媒體協議的數據,解析爲標準的相應的封裝格式數據。視音頻在網絡上傳播的時候,常常採用各種流媒體協議,例如HTTP,RTMP,或是MMS等等。這些協議在傳輸視音頻數據的同時,也會傳輸一些信令數據。這些信令數據包括對播放的控制(播放,暫停,停止),或者對網絡狀態的描述等。解協議的過程中會去除掉信令數據而只保留視音頻數據。例如,採用RTMP協議傳輸的數據,經過解協議操作後,輸出FLV格式的數據。

解封裝的作用

就是將輸入的封裝格式的數據,分離成爲音頻流壓縮編碼數據和視頻流壓縮編碼數據。封裝格式種類很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是將已經壓縮編碼的視頻數據和音頻數據按照一定的格式放到一起。例如,FLV格式的數據,經過解封裝操作後,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。

解碼的作用

就是將視頻/音頻壓縮編碼數據,解碼成爲非壓縮的視頻/音頻原始數據。音頻的壓縮編碼標準包含AAC,MP3,AC-3等等,視頻的壓縮編碼標準則包含H.264,MPEG2,VC-1等等。解碼是整個系統中最重要也是最複雜的一個環節。通過解碼,壓縮編碼的視頻數據輸出成爲非壓縮的顏色數據,例如YUV420P,RGB等等;壓縮編碼的音頻數據輸出成爲非壓縮的音頻抽樣數據,例如PCM數據。

視音頻同步的作用

就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻音頻數據送至系統的顯卡和聲卡播放出來。

如何閱讀官網命令行?

http://ffmpeg.org/documentation.html

可以看到賊多命令行,比如ffmpeg-all

在這裏插入圖片描述
先看下概述,找到感覺
在這裏插入圖片描述
如何查找命令行?

Ctrl+F
在這裏插入圖片描述
在這裏插入圖片描述
當然,金山詞霸等工具少不了

閱讀本文的正確姿勢Ctrl+F

ffmpeg

ffmpeg是一個非常快速的視頻和音頻轉換器,也可以從實時音頻/視頻源抓取信息。

ffmpeg命令的語法結構

ffmpeg [global_options] {[input_file_options] -i input_url} ... 
{[output_file_options] output_url} ... 

一般規則

我們規定,選項應用於下一個指定的文件。因此,順序很重要,這樣纔可以在命令行上多次使用相同的選項。然後將每個選項應用於下一輸入或輸出文件。此規則的例外是全局選項(例如,verbosity級別),應首先指定。

不要混合輸入文件和輸出文件-首先指定所有輸入文件,然後指定所有輸出文件。也不混合屬於不同文件的選項。所有選項僅用於下一個輸入或輸出文件,並在文件之間重置。

輸入參數 -i

ffmpeg讀取由 -i 選項指定的任意數量的輸入“文件”(可以是常規文件、管道、網絡流、設備數據流等),並寫入由輸出url指定的任意數量的輸出“文件”。在命令行中發現的任何不能解釋爲選項的內容都被視爲輸出url。

舉例如下:

#To set the video bitrate of the output file to 64 kbit/s: 
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
#To force the frame rate of the output file to 24 fps: 
ffmpeg -i input.avi -r 24 output.avi
#To force the frame rate of the input file (valid for raw formats only) 
#to 1 fps and the frame rate of the output file to 24 fps: 
ffmpeg -r 1 -i input.m2v -r 24 output.avi

流複製 Stream copy

流複製,需要通過向-codec選項提供複製參數來選擇。它使ffmpeg省略了對指定流的解碼和編碼步驟,因此它只進行解封裝和封裝。它對於更改容器格式或修改容器級元數據非常有用。在這種情況下,上面的圖表將簡化爲:

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

由於沒有解碼或編碼,它非常快,沒有質量損失。然而,由於許多因素,它在某些情況下可能行不通。顯然,應用濾鏡也是不可能的,因爲濾鏡可以處理未壓縮的數據。

流選擇 Stream selection

自動流選擇 Automatic stream selection

如果沒有任何特定輸出文件的映射選項,ffmpeg將檢測輸出格式,以檢測其中可以包含哪種類型的流,即,視頻、音頻和/或字幕。對於每種可接受的流類型,ffmpeg將在可用時從所有輸入中選擇一個流。

它根據以下標準選擇流:·

  • 對於視頻,選擇分辨率最高的流
  • 對於音頻,選擇有最多頻道的流
  • 對於字幕,選擇第一個字幕流,但有一個警告。輸出格式的默認字幕編碼器可以是基於文本的,也可以是基於圖像的,並且只選擇相同類型的字幕流。

在有幾個相同類型的比特率相等的情況下,選擇索引最低的流。無法自動選擇數據流或附件流,只能使用-map將其包括在內。

手動流選擇 Manual stream selection

當使用-map時,該輸出文件中只包含用戶映射的流,當然也有例外的場景。

-map

每個輸入或輸出url原則上可以包含任意數量的不同類型的流(視頻/音頻/字幕/附件/數據)。允許的流數目和/或類型受容器格式的限制。選擇哪些輸入的哪些流進行輸出,要麼自動完成,要麼使用-map選項。

文件選擇和流選擇 [2:3]

若要引用選項中的輸入文件,必須使用它們的索引(基於0的)。例如:第一輸入文件爲0,第二輸入文件爲1等。類似地,文件中的流由它們的索引引用。例如:2:3指第三個輸入文件中的第四個流。

流選擇 -vn/-an/-sn/-dn

ffmpeg爲手動控制每個輸出文件中的流選擇提供了-map選項。用戶可以不使用-map,讓ffmpeg執行自動流選擇,
如下所述。
無論是手動映射還是自動選擇,除了複雜濾波圖的輸出流,選項-vn/-an/-sn/-dn可分別用於跳過包括視頻、音頻、字幕和數據流。

下面的例子說明FFmpeg的流選擇方法的行爲、怪癖和限制

input file 'A.avi'
      stream 0: video 640x360
      stream 1: audio 2 channels
input file 'B.mp4'
      stream 0: video 1920x1080
      stream 1: audio 2 channels
      stream 2: subtitles (text)
      stream 3: audio 5.1 channels
      stream 4: subtitles (text)
input file 'C.mkv'
      stream 0: video 1280x720
      stream 1: audio 2 channels
      stream 2: subtitles (image)
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

指定了三個輸出文件,對於前兩個,無-map選項,因此ffmpeg將自動爲這兩個文件選擇流。

out1.mkv是一個高清格式文件,接受視頻、音頻和字幕流,因此ffmpeg將嘗試選擇每種類型中的一種。對於視頻,它將從b.mp4中選擇流0,因爲它在所有輸入視頻流中具有最高的分辨率。對於音頻,它將從b.mp4中選擇流3,因爲它有最多的頻道。對於字幕,它將從b.mp4中選擇流2,這是a.avib.mp4中的第一個字幕流。

輸出2.wav只接受音頻流,因此只選擇b.mp4中的流3

對於out3.mov,由於設置了-map選項,因此不會出現自動流選擇。-map 1:a選項將從第二個輸入b.mp4中選擇所有音頻流。此輸出文件中不會包含其他流。

對於前兩個輸出,所有包含的流都將被轉碼。所選擇的編碼器將是由每種輸出格式註冊的默認編碼器,這可能與所選輸入流的編解碼器不匹配。

對於第三個輸出,音頻流的codec選項(-c:a)已設置爲複製,因此不會發生或可能發生解碼-濾鏡-編碼操作。所選流的packets編碼數據包從輸入文件中傳輸,然後封裝到輸出文件中。
在這裏插入圖片描述

自動字幕流選擇 automatic subtitles selection

ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv

雖然out1.mkv是一個接受字幕流的高清格式文件,但只能選擇一個視頻和音頻流。C.mkv的字幕流是基於圖像的,mkv 封裝器的默認字幕編碼器是基於文本的,因此字幕的轉碼操作預計會失敗,因此不會選擇流。

但是,在out2.mkv中,命令中指定了字幕編碼器,因此,除了視頻流之外,還選擇了字幕流。out2.mkv-an禁用音頻流的選擇。

不加標籤的濾鏡輸出 unlabeled filtergraph outputs

ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt

這裏使用-filter_complex選項設置了一個濾鏡,它由一個視頻濾鏡組成。overlay濾鏡需要兩個視頻輸入,但沒有指定,因此使用了前兩個可用的視頻流,即a.avic.mkv的視頻流。濾鏡的輸出面板沒有標籤,因此被傳遞到第一個輸出文件out1.mp4。因此,將跳過視頻流的自動選擇,這將選擇b.mp4中的視頻流。具有最多數量頻道的音頻流,即b.mp4中的流3,會被自動選擇。但是沒有選擇字幕流,因爲MP4格式沒有默認的字幕編碼器註冊,而且用戶沒有指定字幕編碼器。

第二個輸出文件out2.srt只接受基於文本的字幕流。因此,儘管可用的第一個字幕流屬於c.mkv,但它是基於圖像的,因此跳過了。選定的流,b.mp4中的流2,是第一個基於文本的字幕流。

帶標籤的濾鏡輸出labeled filtergraph outputs

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex 
"[1:v]hue=s=0[outv];overlay;aresample" \
       -map '[outv]' -an        out1.mp4 \
                                out2.mkv \
       -map '[outv]' -map 1:a:0 out3.mkv

以上命令將失敗,因爲標記爲[outv]的輸出標籤已被映射兩次。不處理任何輸出文件。

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex 
"[1:v]hue=s=0[outv];overlay;aresample" \
       -an        out1.mp4 \
                  out2.mkv \
       -map 1:a:0 out3.mkv

上面的命令也會失敗,因爲色調濾鏡輸出有一個標籤[outv],並且沒有被映射到任何地方。

應修改爲如下命令:

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex 
"[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
        -map '[outv1]' -an        out1.mp4 \
                                  out2.mkv \
        -map '[outv2]' -map 1:a:0 out3.mkv

來自b.mp4的視頻流被髮送到色調濾鏡,其輸出使用分割濾鏡被克隆一次,並且這兩個輸出都有標籤。然後,將每個副本映射到第一和第三輸出文件。

overlay濾鏡需要兩個視頻輸入,使用前兩個未使用的視頻流。這些是來自a.avic.mkv的流。overlay 輸出沒有標籤,因此它被傳遞到第一個輸出文件out1.mp4,而不考慮-map選項的存在。

aresample濾鏡被應用給第一個未使用的音頻流,即a.avi的音頻流。因爲這個濾鏡輸出也沒有標籤,所以它也被映射到第一個輸出文件。-an選項會抑制音頻流的自動或手動選擇,而不是從濾鏡獲取輸出。這兩個映射流都應在輸出1.mp4中的映射流之前排序。

映射到out2.mkv的視頻、音頻和字幕流完全由自動流選擇決定。

out3.mkv由來自色調濾鏡克隆的視頻輸出和來自b.mp4的第一個音頻流組成。

選項Options

流說明符 Stream specifiers

有些選項應用於每個流,例如比bitrate比特率 或編解碼器codec。流說明符用於精確指定給定選項所屬的流。流說明符是通常附加到選項名稱並由冒號分隔的字符串。例如a:1 ac3包含與第二音頻流匹配的a:1流說明符。因此,它將爲第二音頻流選擇ac3編解碼器。流說明符可以匹配多個流,以便將該選項應用到所有流。例如-b:a 128K匹配所有音頻流。空的流說明符匹配所有流。例如,-codec copy-codec: copy複製所有流,而無需重新編碼。

流說明符的可能形式是:

流索引 stream_index

將流與索引匹配。例如:-threads:1 4將第二流的線程數量設置爲4。如果使用stream_index作爲附加的流說明符(見下文),那麼它將從匹配的流中選擇流號stream_index。流編號是基於libavformat 檢測到的流的順序,除非 program ID也被指定,在這種情況下,它是基於程序中流的排序。

stream_type[:additional_stream_specifier]

stream_type是以下內容之一:vV,用於視頻,a用於音頻,s用於字幕,d用於數據,而t用於附件。v匹配所有視頻流,V僅匹配未連接圖片、視頻縮略圖或封面藝術的視頻流。如果使用了附加流說明符,則它匹配具有和此類型以及附加流說明符匹配的流。否則,它與指定類型的所有流匹配。

通用選項 Generic options

這些選項在ff*工具上都可使用。
-L
顯示版權信息
-h-?-help--help[arg]
顯示幫助信息。可以指定可選參數來打印有關特定項目的幫助。如果未指定參數,則僅顯示基本(非高級)工具選項。

arg的可能值包括:

long

除了基本工具選項外,還可以打印高級工具選項。

full

打印完整的選項列表,包括encoders編碼器、decoders解碼器、demuxers解封裝器、muxers封裝器、濾鏡等的共享和私有選項。

decoder=decoder_name

打印指定解碼器的詳細信息。使用-decoders選項打印所有解碼器的列表。

encoder=encoder_name

打印指定編碼器的詳細信息。使用-encoders選項打印所有編碼器。

demuxer=demuxer_name

打印指定demuxer 的詳細信息。使用-format選項打印所有demuxersmuxers

muxer=muxer_name

打印指定muxer 的詳細信息。使用-format選項打印所有demuxersmuxers

filter=filter_name

打印指定濾鏡的詳細信息。使用-filters選項打印所有濾鏡。

bsf=bitstream_filter_name

打印指定位流濾鏡的詳細信息。使用-bsfs選項打印所有位流濾鏡。

-version

顯示版本信息

-formats

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

-demuxers

顯示可用的demuxers解封裝器

-muxers

顯示可用的muxers封裝器

-devices

顯示可用的設備devices

-codecs

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

-decoders

顯示可用的解碼器decoders

-encoders

顯示可用的編碼器encoders

-bsfs

顯示可用的位流濾鏡bitstream filters

-protocols

顯示可用的協議

-filters

顯示libavfilter 中可用的濾鏡

-pix_fmts

顯示可用的像素格式

-sample_fmts

顯示可用的採樣格式。

-layouts

顯示音頻通道名稱和標準音頻通道佈局。

-colors

顯示可識別的顏色名稱。

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

顯示輸入設備的自動檢測源。一些設備可以提供無法自動檢測的依賴於系統的源名稱。返回的列表不一定總是完整的。

ffmpeg -sources pulse,server=192.168.0.4

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

顯示輸出設備的自動檢測接收器。有些設備可能提供無法自動檢測到依賴於系統的接收器名稱。返回的列表不一定是完整的。

ffmpeg -sinks pulse,server=192.168.0.4

-loglevel [flags+]loglevel | -v [flags+]loglevel

設置由庫使用的日誌級別和標誌。

可選標誌前綴可以由以下值組成:

repeat

Indicates that repeated log output should not be compressed to the first 
line and the "Last message repeated n times" line will be omitted. 

指示不應將重複日誌輸出壓縮到第一行,並且…

level

指示日誌輸出應在每條消息行中添加一個[level]前綴。這可以用作日誌着色,例如,當將日誌轉儲到文件中時。

Flags can also be used alone by adding a ’+/-’ prefix to set/reset a single flag without affecting 
other flags or changing loglevel. When setting both flags and loglevel, a ’+’ separator 
is expected between the last flags value and before loglevel. 

也可以通過添加+/-前綴來單獨使用標誌,以設置/重置單個標誌,而不影響其他標誌或更改日誌級別。設置“標誌”和“LogLevel”時,在最後一個標誌值和LogLevel之前都會有一個+分隔符。

loglevel 是字符串或包含以下值之一的數字:

quiet, -8

不輸出任何信息

panic, 0

只顯示可能導致進程崩潰的致命錯誤,例如斷言失敗。目前沒有用於任何地方。

fatal, 8

只顯示致命的錯誤。這些錯誤出現在進程絕對不能繼續下去的時候。

error, 16

顯示所有錯誤,包括可以從其中恢復的錯誤。

warning, 24

顯示所有警告和錯誤。將顯示可能發生的不正確或意外事件有關的任何消息。

info, 32

在處理期間顯示信息級別的消息,這是默認值。

verbose, 40

和信息級別一樣,但是更冗長。

debug, 48

顯示所有內容,包括調試信息。

例如,要啓用重複的日誌輸出,添加級別前綴,並將日誌級別設置爲verbose

ffmpeg -loglevel repeat+level+verbose -i input output

在不影響級別前綴標誌或日誌級別的當前狀態的情況下啓用重複日誌輸出的另一個示例:

ffmpeg [...] -loglevel +repeat

默認情況下,程序記錄到stderr。如果終端支持着色,則使用顏色標記錯誤和警告。可以禁用日誌着色,設置環境變量AV_LOG_FORCE_NOCOLORNO_COLOR,也可以強制設置環境變量AV_LOG_FORCE_COLOR。不推薦使用環境變量NO_COLOR,並將在以後的ffmpeg版本中刪除。

AVOptions

這些選項由libavformatlibavdevicelibavcodec庫直接提供。要查看可用的AVOptions列表,請使用-help選項。它們分爲兩類:

通用選項generic

可以爲任何文件格式、編解碼器或設備設置這些選項。通用選項在用於文件格式/設備的AVFormatContext選項下,並在編解碼器的AVCodecContext上下文選項下列出。

私有選項private

這些選項特定於給定的文件格式、設備或編解碼器。相應的文件格式/設備/編解碼器下列出了私有選項。

例如,要將id3v2.3頭而不是默認的id3v2.4寫入mp3文件,使用mp3 muxer的id3v2_version私有選項:

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

所有編解碼器的AVOptions都是應用於每個流的,因此應該附加一個流說明符:

ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k 
-ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4

在上面的例子中,一個多聲道音頻流被映射兩次以便輸出。第一個實例由編碼器ac3指定比特率640 k編碼。第二個實例被降至2個信道,並使用編碼器aac編碼。使用輸出流的絕對索引爲它指定128 k的比特率。

注意:-nooption語法不能用於布爾選項,請使用 -option 0/-option 1.

注意:通過在選項名稱前面加上v/a/s來指定每個流的AVOptions的舊的無文檔化方法現在已經過時,並將很快被刪除。

主要選項 Main options

-f fmt (input/output)

強制輸入或輸出文件格式。通常自動檢測輸入文件的格式,並從輸出文件的文件擴展名中猜測格式,因此在大多數情況下不需要此選項。

-i url (input)

輸入文件的url

-y (global)

強制覆蓋輸出文件

-n (global)

不要覆蓋輸出文件,如果指定的輸出文件已經存在,則立即退出。

-stream_loop number (input)

設置輸入流的循環次數。循環0表示沒有循環,循環-1表示無限循環.

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

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

爲一個或多個流選擇編碼器(在輸出文件之前使用時)或解碼器(在輸入文件之前使用)。codec或者c填值解碼器/編碼器的名稱,codec或者c填值copy,表示(僅輸出),以指示流不被重新編碼。

舉例:

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

用libx264對所有視頻流進行編碼,並複製所有音頻流。

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

複製所有流,除了將用libx264編碼的第2個視頻流和將用libvorbis編碼的第138個音頻流。

-t duration (input/output)

-to position (input/output)

當用作輸入選項(在-i之前)時,限制從輸入文件讀取數據的持續時間。當用作輸出選項時(在輸出url之前),在輸出持續時間達到持續時間後停止寫入輸出。duration 必須是時間期限規範,請參閱(ffmpeg-utils)在ffmpeg-utils(1)手冊中的時間duration 部分。-to-t是相互排斥的,-t有優先權。

-fs limit_size (output)

設置文件大小限制,以字節表示。超過限制後,不再寫入更多的字節塊。輸出文件的大小略大於請求的文件大小。

-ss position (input/output)

當用作輸入選項(-i之前)時,在此輸入文件中定位位置。請注意,在大多數格式中,不可能精確地尋找,因此ffmpeg將在位置之前定位到最接近的點。當啓用轉碼transcoding 和-精確定位-accurate_seek(默認)時,seek pointposition 之間的這個額外段將被解碼和丟棄。當做流複製或當使用 -noaccurate_seek 的尋求時,它將被保存。

當用作輸出選項時(在輸出url之前),解碼但丟棄輸入,直到時間戳到達位置。位置必須是time duration規範,請參閱(ffmpeg-utils)在ffmpeg-utils(1)手冊中的time duration部分。

-sseof position (input)

Like the -ss option but relative to the "end of file". 
That is negative values are earlier in the file, 0 is at EOF. 

-ss選項類似,但相對於"文件結束"。這是文件中較早的負值,0EOF

-itsoffset offset (input)

設置輸入時間偏移。偏移量必須是 time duration 規範,參見FFmpeg-utils(1)手冊中的 time duration 部分。將偏移添加到輸入文件的時間戳中。指定正偏移意味着對應的流被延遲指定的持續時間。

-itsscale scale (input,per-stream)

重新調整輸入時間戳。scale 用浮點數。

-timestamp date (output)

在文件格式容器中設置記錄時間戳。日期必須是日期規格,請參閱FFmpeg-utils(1)手冊中的日期部分。

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

設置元數據 key/value對。
可以給出可選的元數據_說明符以在流、章節或程序上設置元數據。有關詳細信息,請參見
-map_metadata文檔。
此選項將覆蓋帶有-map_metadata的元數據集。也可以通過使用空的值來刪除元數據。
例如,用於在輸出文件中設置標題:

ffmpeg -i in.avi -metadata title="my title" out.flv

要設置第一個音頻流的語言,請執行以下操作:

ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

-dn (input/output)

作爲輸入選項,阻止文件的所有數據流被過濾或被自動選擇或映射到任何輸出。請參見-discard選項以單獨禁用流。作爲輸出選項,禁用數據,即任何數據流的自動選擇或映射。有關完整的手動控制,請參見-map選項。

-frame:d

設置要輸出的數據幀數。

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

在framecount 個幀之後停止寫入流。

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

創建指定的濾鏡,並使用它來過濾流。必須具有相同類型的流的單個輸入和單個輸出。。有關filtergraph 語法的詳細信息,請參見FFmpeg-filter手冊。如果要創建具有多個輸入和/或輸出的filtergraphs,請參見-filter_complex選項。

-vf filtergraph (output)

創建filtergraph ,並使用它來過濾流。這是-filter:v的別名,請參見-filter選項。

表達式賦值 Expression Evaluation

當計算算術表達式的值時,FFmpeg使用通過libavutil/eval.h接口實現的內部公式求值程序。表達式可以包含一元二元運算符常量函數。兩個表達式expr1expr2 可以合併以形成另一個表達式"expr1;expr2 "expr1expr2 依次進行計算,新的表達式計算爲expr2的值。二元運算符:+、-、*、/、^。一元運算符:+,-

函數:

abs(x)

計算X的絕對值。

acos(x)

計算x的反餘弦

asin(x)

計算x的反正弦

atan(x)

計算X的反正切。

atan2(x, y)

Compute principal value of the arc tangent of y/x. 

between(x, min, max)

如果min<=x<=max,則返回1,否則返回0

bitand(x, y)

bitor(x, y)

XY上計算按位和/或運算。在執行按位操作之前,將XY的求值結果轉換爲整數。請注意,轉換爲整數再轉換回浮點會失去精度。注意大數的意外結果(2^53和更大)。

ceil(expr)

將表達式expr的值向上舍入到最近的整數。例如,"ceil(1.5)“是”2.0"。

clip(x, min, max)

Return the value of x clipped between min and max. 

cos(x)

計算X的餘弦。

cosh(x)

Compute hyperbolic cosine of x. 

eq(x, y)

如果XY相等,則返回1,否則返回0

exp(x)

Compute exponential of x (with base e, the Euler’s number). 

計算x的指數(以e爲基數,歐拉數)。

floor(expr)

將表達式expr 的值向下舍入到最近的整數。例如,“floor(-1.5)”爲“-2.0”。

gauss(x)

Compute Gauss function of x, corresponding to exp(-x*x/2) / sqrt(2*PI). 

計算x的高斯函數,對應於exp(-x*x/2)/sqrt(2*PI)

gcd(x, y)

Return the greatest common divisor of x and y. If both x and y are 0 or either 
or both are less than zero then behavior is undefined. 

返回xy的最大公因子。如果xy都是0,或者兩者都小於0,則…。

gt(x, y)

如果x>y,則返回1,否則爲0

gte(x, y)

如果x>=y,則返回1,否則返回0

hypot(x, y)

此函數類似於同名的c函數;它返回“sqrt(x*xy*y)”,即直角邊長度爲xy的直角三角形的斜邊長度,或點(x,y)原點的距離。

if(x, y)

Evaluate x, and if the result is non-zero return the result of the evaluation of y, 
return 0 otherwise. 

if(x, y, z)

Evaluate x, and if the result is non-zero return the evaluation result of y, 
otherwise the evaluation result of z. 

ifnot(x, y)

Evaluate x, and if the result is zero return the result of the evaluation of y, 
return 0 otherwise. 

ifnot(x, y, z)

Evaluate x, and if the result is zero return the evaluation result of y, 
otherwise the evaluation result of z. 

isinf(x)

如果x+/-無窮大,則返回1.0,否則返回0.0

isnan(x)

如果XNaN(not a number非數字),則返回1.0,否則爲0.0

ld(var)

Load the value of the internal variable with number var, which was previously stored with
st(var, expr). The function returns the loaded value. 

lerp(x, y, z)

Return linear interpolation between x and y by amount of z. 

xy之間通過z的量返回線性插值。

log(x)

計算x的自然對數。

lt(x, y)

如果x<y,則返回1,否則爲0

lte(x, y)

如果x<=y,則返回1,否則返回0

max(x, y)

返回xy中的最大值。

min(x, y)

返回xy中的最小值。

mod(x, y)

計算x%y

not(expr)

如果expr0,則返回1.0,否則返回0.0

pow(x, y)

計算x^y

print(t)

print(t, l)

loglevel 打印表達式t的值。如果未指定l,則使用默認日誌級別。返回打印的表達式的值。

random(x)

Return a pseudo random value between 0.0 and 1.0. 
x is the index of the internal variable which will be used to save the seed/state. 

返回0.01.0之間的僞隨機值。

round(expr)

將表達式expr的值四捨五入。例如,"round(1.5)“是”2.0"。

sgn(x)

Compute sign of x. 

sin(x)

計算x的正弦。

sinh(x)

Compute hyperbolic sine of x. 

tan(x)

計算x的正切

tanh(x)

Compute hyperbolic tangent of x. 

在這裏插入圖片描述
本文將持續更新,敬請關注

歡迎分享、轉載、聯繫、指正、批評、撕逼

Github:https://github.com/AnJiaoDe

簡書:https://www.jianshu.com/u/b8159d455c69

CSDN:https://blog.csdn.net/confusing_awakening

ffmpeg入門教程:https://www.jianshu.com/p/042c7847bd8a

微信公衆號
這裏寫圖片描述

QQ羣

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章