class ffmpeg.Stream(upstream_node,upstream_label,node_types,upstream_selector=None )
表示上游節(jié)點的傳出邊緣美旧;可以用來創(chuàng)建更多的下游節(jié)點。
某些
ffmpeg
濾波器會丟棄音頻流贬墩,因此必須注意在最終輸出中保留音頻榴嗅。.audio
和.video
運算符可用于引用流的音頻/視頻部分,以便可以單獨處理它們陶舞,然后在以后的管道中重新組合它們嗽测。這種困境是ffmpeg固有的,ffmpeg-python
試圖遠離肿孵,而用戶可以參考官方ffmpeg
文檔唠粥,了解為什么某些過濾器會掉落音頻。
-
屬性
audio
選擇流的音頻部分停做。
stream.audio
是stream['a']
的簡寫晤愧。獨立處理流的音頻和視頻部分:
input = ffmpeg.input('in.mp4')
audio = input.audio.filter("aecho", 0.8, 0.9, 1000, 0.3)
video = input.video.hflip()
out = ffmpeg.output(audio, video, 'out.mp4')
- 屬性
video
選擇流的視頻部分。
stream.video是 的簡寫stream['v']蛉腌。
例子
獨立處理流的音頻和視頻部分:
input = ffmpeg.input('in.mp4')
audio = input.audio.filter("aecho", 0.8, 0.9, 1000, 0.3)
video = input.video.hflip()
out = ffmpeg.output(audio, video, 'out.mp4')
ffmpeg.input( filename , **kwargs )
輸入文件 URL (ffmpeg -i option)
任何提供的 kwargs 都會逐字傳遞給 ffmpeg(例如 t=20官份、f='mp4'、acodec='pcm'等)烙丛。
要告訴 ffmpeg 從 stdin 讀取舅巷,請使用 pipe:作為文件名。
ffmpeg.merge_outputs(* streams )
在一個 ffmpeg 命令行中包含所有給定的輸出
ffmpeg.output( streams_and_filename* , kwargs )
輸出文件地址
-
句法:
ffmpeg.output(stream1[, stream2, stream3…], 文件名, ffmpeg_args)
任何提供的關鍵字參數(shù)被傳遞給ffmpeg的逐字(例如 t=20河咽,f='mp4'钠右,acodec='pcm',vcodec='rawvideo'忘蟹,等等)飒房。一些關鍵字參數(shù)經過特殊處理,如下所示寒瓦。
-
參數(shù):
video_bitrate – 的參數(shù)-b:v情屹,例如video_bitrate=1000。
audio_bitrate – 的參數(shù)-b:a杂腰,例如audio_bitrate=200垃你。
format –-f參數(shù)的別名,例如format='mp4' (等價于f='mp4')。
如果提供了多個流惜颇,它們將映射到相同的輸出皆刺。
要告訴 ffmpeg 寫入標準輸出牌捷,請pipe:用作文件名脆霎。
ffmpeg.overwrite_output(stream)
不詢問就覆蓋輸出文件(ffmpeg -y 選項)
ffmpeg.probe( filename , cmd='ffprobe' , **kwargs )
在指定文件上運行 ffprobe 并返回輸出的 JSON 表示。
-
加注:
ffmpeg.Error – 如果 ffprobe 返回非零退出代碼眷茁,Error則返回an并帶有通用錯誤消息锨亏〕赵梗可以通過訪問stderr異常的屬性來檢索 stderr 輸出 。*
ffmpeg.compile( stream_spec , cmd='ffmpeg' , overwrite_output=False )
構建用于調用 ffmpeg 的命令行器予。
該run()函數(shù)使用它來構建命令行參數(shù)并且在大多數(shù)情況下應該可以工作浪藻,但是直接調用這個函數(shù)對于調試或者無論出于何種原因需要手動調用 ffmpeg 很有用。
這與調用get_args()相同乾翔,只是它還包括ffmpeg命令作為第一個參數(shù)爱葵。
異常ffmpeg.Error(cmd,stdout反浓,stderr )
ffmpeg.get_args( stream_spec , overwrite_output=False )
構建要傳遞給 ffmpeg 的命令行參數(shù)萌丈。
ffmpeg.run( stream_spec , cmd='ffmpeg' , capture_stdout=False , capture_stderr=False , input=None , quiet=False , overwrite_output=False )
為提供的節(jié)點圖調用 ffmpeg
。
參數(shù)
capture_stdout
– 如果為 True雷则,則捕獲標準輸出(與pipe:ffmpeg 輸出一起使用 )辆雾。capture_stderr
– 如果為真,則捕獲標準錯誤月劈。quiet
– 設置capture_stdout和 的簡寫capture_stderr乾颁。輸入- 要發(fā)送到標準輸入的文本(與pipe: ffmpeg 輸入一起使用)
**kwargs – 傳遞給get_args()(例如 overwrite_output=True)的關鍵字參數(shù)。
返回: (out, err) 元組艺栈,包含捕獲的 stdout 和 stderr 數(shù)據(jù)。
ffmpeg.run_async( stream_spec , cmd='ffmpeg' , pipe_stdin=False , pipe_stdout=False , pipe_stderr=False , quiet=False , overwrite_output=False )
為提供的節(jié)點圖異步調用 ffmpeg湾盒。
參數(shù)
- pipe_stdin – 如果為 True湿右,則將管道連接到子進程標準輸入(與pipe:ffmpeg 輸入一起使用)。
- pipe_stdout – 如果為 True罚勾,則將管道連接到子進程stdout(與pipe:ffmpeg 輸出一起使用)毅人。
- pipe_stderr – 如果為 True,則將管道連接到子進程stderr尖殃。
- quiet – 設置capture_stdout和 的 簡寫capture_stderr丈莺。
- **kwargs – 傳遞給get_args()(例如 overwrite_output=True)的關鍵字參數(shù)。
例子
運行和流式輸入:
process = (
ffmpeg
.input('pipe:', format='rawvideo', pix_fmt='rgb24', s='*{}*x*{}*'.format(width, height))
.output(out_filename, pix_fmt='yuv420p')
.overwrite_output()
.run_async(pipe_stdin=**True**)
)
process.communicate(input=input_data)
運行并捕獲輸出:
process = (
ffmpeg
.input(in_filename)
.output('pipe':, format='rawvideo', pix_fmt='rgb24')
.run_async(pipe_stdout=**True**, pipe_stderr=**True**)
)
out, err = process.communicate()
使用 numpy 逐幀處理視頻:
process1 = (
ffmpeg
.input(in_filename)
.output('pipe:', format='rawvideo', pix_fmt='rgb24')
.run_async(pipe_stdout=True)
)
process2 = (
ffmpeg
.input('pipe:', format='rawvideo', pix_fmt='rgb24', s='{}x{}'.format(width, height))
.output(out_filename, pix_fmt='yuv420p')
.overwrite_output()
.run_async(pipe_stdin=True)
)
while True:
in_bytes = process1.stdout.read(width * height * 3)
if not in_bytes:
break
in_frame = (
np
.frombuffer(in_bytes, np.uint8)
.reshape([height, width, 3])
)
out_frame = in_frame * 0.3
process2.stdin.write(frame.astype(np.uint8).tobytes())
process2.stdin.close()
process1.wait()
process2.wait()
ffmpeg.view( stream_spec , detail=False , filename=None , pipe=False , **kwargs )
ffmpeg.colorchannelmixer(stream送丰,args缔俄,kwargs* )
通過重新混合顏色通道來調整視頻輸入幀。
ffmpeg.concat( * Streams , ** kwargs )
連接音頻和視頻流,將它們一個接一個地連接在一起俐载。
篩選器適用于同步視頻和音頻流的片段蟹略。所有段必須具有每種類型的相同數(shù)量的流,這也是輸出時的流數(shù)遏佣。
參數(shù)
- unsafe – 激活不安全模式:如果段具有不同的格式挖炬,則不會失敗。
- 由于各種原因状婶,包括編解碼器幀大小或草率創(chuàng)作意敛,相關流并不總是具有完全相同的持續(xù)時間。出于這個原因膛虫,相關的同步流(例如視頻及其音軌)應該立即連接起來草姻。concat 過濾器將使用每個片段中最長流的持續(xù)時間(最后一個除外),并在必要時用靜音填充較短的音頻流走敌。
- 要使此過濾器正常工作碴倾,所有段必須從時間戳 0 開始。
- 所有對應的流必須在所有段中具有相同的參數(shù)掉丽;過濾系統(tǒng)會自動為視頻流選擇常用的像素格式跌榔,為音頻流選擇常用的采樣格式、采樣率和通道布局捶障,但其他設置僧须,如分辨率,必須由用戶明確轉換项炼。
- 不同的幀率是可以接受的担平,但會導致輸出時的幀率可變;一定要配置輸出文件來處理它锭部。
ffmpeg.crop(stream, x , y ,width,height, **kwargs )
裁剪輸入視頻暂论。
參數(shù)
x – 輸出視頻左邊緣在輸入視頻中的水平位置。
y – 輸出視頻上邊緣在輸入視頻中的垂直位置拌禾。
width – 輸出視頻的寬度取胎。必須大于 0。
heigth - 輸出視頻的高度湃窍。必須大于 0闻蛀。
ffmpeg.drawbox(stream,x您市,y觉痛,width,height茵休,color薪棒, thickness =None手蝎,**kwargs )
在輸入圖像上繪制一個彩色框。
參數(shù)
x – 指定框左上角 x 坐標的表達式盗尸。它默認為 0柑船。
y – 指定框左上角 y 坐標的表達式。它默認為 0泼各。
width – 指定框的寬度鞍时;如果 0 解釋為輸入寬度。它默認為 0扣蜻。
heigth – 指定盒子的高度逆巍;如果 0 解釋為輸入高度。它默認為 0莽使。
color - 指定要寫入的框的顏色锐极。有關此選項的一般語法,請查看 ffmpeg-utils 手冊中的“顏色”部分芳肌。如果使用 特殊值反轉灵再,則框邊緣顏色與具有反轉亮度的視頻相同。
thickness ——設置盒子邊緣厚度的表達式亿笤。默認值為 3翎迁。
w – 的別名width。
h – 的別名height净薛。
c – 的別名color汪榔。
t – 的別名thickness。
ffmpeg.drawtext(stream, text=None , x=0 , y=0 , escape_text=True , **kwargs )
使用 libfreetype 庫從視頻頂部的指定文件中繪制文本字符串或文本肃拜。
要啟用此過濾器的編譯痴腌,您需要使用--enable-libfreetype
. 要啟用默認字體回退和字體選項,您需要使用--enable-libfontconfig
. 要啟用text_shaping
選項燃领,您需要使用--enable-libfribidi
參數(shù)
· box - 用于使用背景顏色在文本周圍繪制一個框士聪。該值必須是 1(啟用)或 0(禁用)∶捅危框的默認值為 0戚嗅。
· boxborderw – 使用 boxcolor 設置要在框周圍繪制的邊框寬度。boxborderw 的默認值為 0枢舶。
· boxcolor - 用于在文本周圍繪制框的顏色。有關此選項的語法替久,請查看 ffmpeg-utils 手冊中的“顏色”部分凉泄。 boxcolor 的默認值為“white”。
· line_spacing – 使用 box 設置要在框周圍繪制的邊框的行間距(以像素為單位)蚯根。line_spacing 的默認值為 0后众。
· borderw – 使用邊框顏色設置要在文本周圍繪制的邊框寬度胀糜。邊框的默認值為 0。
· bordercolor – 設置用于在文本周圍繪制邊框的顏色蒂誉。有關此選項的語法教藻,請查看 ffmpeg-utils 手冊中的“顏色”部分。邊框顏色的默認值為“黑色”右锨。
· 擴展- 選擇文本的擴展方式括堤。可以是 none绍移、strftime(已棄用)或 normal(默認)悄窃。有關詳細信息,請參閱下面的文本擴展部分蹂窖。
· basetime – 設置計數(shù)的開始時間轧抗。值以微秒為單位。僅適用于已棄用的 strftime 擴展模式瞬测。要在正常擴展模式下進行模擬横媚,請使用 pts 函數(shù),提供開始時間(以秒為單位)作為第二個參數(shù)月趟。
· fix_bounds - 如果為 true灯蝴,檢查并修復文本坐標以避免剪切。
· fontcolor - 用于繪制字體的顏色狮斗。有關此選項的語法绽乔,請查看 ffmpeg-utils 手冊中的“顏色”部分。fontcolor 的默認值為“黑色”碳褒。
· fontcolor_expr – 與文本相同的擴展字符串以獲得動態(tài)字體顏色值折砸。默認情況下,此選項具有空值并且不被處理沙峻。設置此選項時睦授,它會覆蓋 fontcolor 選項。
· font - 用于繪制文本的字體系列摔寨。默認情況下無去枷。
· fontfile – 用于繪制文本的字體文件。必須包含路徑是复。如果禁用了 fontconfig 支持删顶,則此參數(shù)是必需的。
· alpha – 繪制應用 alpha 混合的文本淑廊。該值可以是介于 0.0 和 1.0 之間的數(shù)字逗余。該表達式也接受相同的變量 x、y季惩。默認值為 1录粱。請參閱 fontcolor_expr腻格。
· fontsize – 用于繪制文本的字體大小。字體大小的默認值為 16啥繁。
· text_shaping – 如果設置為 1菜职,則在繪制文本之前嘗試對文本進行整形(例如,反轉從右到左文本的順序并加入阿拉伯字符)旗闽。否則酬核,只需按照給定的方式繪制文本。默認為 1(如果支持)宪睹。
· ft_load_flags –用于加載字體的標志愁茁。這些標志映射了 libfreetype 支持的相應標志,并且是以下值的組合:
default亭病、no_scale鹅很、no_hinting、 render罪帖、 no_bitmap促煮、 vertical_layout、 force_autohint整袁、crop_bitmap菠齿、pedantic、 ignore_global_advance_width坐昙、no_recurse绳匀、 ignore_transform、 monochrome炸客、 linear_design疾棵、 no_autohint
默認值為“默認”。有關更多信息痹仙,請參閱 FT_LOAD_* libfreetype 標志的文檔是尔。
· shadowcolor – 用于在已繪制文本后面繪制陰影的顏色。有關此選項的語法开仰,請查看 ffmpeg-utils 手冊中的“顏色”部分拟枚。shadowcolor 的默認值為“黑色”。
· shadowx – 文本陰影位置相對于文本位置的 x 偏移量众弓。它可以是正值或負值恩溅。默認值為“0”。
· shadowy – 文本陰影位置相對于文本位置的 y 偏移量谓娃。它可以是正值或負值脚乡。默認值為“0”。
· start_number – n/frame_num 變量的起始幀號傻粘。默認值為“0”每窖。
· tabsize - 用于呈現(xiàn)選項卡的空格數(shù)大小。默認值為 4弦悉。
· timecode – 以“hh:mm:ss[:;.]ff”格式設置初始時間碼表示窒典。它可以帶或不帶文本參數(shù)使用。必須指定 timecode_rate 選項稽莉。
· rate – 設置時間碼幀率(僅限時間碼)瀑志。
· timecode_rate – 的別名rate。
· r – 的別名rate污秆。
· tc24hmax – 如果設置為 1劈猪,時間碼選項的輸出將在 24 小時左右回繞。默認值為 0(禁用)良拼。
· text -- 要繪制的文本字符串战得。文本必須是 UTF-8 編碼字符序列。如果沒有使用參數(shù) textfile 指定文件庸推,則此參數(shù)是必需的常侦。
· textfile – 包含要繪制的文本的文本文件。文本必須是 UTF-8 編碼字符序列贬媒。如果沒有使用參數(shù) text 指定文本字符串聋亡,則此參數(shù)是必需的。如果同時指定了 text 和 textfile际乘,則會引發(fā)錯誤坡倔。
· reload – 如果設置為 1,文本文件將在每一幀之前重新加載脖含。一定要自動更新它罪塔,否則它可能會被部分讀取,甚至失敗器赞。
· x – 指定將在視頻幀內繪制文本的偏移量的表達式垢袱。它相對于輸出圖像的左邊框。默認值為“0”港柜。
· y - 指定將在視頻幀內繪制文本的偏移量的表達式请契。它相對于輸出圖像的上邊框。默認值為“0”夏醉。有關接受的常量和函數(shù)的列表爽锥,請參見下文。
表達式常量:
x 和 y 的參數(shù)是包含以下常量和函數(shù)的表達式:
· dar:輸入顯示縱橫比畔柔,同 (w / h) * sar
· hsub:水平色度子樣本值氯夷。例如,對于像素格式“yuv422p”靶擦,hsub 為 2腮考,vsub 為 1雇毫。
· vsub:垂直色度子樣本值。例如踩蔚,對于像素格式“yuv422p”棚放,hsub 為 2,vsub 為 1馅闽。
· line_h:每個文本行的高度
· lh:別名為line_h.
· main_h:輸入高度
· h: 的別名main_h飘蚯。
· H: 的別名main_h。
· main_w:輸入寬度
· w: 的別名main_w福也。
· W: 的別名main_w局骤。
· ascent:對于所有渲染的字形,從基線到用于放置字形輪廓點的最高/上網格坐標的最大距離暴凑。這是一個正值峦甩,因為網格的 Y 軸向上。
· max_glyph_a: 的別名ascent搬设。
· 下降:對于所有渲染的字形穴店,從基線到用于放置字形輪廓點的最低網格坐標的最大距離。由于網格的方向拿穴,這是一個負值泣洞,Y 軸向上。
· max_glyph_d: 的別名descent默色。
· max_glyph_h:最大字形高度球凰,即渲染文本中包含的所有字形的最大高度,相當于上升-下降腿宰。
· max_glyph_w:最大字形寬度呕诉,即渲染文本中包含的所有字形的最大寬度。
· n:輸入幀數(shù)吃度,從0開始
· rand(min, max):返回一個包含在 min 和 max 之間的隨機數(shù)
· sar:輸入樣本縱橫比甩挫。
· t:時間戳,以秒為單位椿每,如果輸入時間戳未知伊者,則為 NAN
· text_h:渲染文本的高度
· th: 的別名text_h。
· text_w:渲染文本的寬度
· tw: 的別名text_w间护。
· x:繪制文本的 x 偏移坐標亦渗。
· y:繪制文本的 y 偏移坐標。
這些參數(shù)允許 x 和 y 表達式相互引用汁尺,因此您可以例如指定 y=x/dar.
ffmpeg.filter( stream_spec , filter_name , args* , kwargs )
應用自定義過濾器法精。
filter通常由更高級別的過濾器函數(shù)使用,例如hflip
,但如果缺少過濾器實現(xiàn)ffmpeg-python
搂蜓,您可以filter
直接調用以ffmpeg-python
將過濾器名稱和參數(shù)逐字傳遞給ffmpeg
狼荞。
參數(shù)
-
stream_spec
– 流、流列表或標簽到流字典映射 -
filter_name
– ffmpeg 過濾器名稱帮碰,例如colorchannelmixer
-
*args
– 逐字傳遞給 ffmpeg 的 args 列表 -
**kwargs
– 逐字傳遞給 ffmpeg 的關鍵字參數(shù)列表
函數(shù)名稱后綴_是為了避免與標準pythonfilter
函數(shù)混淆粘秆。
例子
ffmpeg.input('in.mp4').filter('hflip').output('out.mp4').run()
ffmpeg.filter_( stream_spec , filter_name , args* , kwargs )
替代名稱filter
,以免與內置的pythonfilter
運算符沖突收毫。
ffmpeg.filter_multi_output( stream_spec , filter_name , args* , kwargs )
應用具有一個或多個輸出的自定義過濾器。
這filter
與過濾器可以產生多個輸出相同殷勘。
要引用輸出流此再,請使用.stream
運算符或括號簡寫:
例子
split = ffmpeg.input('in.mp4').filter_multi_output('split') split0 = split.stream(0) split1 = split[1] ffmpeg.concat(split0, split1).output('out.mp4').run()
ffmpeg.hflip(stream)
水平翻轉輸入視頻。
ffmpeg.hue(stream玲销,**kwargs )
修改輸入的色調和/或飽和度输拇。
參數(shù)
h – 將色調角度指定為度數(shù)。它接受一個表達式贤斜,默認為“0”策吠。
s – 在 [-10,10] 范圍內指定飽和度。它接受一個表達式并默認為“1”瘩绒。
H – 將色調角度指定為弧度數(shù)猴抹。它接受一個表達式,默認為“0”锁荔。
b – 在 [-10,10] 范圍內指定亮度蟀给。它接受一個表達式并默認為“0”。
ffmpeg.overlay( main_parent_node , overlay_parent_node , eof_action='repeat' , **kwargs )
將一個視頻疊加在另一個視頻之上阳堕。
參數(shù)
x
– 設置主視頻上疊加視頻的 x 坐標表達式跋理。默認值為0。如果表達式無效恬总,則將其設置為一個巨大的值(意味著覆蓋不會顯示在輸出可見區(qū)域內)前普。y
– 設置主視頻上疊加視頻的 y 坐標表達式。默認值為0壹堰。如果表達式無效拭卿,則將其設置為一個巨大的值(意味著覆蓋不會顯示在輸出可見區(qū)域內)。-
eof_action
–在輔助輸入上遇到 EOF 時要采取的操作缀旁;它接受以下值之一:repeat
:重復最后一幀(默認)记劈。endall
: 結束兩個流。pass
: 通過主輸入并巍。
-
eval –
在計算 x 和 y 的表達式時設置目木。它接受以下值:
init:僅在過濾器初始化期間或命令執(zhí)行時評估表達式一次處理
frame: 評估每個傳入幀的表達式
默認值為frame。
shortest
– 如果設置為 1,則在最短輸入終止時強制輸出終止刽射。默認值為 0军拟。format –
設置輸出視頻的格式。它接受以下值:yuv420: 強制 YUV420 輸出
yuv422: 強制 YUV422 輸出
yuv444: 強制 YUV444 輸出
rgb: 強制打包 RGB 輸出
gbrp:強制平面RGB輸出
默認值為yuv420誓禁。rgb ( deprecated ) –` 如果設置為 1懈息,則強制過濾器接受 RGB 顏色空間中的輸入。默認值為 0摹恰。此選項已棄用辫继,請改用格式。
repeatlast –
如果設置為 1俗慈,則強制過濾器在主輸入上繪制最后一個覆蓋幀姑宽,直到流結束。值 0 禁用此行為闺阱。默認值為 1炮车。
ffmpeg.setpts(steam, expr )
更改輸入幀的 PTS(表示時間戳)。
FFmpeg里有兩種時間戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)酣溃。 顧名思義瘦穆,前者是解碼的時間,后者是顯示的時間赊豌。
參數(shù)
- expr – 為每個幀評估以構造其時間戳的表達式扛或。
ffmpeg.trim(stream,**kwargs )
修剪輸入,使輸出包含輸入的一個連續(xù)子部分碘饼。
參數(shù)
start - 指定保留部分的開始時間告喊,即帶有時間戳開始的幀將是輸出中的第一幀。
end – 指定將被丟棄的第一幀的時間派昧,即緊接在帶有時間戳 end 的幀之前的幀將是輸出中的最后一幀黔姜。
start_pts – 這與 start 相同,只是此選項以時基單位而不是秒為單位設置開始時間戳蒂萎。
end_pts – 這與 end 相同秆吵,只是此選項以時基單位而不是秒為單位設置結束時間戳。
duration – 輸出的最大持續(xù)時間(以秒為單位)五慈。
start_frame – 應傳遞到輸出的第一幀的編號纳寂。
end_frame – 應丟棄的第一幀的編號。
ffmpeg.vflip(stream)
垂直翻轉輸入視頻泻拦。
ffmpeg.zoompan(stream毙芜,**kwargs )
應用縮放和平移效果。
參數(shù)
zoom – 設置縮放表達式争拐。默認值為 1腋粥。
x – 設置 x 表達式。默認值為 0。
y – 設置 y 表達式隘冲。默認值為 0闹瞧。
d – 以幀數(shù)設置持續(xù)時間表達式。這設置單個輸入圖像將持續(xù)多少幀效果展辞。
s – 設置輸出圖像大小奥邮,默認為hd720.
fps - 設置輸出幀率,默認為 25罗珍。
z – 的別名zoom洽腺。