ffmpeg文檔26-輸入設備

26 輸入設備

FFmpeg中的輸入設備配置元素用來啓用對附加到您的系統一個多媒體設備訪問數據。html

當編譯時,默認會支持全部的輸入設備。你能夠經過在配置腳本執行時附加–list-indevs瞭解到支持的設備。linux

能夠經過–disable-indevs在編譯時禁用全部輸入設備,也能夠在此基礎上經過–enable-indev=INDEV容許個別設備,或者在默認支持基礎上經過–disable-indev=INDEV禁用個別設備支持達到相似的目的。web

在ff*工具集中,使用-devices能夠獲取當前支持的設備信息。windows

下面是當前可用的輸入設備介紹。後端

alsa

ALSA (Advanced Linux Sound Architecture——高級Linux音頻架構) 輸入設備api

爲了可以使用這個設備,在你的系統上必須安裝有libasound庫。服務器

這個設備容許從ALSA設備採集,設備經過名稱來做爲ALSA卡標識符,以進行採集。閉包

ALSA標識語法爲:架構

hw:CARD[,DEV[,SUBDEV]]

這裏DEVSUBDEV是可選的。經過這3個參數(CARDDEVSUBDEV)能夠指定一個卡的序號或者標識、設備序號和子設備序號(-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 輸入設備

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選項

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例子

  • 輸出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

bktr

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

decklink選項

  • list_devices

    若是設置爲true,輸出設備列表而後退出,默認爲false.

  • list_formats

    若是設置爲true,輸出支持的格式而後退出,默認爲`false.

  • bm_v210

    若是設置爲1,則視頻採集採用10bit量化的uyvy422 v210標準。不是全部的Blackmagic設備都支持這個選項

decklink例子

  • 列出全部輸入設備:

    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

dshow

Windows DirectShow 輸入設備。

DirectShow在ffmpeg中由mingw-w64項目提供支持。當前只有音頻和視頻設備可以使用。

多個單獨輸入的設備可能被打開,但它們也可能打開相同的輸入,這將改善他們之間的同步

輸入名能夠按格式(語法):

TYPE=NAME[:TYPE=NAME]

這裏TYPE能夠是audio或者videoNAME是設備名或者別名。

dshow選項

若是沒有特別指定,將採用設備的默認值。若是設備不支持要求的選項,則會打開失敗。

  • 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加載)

dshow例子

  • 輸出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"

dv1394

Linux DV1394輸入設備

fbdev

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)。

gdigrab

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

gdigrab選項

  • 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

使用iec61883的FireWire(火線) DV/HDV輸入設備。

要容許這個輸入設備,須要libiec61883, libraw1394libavc1394被安裝到系統中。此外還要在編譯時配置--enable-libiec61883以支持。

iec61883支持經過 IEEE1394 (FireWire)接口鏈接設備獲取視頻(使用libiec61883 和新的Linux FireWire stack (火線堆棧juju))。從Linux Kernel 2.6.37開始它是默認的DV/HDV輸入方法了,而老的FireWire stack已經被移除。

iec61883的選項

  • dvtype

    覆蓋自動檢測的DV/HDV類型。它僅用於自動檢測類型失敗的狀況,或須要禁止者須要的格式被禁止的條件。錯誤的指定將使設備不能正常工做。選項支持autodvhdv爲參數

  • dvbuffer

    對傳入的數據設置緩衝(單位幀)。對於DV,它是一個精確的幀數,對於HDV,它不是精確的幀數,由於HDV沒有一個固定的幀大小。

  • dvguid

    經過GUID來指定截取設備ID。這樣捕獲將僅從指定的設備,或者失敗(沒有指定的設備)。對於系統鏈接了多個可用設備的狀況它很是有用。在系統的/sys/bus/firewire/devices能夠找到鏈接設備的GUID。

iec61883的例子

  • 獲取播放FireWire DV/HDV

    ffplay -f iec61883 -i auto

  • 獲取記錄FireWire DV/HDV,包緩衝大小爲100000個包

    ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg

jack

JACK輸入設備。

爲了能使用JACK設備,須要系統上存在libjack

一個JACK輸入設備建立1個或者多個JACK可寫客戶端,每個對應於一個音頻通道,命名(指定)爲client_name:input_N,這裏client_name由程序提供,N是通道id號。每一個可寫客戶端做爲ffmpeg的輸入設備發送數據。

你一次能夠建立1個或者多個JACK可讀客戶端,來鏈接到1個或者多個JACK可寫客戶端。

可使用jack_connectjack_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/

lavfi

Libavfilter輸入虛擬設備

這個輸入設備能夠從libavfilter濾鏡鏈圖的一個開放輸出端口讀取數據。

對於每一個濾鏡鏈圖開放輸出端口,這個輸入設備將建立一個對應的流映射到這個端口進行輸出。當前只支持視頻數據。濾鏡鏈圖是經過選項graph描述的。

lavfi選項

  • 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選項描述濾鏡鏈圖的語法相同。

lavi例子

  • 建立一個顏色流並播放:

    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

基於libcdio的音樂CD輸入設備。

須要系統中有libcdio才能啓用,且編譯時須要用--enable-libcdio配置選項容許。

設備容許從音頻CD播放和獲取

例如利用ffmpeg在/dev/sr0獲取整個音頻CD內容:

ffmpeg -f libcdio -i /dev/sr0 cd.wav

libcdio選項

  • speed

    設置讀取速度,默認爲0

    這個速度指定了CD-ROM速度,它經過libcdiocdio_cddap_speed_set函數設置。不少CD-ROM驅動器若是設置更大的值將得到更快的速度。

  • paranoia_mod

    設置糾偏恢復模式的標誌,它接受下面的值:

    ‘disable’
    ‘verify’
    ‘overlap’
    ‘neverskip’
    ‘full’

    默認值是‘disable’

    關於可用糾偏模式的更多信息,請諮詢糾偏項目文檔

libdc1394

IIDC1394輸入設備,其基於libdc1394libraw1394

編譯容許須要配置--enable-libdc1394

openal

這個OpenAL輸入設備支持在全部實現了OpenAL 1.1的系統上進行音頻捕獲。

要編譯使用它須要系統包含OpenAL頭和libraries庫,而且設置編譯選項--enable-openal

OpenAL頭和libraries庫能夠是你OpenAL實現的部分,或者做爲附件下載(SDK)。根據你的安裝方式,你可能須要經過--extra-cflags--extra-ldflags爲編譯指定本地的頭文件和庫文件

兼容OpenAL的實現有:

這個設備容許經過OpenAL處理來捕獲音頻輸入。

你須要經過提供文件名來指定捕獲設備的名稱。若是爲空字符串(''),則會自動選擇默認設備。你能夠經過list_devices獲取到支持設備列表。

openal選項

  • channels

    設置捕獲音頻的通道。只有1(單聲道)和2(立體聲)被支持,默認爲2

  • sample_size

    設置音頻採樣位寬(單位bit——位)。當前只支持8和16,默認16

  • sample_rate

    設置音頻採樣頻率(單位Hz),默認44.1k.

  • list_devices

    若是爲真(true),則列出系統上支持的設備並退出,默認爲false.

openal例子

  • 輸出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軟件上嘗試(測試)

pulse

PulseAudio(脈衝音頻)輸入設備

要使用須編譯配置設置--enable-libpulse

須要提供文件名或者"default"來指定輸入源設備

經過pactl list sources 能夠列出全部PulseAudio設備以及屬性。

更多信息參考http://www.pulseaudio.org

pulse選項

  • 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.

pulse例子

從默認設備捕獲來記錄:

ffmpeg -f pulse -i default /tmp/pulse.wav

qtkit

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

sndio輸入設備。

要使用它須要系統安裝並配置有libsndio

文件名做爲輸入設備節點,一般爲/dev/audio0

例如從/dev/audio0捕獲音頻:

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

video4linux2 ,v4l2

Video4Linux2 輸入視頻設備

"v4l2"是"video4linux2"的別名

編譯須要v4l-utiles支持(--enable-libv4l2編譯選項被配置),也可用於-use_libv4l2輸入設備選項。

捕獲的設備名是一個文件設備節點,一般Linux系統在設備(例如USB攝像頭)插入到系統時自動建立這樣的節點,會被命名爲/dev/videoNN是設備索引序號

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/

video4linux,vl4的選項

  • 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

vfwcap

vfw(Video for Windows)捕獲輸入端

文件名必須是捕獲設備索引,範圍0-9能夠用list做爲文件名,將輸出一個設備列表。任何數字外其它文件名被視做設備索引0。

x11grab

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

X11grab選項

  • 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).

x11grab 的grab_x,grab_y AV選項

語法:

-grab_x x_offset -grab_y y_offset

設置區域座標。它們表示抵消X11左上角。默認值爲0。

相關文章
相關標籤/搜索