FFmpeg中的輸入設備配置元素用來啓用對附加到您的系統一個多媒體設備訪問數據。html
當編譯時,默認會支持全部的輸入設備。你能夠經過在配置腳本執行時附加–list-indevs
瞭解到支持的設備。linux
能夠經過–disable-indevs
在編譯時禁用全部輸入設備,也能夠在此基礎上經過–enable-indev=INDEV
容許個別設備,或者在默認支持基礎上經過–disable-indev=INDEV
禁用個別設備支持達到相似的目的。web
在ff*工具集中,使用-devices
能夠獲取當前支持的設備信息。windows
下面是當前可用的輸入設備介紹。後端
ALSA (Advanced Linux Sound Architecture——高級Linux音頻架構) 輸入設備api
爲了可以使用這個設備,在你的系統上必須安裝有libasound
庫。服務器
這個設備容許從ALSA設備採集,設備經過名稱來做爲ALSA卡標識符,以進行採集。閉包
ALSA標識語法爲:架構
hw:CARD[,DEV[,SUBDEV]]
這裏DEV
和SUBDEV
是可選的。經過這3個參數(CARD
、DEV
和SUBDEV
)能夠指定一個卡的序號或者標識、設備序號和子設備序號(-1意味着任何一個)app
在你的系統上要列出當前可用的卡,能夠經過文件:/proc/asound/cards and /proc/asound/devices
例如要利用FFmpeg採集ALSA設備(卡ID爲0),你能夠以下:
ffmpeg -f alsa -i hw:0 alsaout.wav
更多信息參考http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
AVFoundation 輸入設備
AVFoundation是當前Apple OSX(>=10.7)下建議的流採集框架,它在IOS上也是可用的。而老的QTKit
框架從OSX10.7開始已經廢棄。
這個設備做爲輸入文件名的語法爲:
-i "[[VIDEO]:[AUDIO]]"
第一部分選擇視頻輸入,而後選擇音頻輸入。流必須經過設備列表中的設備名或者設備索引號來指定。或者視頻和/或音頻輸入設備能夠經過使用-video_device_index <INDEX>
和/或-audio_device_index <INDEX>
語法指定,它將覆蓋設備名或者索引來做爲輸入文件名。
全部有效的設備均可以經過使用-list_devices true
枚舉出來,它會列出全部設備的名稱以及對應的索引號。
下面是兩個設備的別名:
default:選擇AVFoundation默認設備(類型)。
none:不記錄相應的媒體類型,這至關於指定一個空的設備名或者索引
譯者補註:none能夠用來在進行指定時明確表示沒有某種類型,好比
-i "none:[AUDIO]"
表示沒有視頻只有音頻
avfoundation支持以下的選項:
-list_devices <TRUE|FALSE>
若是設置爲true
則列出全部有效輸入設備,顯示設備名和對應的索引
-video_device_index
經過索引指定視頻設備,它將覆蓋做爲輸入文件名
-audio_device_index
經過索引指定音頻設備,它將覆蓋做爲輸入文件名
-pixel_format
描述視頻設備採用的像素格式,若是不知道,將列出可用設備中第一個有效的支持格式。像素格式是: monob, rgb555be, rgb555le, rgb565be, rgb565le, rgb24, bgr24, 0rgb, bgr0, 0bgr, rgb0, bgr48be, uyvy422, yuva444p, yuva444p16le, yuv444p, yuv422p16, yuv422p10, yuv444p10, yuv420p, nv12, yuyv422, gray
輸出AVFoundation支持的設備
$ ffmpeg -f avfoundation -list_devices true -i ""
從視頻設備0和音頻設備0 採集輸出到into out.avi:
$ ffmpeg -f avfoundation -i "0:0" out.avi
從視頻輸入設備2和音頻輸入設備1採集輸出到 out.avi:
$ ffmpeg -f avfoundation -video_device_index 2 -i ":1" out.avi
從系統默認視頻設備以bgr0像素格式採集,而不採集音頻到out.avi:
$ ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi
BSD 視頻輸入設備
decklink輸入設備提供從Blackmagic DeckLink 採集的能力
要支持這個設備,編譯時須要Blackmagic DeckLink SDK ,且須要採用--extra-cflags
和--extra-ldflags
編譯選項。在Windows,你可能須要經過widl
運行IDL。
DeckLink很是挑剔支持輸入格式。像素格式萬惡有uyvy422/210
.對於視頻你必須利用-list_formats 1
指定一個視頻畫面尺寸(-list_formats 1.)和幀率。音頻採樣率被設置爲48KHz。音頻數多是二、8或16
list_devices
若是設置爲true
,輸出設備列表而後退出,默認爲false.
list_formats
若是設置爲true
,輸出支持的格式而後退出,默認爲`false.
bm_v210
若是設置爲1,則視頻採集採用10bit量化的uyvy422 v210標準。不是全部的Blackmagic設備都支持這個選項
列出全部輸入設備:
ffmpeg -f decklink -list_devices 1 -i dummy
列出支持的格式:
ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro'
採集1080i50視頻格式 (format 11):
ffmpeg -f decklink -i 'Intensity Pro@11' -acodec copy -vcodec copy output.avi
以10bit採集1080i50視頻格式:
ffmpeg -bm_v210 1 -f decklink -i 'UltraStudio Mini Recorder@11' -acodec copy -vcodec copy output.avi
採集720p50格式,同時採集32bit音頻:
ffmpeg -bm_audiodepth 32 -f decklink -i 'UltraStudio Mini Recorder@14' -acodec copy -vcodec copy output.avi
採集576i50採集視頻,同時採集8路音頻:
ffmpeg -bm_channels 8 -f decklink -i 'UltraStudio Mini Recorder@3' -acodec copy -vcodec copy output.avi
Windows DirectShow 輸入設備。
DirectShow在ffmpeg中由mingw-w64
項目提供支持。當前只有音頻和視頻設備可以使用。
多個單獨輸入的設備可能被打開,但它們也可能打開相同的輸入,這將改善他們之間的同步
輸入名能夠按格式(語法):
TYPE=NAME[:TYPE=NAME]
這裏TYPE
能夠是audio
或者video
,NAME
是設備名或者別名。
若是沒有特別指定,將採用設備的默認值。若是設備不支持要求的選項,則會打開失敗。
video_size
設置採集視頻的尺寸
framerate
設置採集視頻的幀率
sample_rate
設置採集音頻的採樣率(單位Hz)
sample_size
設置採集音頻的採樣位深(單位bits)
channels
選擇採集音頻的通道
list_devices
若是爲真,輸出設備列表並退出
list_options
若是爲真,輸出選擇設備的選項列表並退出
video_device_number
對視頻設備名設置索引編號(從0開始,默認0).
audio_device_number
對音頻設備名設置索引編號(從0開始,默認0).
pixel_format
選擇用於DirectShow的像素格式。當視頻編碼沒有設置或者設置爲rawvideo
時須要設置
audio_buffer_size
以milliseconds爲單位設置音頻設備緩衝大小(它能夠直接影響延遲,則取決於依賴的設備)。默認使用設備默認緩衝(一般爲500ms的倍數)。這個值設置太低會下降性能。參考http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx
video_pin_name
經過pin名稱(或者別名)選擇視頻捕獲源
audio_pin_name
經過pin名稱(或者別名)選擇音頻捕獲源
crossbar_video_input_pin_number
從交錯/交叉設備(音視頻交錯編碼)中選擇視頻輸入端口。能夠選擇交錯設備的視頻解碼輸出端。注意改變這個值將影響將來的調用(設置了一個新的默認值),直到發生系統重啓
crossbar_audio_input_pin_number
從交錯/交叉設備(音視頻交錯編碼)中選擇音頻輸入端口。能夠選擇交錯設備的音頻解碼輸出端。注意改變這個值將影響將來的調用(設置了一個新的默認值),直到發生系統重啓
show_video_device_dialog
若是設爲真,在開始採集前會彈出一個面向用戶的對話框,以容許他們改變視頻濾鏡屬性和一些手動配置。注意對於交錯設備,可能須要同時在PAL (25 fps)和NTSC (29.97)輸入幀率、尺寸、隔行等等屬性。改變這些值以不一樣的掃描率/幀率和避免底部綠色、閃爍的掃描行等等。注意這些改變將影響將來的調用(做爲新的默認值)直到系統被重啓
show_audio_device_dialog
若是爲真,將在開始採集前彈出一個面向用戶的對話框,以容許他們改變音頻濾鏡屬性和一些手動配置
show_video_crossbar_connection_dialog
若是爲真,若是打開視頻設備將在開始採集前彈出一個面向用戶的對話框,以容許手動編輯交錯設備路由
show_audio_crossbar_connection_dialog
若是爲真,若是打開音頻設備將在開始採集前彈出一個面向用戶的對話框,以容許手動編輯交錯設備路由
show_analog_tv_tuner_dialog
若是爲真,將在開始採集前彈出一個面向用戶的對話框,以容許手動調整電視頻道/頻率
show_analog_tv_tuner_audio_dialog
若是爲真,將在開始採集前彈出一個面向用戶的對話框,以容許手動調整電視音頻設置 (例如 mono與stereo, 語言 A,B 或者 C)
audio_device_load
從文件加載一個音頻捕獲設備而不是根據名字搜索。它能夠同時加載附加參數(若是濾鏡支持)。它用於音頻源必須指定爲一個值,但能夠是任何虛擬的
audio_device_save
存儲當前音頻採集濾鏡設備和他們的參數(若是濾鏡支持)到一個文件。若是文件存在則被覆蓋(這個文件能夠被audio_device_load
加載)
video_device_load
從文件加載一個視頻捕獲設備而不是根據名字搜索。它能夠同時加載附加參數(若是濾鏡支持)。它用於視頻源必須指定爲一個值,但能夠是任何虛擬的
video_device_save
存儲當前視頻採集濾鏡設備和他們的參數(若是濾鏡支持)到一個文件。若是文件存在則被覆蓋(這個文件能夠被video_device_load
加載)
輸出DirectShow支持的設備列表並退出:
$ ffmpeg -list_devices true -f dshow -i dummy
打開攝像頭:
$ ffmpeg -f dshow -i video="Camera"
打開名爲Camera
的第二個視頻設備:
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
打開攝像頭和話筒:
$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
輸出選擇設備支持的選項列表並退出:
$ ffmpeg -list_options true -f dshow -i video="Camera"
經過名字/別名指定pin名來採集,指定別名設備名:
$ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone"
配置交錯設備,指定交錯pin,容許在開始時進行視頻採集屬性調整:
$ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0
-crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
Linux DV1394輸入設備
Linux framebuffer(Linux幀緩衝)輸入設備
Linux framebuffer是一種獨立於硬件的圖像抽象層,它用於在計算機屏幕上顯示圖像,一般是在控制檯(環境)。它能夠經過一個文件設備節點訪問,一般爲:/dev/fb0
要了解更多詳細信息請閱讀Linux源碼文件樹下文檔:Documentation/fb/framebuffer.txt
爲了從/dev/fb0
讀取:
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
你能夠經過下面的命令截屏:
ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
此外還能夠在http://linux-fbdev.sourceforge.net/瞭解fbset(1)。
Win32 GDI 屏幕截取設備
這個設備容許你截取顯示在Windows(系統)上的屏幕區域。
它有兩個可選的輸入文件名(形式):desktop
或者title=window_title
第一個可選名(desktop
)會截取整個桌面或者桌面的指定區域,第二個可選名(根據窗口標題)會截取單獨的窗口,而不管在屏幕上的位置(即即便根據某些操做,該窗口已經移除屏幕可見區域,或者被其餘窗口覆蓋了也能夠截取到)
下面是截取整個桌面的例子:
ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg
截取桌面上從點(10,20)開始的640x480大小區域
ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg
截取名爲 "Calculator"的窗口
ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg
draw_mouse
爲1指定是截取鼠標,0表示不截取,默認爲1
framerate
設置幀率,默認爲ntsc,相應幀率爲30000/1001.
show_region
在屏幕上顯示截取區域。Show grabbed region on screen.
若是指定爲1,則指定的截取範圍會顯示在屏幕上,經過這個選項,能夠很容易的知道要截取的範圍,這在只截取屏幕的一部分時頗有用。
注意show_region
在截取單獨窗口時無效(即不可用)
例如:
ffmpeg -f gdigrab -show_region 1 -framerate 6 -video_size cif -offset_x 10 -offset_y 20 -i desktop out.mpg
video_size
設置視頻幀尺寸,默認爲屏幕(以desktop
爲源)或者窗口(以title=window_title
爲源)尺寸
offset_x
當區域截取時,起點的x軸的偏移(左邊距屏幕左邊距離)
注意座標體系是以可見屏幕左上爲原點的。若是你有一個監看對象從左邊超出了屏幕可見範圍,則offset_x
的值爲負數值。
offset_y
當區域截取時,起點的y軸的偏移(上邊距屏幕上邊距離)
注意座標體系是以可見屏幕左上爲原點的。若是你有一個監看對象從上邊超出了屏幕可見範圍,則offset_y
的值爲負數值
使用iec61883
的FireWire(火線) DV/HDV輸入設備。
要容許這個輸入設備,須要libiec61883
, libraw1394
和 libavc1394
被安裝到系統中。此外還要在編譯時配置--enable-libiec61883
以支持。
iec61883
支持經過 IEEE1394 (FireWire)接口鏈接設備獲取視頻(使用libiec61883
和新的Linux FireWire stack (火線堆棧juju))。從Linux Kernel 2.6.37開始它是默認的DV/HDV輸入方法了,而老的FireWire stack
已經被移除。
dvtype
覆蓋自動檢測的DV/HDV類型。它僅用於自動檢測類型失敗的狀況,或須要禁止者須要的格式被禁止的條件。錯誤的指定將使設備不能正常工做。選項支持auto
,dv
和hdv
爲參數
dvbuffer
對傳入的數據設置緩衝(單位幀)。對於DV,它是一個精確的幀數,對於HDV,它不是精確的幀數,由於HDV沒有一個固定的幀大小。
dvguid
經過GUID來指定截取設備ID。這樣捕獲將僅從指定的設備,或者失敗(沒有指定的設備)。對於系統鏈接了多個可用設備的狀況它很是有用。在系統的/sys/bus/firewire/devices
能夠找到鏈接設備的GUID。
獲取播放FireWire DV/HDV
ffplay -f iec61883 -i auto
獲取記錄FireWire DV/HDV,包緩衝大小爲100000個包
ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
JACK輸入設備。
爲了能使用JACK設備,須要系統上存在libjack
一個JACK輸入設備建立1個或者多個JACK可寫客戶端,每個對應於一個音頻通道,命名(指定)爲client_name:input_N
,這裏client_name
由程序提供,N
是通道id號。每一個可寫客戶端做爲ffmpeg的輸入設備發送數據。
你一次能夠建立1個或者多個JACK可讀客戶端,來鏈接到1個或者多個JACK可寫客戶端。
可使用jack_connect
和jack_disconnect
鏈接或者斷開(不鏈接)JACK客戶端,或者經過圖形化接口實現:例如經過qjackctl
,
能夠經過jack_lsp
來列出JACK客戶端和它們的屬性列表。
下面的例子展現ffmpeg如何從JACK可讀客戶端採集數據:
# Create a JACK writable client with name "ffmpeg". $ ffmpeg -f jack -i ffmpeg -y out.wav # Start the sample jack_metro readable client. $ jack_metro -b 120 -d 0.2 -f 4000 # List the current JACK clients. $ jack_lsp -c system:capture_1 system:capture_2 system:playback_1 system:playback_2 ffmpeg:input_1 metro:120_bpm # Connect metro to the ffmpeg writable client. $ jack_connect metro:120_bpm ffmpeg:input_1
更多信息參考http://jackaudio.org/
Libavfilter
輸入虛擬設備
這個輸入設備能夠從libavfilter
濾鏡鏈圖的一個開放輸出端口讀取數據。
對於每一個濾鏡鏈圖開放輸出端口,這個輸入設備將建立一個對應的流映射到這個端口進行輸出。當前只支持視頻數據。濾鏡鏈圖是經過選項graph
描述的。
graph
描述用做輸入的濾鏡鏈圖。每一個視頻開放輸出必須由一個形如outN
的獨立標籤命名,這裏N
是從0開始的數字,以指代要映射做爲設備的輸入流(序號)。第一個沒有標籤命名的輸出自動被做爲out0
,但全部其餘的必須明確指定。
經過附加後綴「+subcc」能夠向輸出標籤建立一個額外的封閉包裝字幕(實驗性質:現只對EIA-608 / CEA-708)。這個subcc
流在全部其它常規流建立後才附加,並按對應流順序。例若有 "out19+subcc", "out7+subcc" 以及最高普通流"out42",則43號流是subcc
對應於out7
,44號流也是subcc
流對應out19
若是沒有指定(選項)默認值爲輸入設備指定的文件名(這裏文件名實際上是濾鏡鏈圖描述)
graph_file
設置經過文件讀取/發送(給其餘濾鏡)濾鏡鏈圖的文件名。在文件中的語法與經過graph
選項描述濾鏡鏈圖的語法相同。
建立一個顏色流並播放:
ffplay -f lavfi -graph "color=c=pink [out0]" dummy
相似前面的例子,可是有文件名來指定濾鏡鏈圖描述,而且省略了"out0"標籤:
ffplay -f lavfi color=c=pink
建立3個不一樣的視頻測試濾鏡源並播放:
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
從文件中使用amovie
讀取音頻流來播放:
ffplay -f lavfi "amovie=test.wav"
讀取音頻和視頻流來播放:
ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
複製解碼出來的幀和對應字幕到圖片(實驗):
ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rawvideo subcc.bin
基於libcdio
的音樂CD輸入設備。
須要系統中有libcdio
才能啓用,且編譯時須要用--enable-libcdio
配置選項容許。
設備容許從音頻CD播放和獲取
例如利用ffmpeg在/dev/sr0
獲取整個音頻CD內容:
ffmpeg -f libcdio -i /dev/sr0 cd.wav
speed
設置讀取速度,默認爲0
這個速度指定了CD-ROM速度,它經過libcdio
的cdio_cddap_speed_set
函數設置。不少CD-ROM驅動器若是設置更大的值將得到更快的速度。
paranoia_mod
設置糾偏恢復模式的標誌,它接受下面的值:
‘disable’
‘verify’
‘overlap’
‘neverskip’
‘full’
默認值是‘disable’
關於可用糾偏模式的更多信息,請諮詢糾偏項目文檔
IIDC1394輸入設備,其基於libdc1394
和libraw1394
編譯容許須要配置--enable-libdc1394
這個OpenAL輸入設備支持在全部實現了OpenAL 1.1
的系統上進行音頻捕獲。
要編譯使用它須要系統包含OpenAL
頭和libraries
庫,而且設置編譯選項--enable-openal
OpenAL
頭和libraries
庫能夠是你OpenAL實現的部分,或者做爲附件下載(SDK)。根據你的安裝方式,你可能須要經過--extra-cflags
和--extra-ldflags
爲編譯指定本地的頭文件和庫文件
兼容OpenAL的實現有:
Creative
官方的Windows實現,提供後備支持硬件加速的設備和軟件,參考http://openal.org/
OpenAL Soft
便攜式,開源(LGPL)軟件實現。包括在Windows,Linux、Solaris、BSD操做系統上提供最多見的後端聲音api。參考http://kcat.strangesoft.net/openal.html
Apple
OpenAL是核心音頻的一部分,官方的Mac OSX音頻接口。參考 http://developer.apple.com/technologies/mac/audio-and-video.html
這個設備容許經過OpenAL處理來捕獲音頻輸入。
你須要經過提供文件名來指定捕獲設備的名稱。若是爲空字符串(''),則會自動選擇默認設備。你能夠經過list_devices
獲取到支持設備列表。
channels
設置捕獲音頻的通道。只有1(單聲道)和2(立體聲)被支持,默認爲2
sample_size
設置音頻採樣位寬(單位bit——位)。當前只支持8和16,默認16
sample_rate
設置音頻採樣頻率(單位Hz),默認44.1k.
list_devices
若是爲真(true),則列出系統上支持的設備並退出,默認爲false.
輸出OpenAL支持設備列表並退出
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
從設備DR-BT101 via PulseAudio
捕獲音頻:
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
從默認設備捕獲音頻 (注意文件名字符串爲空):
$ ffmpeg -f openal -i '' out.ogg
同時從兩個設備捕獲,寫入不一樣的文件:
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
注意不是全部的OpenAL實現設備都支持多路同時捕獲。若是上面不工做,則在最新版OpenAL軟件上嘗試(測試)
PulseAudio(脈衝音頻)輸入設備
要使用須編譯配置設置--enable-libpulse
須要提供文件名或者"default"來指定輸入源設備
經過pactl list sources
能夠列出全部PulseAudio設備以及屬性。
更多信息參考http://www.pulseaudio.org
server
鏈接到指定PulseAudio服務器,指定是用IP地址。若是沒有設置就用默認服務器
name
指定用做顯示活動客戶端的程序名,默認爲LIBAVFORMAT_IDENT
stream_name
指定流名稱Specify the stream name PulseAudio will use when showing active streams, 默認爲"record"
sample_rate
Specify the samplerate in Hz, by default 48kHz is used.
channels
Specify the channels in use, by default 2 (stereo) is set.
frame_size
Specify the number of bytes per frame, by default it is set to 1024.
fragment_size
Specify the minimal buffering fragment in PulseAudio, it will affect the audio latency. By default it is unset.
從默認設備捕獲來記錄:
ffmpeg -f pulse -i default /tmp/pulse.wav
QTKit輸入設備
文件名做爲設備名或者索引序號參數被傳遞。設備索引也可使用-video_device_index
選項來設定。一個獲取的設備索引能夠覆蓋任何獲取的設備名。若是所需的設備僅包含數字,則使用-video_device_index
來識別。若是文件名爲空字符串或者設備名爲"default"都會選擇默認設備。有效設備能夠由-list_devices
枚舉。
ffmpeg -f qtkit -i "0" out.mpg ffmpeg -f qtkit -video_device_index 0 -i "" out.mpg ffmpeg -f qtkit -i "default" out.mpg ffmpeg -f qtkit -list_devices true -i ""
sndio輸入設備。
要使用它須要系統安裝並配置有libsndio
庫
文件名做爲輸入設備節點,一般爲/dev/audio0
例如從/dev/audio0
捕獲音頻:
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
Video4Linux2 輸入視頻設備
"v4l2"是"video4linux2"的別名
編譯須要v4l-utiles
支持(--enable-libv4l2
編譯選項被配置),也可用於-use_libv4l2
輸入設備選項。
捕獲的設備名是一個文件設備節點,一般Linux系統在設備(例如USB攝像頭)插入到系統時自動建立這樣的節點,會被命名爲/dev/videoN
,N
是設備索引序號
Video4Linux設備一般只支持有限的分辨率(width x height
)和幀率,經過-list_formats all
選項來獲取支持狀況。一些設備,例如電視卡能夠支持1個或者多個標準,它支持的標準能夠經過-list_standards all
來了解。
時間戳時基單位爲1microsecond。根據內核版本和配置,時間戳能夠基於實時間(real time clock——絕對時間,一種起源於Unix的表示方式)或者單調時鐘(monotonic clock——一般源自啓動時間,不受NTP或者手動改變)。-timestamps abs
或者-ts abs
選擇啓用實時間。
在ffmpeg或ffplay使用的例子以下:
列出支持的設備(video4linux2)
ffplay -f video4linux2 -list_formats all /dev/video0
捕獲並顯示(對video4linux2設備)
ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
捕獲並記錄輸入的Grab and record the input of a video4linux2 device, leave the frame rate and size as previously set:
ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
更多關於video4linux的信息參考http://linuxtv.org/
standard
設置採用的標準,必須是被支持的標準。爲了獲取當前支持的標準,須要使用 list_standards
選項
channel
設置採用的輸入通道索引,默認值爲-1,表示採用前面選擇的通道。
video_size
設置視頻幀尺寸frame size
. 參數是格式爲WIDTHxHEIGHT
的字符串或者有效的索引
pixel_format
選擇像素格式(僅對raw視頻輸入有效)
input_format
設置欲採用的像素格式(僅對raw視頻格式)或者編碼名。這個選項容許選擇一個輸入格式(當有多個有效值時)
framerate
設置首選幀率
list_formats
列出有效的格式 (支持像素格式、編碼和幀尺寸)而後退出
有效值:
‘all’
顯示有效可能 (壓縮和未壓縮的) 格式
‘raw’
僅顯示raw video (非壓縮)格式
‘compressed’
僅顯示壓縮格式
list_standards
列出支持的標準而後退出
有效值:
‘all’
顯示全部支持的標準
timestamps, ts
設置捕獲幀的時間戳標準
有效值:
‘default’
根據核心的默認值
‘abs’
使用絕對時間戳(時間時鐘).
‘mono2abs’
強制從單調時間轉換爲絕對時間戳
默認值是 default
vfw(Video for Windows)捕獲輸入端
文件名必須是捕獲設備索引,範圍0-9能夠用list
做爲文件名,將輸出一個設備列表。任何數字外其它文件名被視做設備索引0。
X11 視頻輸入設備
使用須要libxcb
庫,它會在編譯時自動檢測。
另外,配置--enable-x11grab
以對應遺留的Xlib用戶。
這個設備容許捕獲X11顯示區域。
做爲輸入的文件名語法爲:
[hostname]:display_number.screen_number[+x_offset,y_offset]
hostname:display_number.screen_number
指定了要捕獲的X11顯示屏幕名,hostname
能夠省略則默認爲"localhost"。環境變量DISPLAY
能夠指定默認顯示名。x_offset
,y_offset
指定捕獲偏移,是對於左上創建的X11屏幕,默認爲0.
經過X11文檔(man X
)來了解更詳細信息。
使用xdpyinfo
程序來得到關於你X11顯示的基本屬性信息(配合 grep
"name" 或者 "dimensions")
例如使用ffmpeg捕獲 :0.0
:
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
捕獲座標 10,20
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
draw_mouse
指定是否捕獲鼠標,0表示不,1爲默認表示要
follow_mouse
隨鼠標定義捕獲區域。參數能夠是centered
或者像素值PIXELS
當設定爲"centered", 捕獲區域跟隨鼠標指針保持指針所指在區域中,不然捕獲區僅當鼠標指向達到距邊緣 PIXELS (大於0)像素值離區域內邊緣時
例如:
ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
遵循只有當鼠標指針達到100像素內邊緣:
ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
framerate
設置捕獲幀率。默認ntsc,爲30000/1001.
show_region
顯示捕獲區域
若是show_region
設置爲1,則區域將顯示在屏幕上,經過這個選項能夠很容易的判斷哪些內容將被捕獲
region_border
設置-show_region
設置爲1時使用的區域邊框線粗細 ,值範圍1 -128,默認爲3 (僅XCB-based x11grab ).
例如:
ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
設置了follow_mouse
:
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
video_size
設置幀尺寸,默認vga.
use_shm
對共享內存使用MIT-SHM擴展,默認爲1,可能須要禁用遠程顯示器(僅legacy x11grab).
語法:
-grab_x x_offset -grab_y y_offset
設置區域座標。它們表示抵消X11左上角。默認值爲0。