目錄
- 1 描述
- 2 裝置選項
- 3 輸入裝置
- 4 輸出裝置
- 5 參見
- 6 作者
1 描述
本文檔描述了 libavdevice 庫提供的輸入和輸出裝置。
2 裝置選項
libavdevice 庫提供與 libavformat 相同的介面。也就是說,輸入裝置被視為解多工器,輸出裝置被視為多工器,並且介面和通用裝置選項與 libavformat 提供的相同(請參閱 ffmpeg-formats 手冊)。
此外,每個輸入或輸出裝置都可能支援所謂的私有選項,這些選項是該組件特有的。
選項可以通過在 FFmpeg 工具中指定 -option value 來設定,或者通過在裝置 AVFormatContext
選項中顯式設定值,或者使用 libavutil/opt.h API 進行程式化使用。
3 輸入裝置
輸入裝置是 FFmpeg 中配置的元素,可讓您存取來自連接到系統的多媒體裝置的資料。
當您配置 FFmpeg 建置時,所有支援的輸入裝置預設為啟用。您可以使用配置選項 "–list-indevs" 列出所有可用的輸入裝置。
您可以使用配置選項 "–disable-indevs" 停用所有輸入裝置,並使用選項 "–enable-indev=INDEV" 選擇性地啟用輸入裝置,或者您可以使用選項 "–disable-indev=INDEV" 停用特定的輸入裝置。
ff* 工具的選項 "-devices" 將顯示支援的輸入裝置列表。
以下是目前可用的輸入裝置的描述。
3.1 alsa
ALSA(進階 Linux 聲音架構)輸入裝置。
要在配置期間啟用此輸入裝置,您需要在系統上安裝 libasound。
此裝置允許從 ALSA 裝置擷取。要擷取的裝置名稱必須是 ALSA 卡識別碼。
ALSA 識別碼的語法為
hw:CARD[,DEV[,SUBDEV]]
其中 DEV 和 SUBDEV 組件是可選的。
三個參數(依序:CARD、DEV、SUBDEV)指定卡號或識別碼、裝置號碼和子裝置號碼(-1 表示任何)。
要查看系統目前識別的卡列表,請檢查檔案 /proc/asound/cards 和 /proc/asound/devices。
例如,要使用 ffmpeg
從卡 ID 為 0 的 ALSA 裝置擷取,您可以執行以下命令
ffmpeg -f alsa -i hw:0 alsaout.wav
有關更多資訊,請參閱:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
3.1.1 選項
- sample_rate
設定取樣率,單位為 Hz。預設值為 48000。
- channels
設定聲道數。預設值為 2。
3.2 android_camera
Android 相機輸入裝置。
此輸入裝置使用 Android Camera2 NDK API,該 API 在 API 等級 24+ 的裝置上可用。android_camera 的可用性在配置期間自動偵測。
此裝置允許從整合到 Camera2 NDK API 中的 Android 裝置上的所有相機擷取。
可用的相機在內部枚舉,可以使用 camera_index 參數選擇。輸入檔案字串被丟棄。
通常,後置相機的索引為 0,而前置相機的索引為 1。
3.2.1 選項
- video_size
設定視訊尺寸,以字串形式給出,例如 640x480 或 hd720。如果請求的視訊尺寸不可用或預設情況下,則回復為 Android 報告的第一個可用配置。
- framerate
設定視訊影格率。如果請求的影格率不可用或預設值 (-1) 不可用,則回復為 Android 報告的第一個可用配置。
- camera_index
設定要使用的相機索引。預設值為 0。
- input_queue_size
設定要緩衝的最大影格數。預設值為 5。
3.3 avfoundation
AVFoundation 輸入裝置。
AVFoundation 是 Apple 目前推薦的框架,用於在 OSX >= 10.7 以及 iOS 上進行串流擷取。
輸入檔案名稱必須以以下語法給出
-i "[[VIDEO]:[AUDIO]]"
第一個條目選擇視訊輸入,而後者選擇音訊輸入。串流必須由裝置名稱或裝置索引指定,如裝置列表所示。或者,可以使用 -video_device_index <INDEX> 和/或 -audio_device_index <INDEX> 按索引選擇視訊和/或音訊輸入裝置,覆蓋輸入檔案名稱中給出的任何裝置名稱或索引。
所有可用裝置都可以通過使用 -list_devices true 枚舉,列出所有裝置名稱和相應的索引。
有兩個裝置名稱別名
default
選擇相應類型的 AVFoundation 預設裝置。
none
不錄製相應的媒體類型。這相當於指定空的裝置名稱或索引。
3.3.1 選項
AVFoundation 支援以下選項
- -list_devices <TRUE|FALSE>
如果設定為 true,則會給出所有可用輸入裝置的列表,顯示所有裝置名稱和索引。
- -video_device_index <INDEX>
通過索引指定視訊裝置。覆蓋輸入檔案名稱中給出的任何內容。
- -audio_device_index <INDEX>
通過索引指定音訊裝置。覆蓋輸入檔案名稱中給出的任何內容。
- -pixel_format <FORMAT>
請求視訊裝置使用特定的像素格式。如果指定的格式不受支援,則會給出可用格式的列表,並使用此列表中的第一個格式代替。可用的像素格式為:
monob、rgb555be、rgb555le、rgb565be、rgb565le、rgb24、bgr24、0rgb、bgr0、0bgr、rgb0、bgr48be、uyvy422、yuva444p、yuva444p16le、yuv444p、yuv422p16、yuv422p10、yuv444p10、yuv420p、nv12、yuyv422、gray
- -framerate
設定擷取影格率。預設值為
ntsc
,對應於30000/1001
的影格率。- -video_size
設定視訊影格大小。
- -capture_cursor
擷取滑鼠指標。預設值為 0。
- -capture_mouse_clicks
擷取螢幕滑鼠點擊。預設值為 0。
- -capture_raw_data
擷取原始裝置資料。預設值為 0。使用此選項可能會導致接收傳遞到 AVFoundation 框架的底層資料。例如,對於將原始 DV 資料發送到框架的多工裝置(例如基於磁帶的攝影機),將此選項設定為 false 會導致僅擷取指定像素格式的提取視訊影格。將此選項設定為 true 會導致接收未經修改的原始 DV 串流。
3.3.2 範例
- 列印 AVFoundation 支援的裝置列表並退出
$ ffmpeg -f avfoundation -list_devices true -i ""
- 從視訊裝置 0 錄製視訊,並從音訊裝置 0 錄製音訊到 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
- 從合適的輸入裝置錄製原始 DV 資料,並將輸出寫入 out.dv
$ ffmpeg -f avfoundation -capture_raw_data true -i "zr100:none" out.dv
3.4 bktr
BSD 視訊輸入裝置。已棄用,將被移除 - 如果您有興趣維護它,請聯絡開發人員。
3.4.1 選項
- framerate
設定影格率。
- video_size
設定視訊影格大小。預設值為
vga
。- standard
-
可用值為
- ‘pal’
- ‘ntsc’
- ‘secam’
- ‘paln’
- ‘palm’
- ‘ntscj’
3.5 decklink
decklink 輸入裝置為 Blackmagic DeckLink 裝置提供擷取功能。
要啟用此輸入裝置,您需要 Blackmagic DeckLink SDK,並且需要使用適當的 --extra-cflags
和 --extra-ldflags
進行配置。在 Windows 上,您需要通過 widl
執行 IDL 檔案。
DeckLink 對其支援的格式非常挑剔。輸入的像素格式可以使用 raw_format 設定。影格率和視訊大小必須使用 -list_formats 1
為您的裝置確定。音訊取樣率始終為 48 kHz,聲道數可以是 2、8 或 16。請注意,所有音訊聲道都捆綁在一個單一音軌中。
3.5.1 選項
- list_devices
如果設定為 true,則列印裝置列表並退出。預設值為 false。此選項已棄用,請使用 ffmpeg 的
-sources
選項列出可用的輸入裝置。- list_formats
如果設定為 true,則列印支援的格式列表並退出。預設值為 false。
- format_code <FourCC>
這會將輸入視訊格式設定為 FourCC 給出的格式。要查看您的裝置支援的值,請使用 list_formats。請注意,有一個 FourCC 'pal ' 也可以用作 pal(3 個字母)。預設行為是自動偵測輸入視訊格式(如果硬體支援)。
- raw_format
設定擷取的視訊的像素格式。可用值為
- ‘auto’
-
這是預設值,表示 8 位元 YUV 422 或 8 位元 ARGB(如果使用格式自動偵測),否則為 8 位元 YUV 422。
- ‘uyvy422’
-
8 位元 YUV 422。
- ‘yuv422p10’
-
10 位元 YUV 422。
- ‘argb’
-
8 位元 RGB。
- ‘bgra’
-
8 位元 RGB。
- ‘rgb10’
-
10 位元 RGB。
- teletext_lines
如果設定為非零值,則將從垂直輔助資料中擷取額外的圖文電視串流。支援 SD PAL (576i) 和 HD (1080i 或 1080p) 來源。對於 HD 來源,將解碼 OP47 封包。
此選項是擷取的 SD PAL VBI 行的位元遮罩,具體而言是第 6 行到第 22 行,以及第 318 行到第 335 行。第 6 行是遮罩中的 LSB。將忽略不包含圖文電視資訊的選定行。您可以使用特殊的 all 常數來選擇所有可能的行,或使用 standard 跳過與所有接收器不相容的第 6、318 和 319 行。
對於 SD 來源,ffmpeg 需要使用
--enable-libzvbi
編譯。對於 HD 來源,在較舊(4K 前)的 DeckLink 卡型號上,您必須以 10 位元模式擷取。- channels
定義要擷取的音訊聲道數。必須為 ‘2’、‘8’ 或 ‘16’。預設值為 ‘2’。
- duplex_mode
設定 decklink 裝置雙工/設定檔模式。必須為 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 預設值為 ‘unset’。
注意:DeckLink SDK 11.0 已將雙工屬性替換為設定檔屬性。對於 DeckLink Duo 2 和 DeckLink Quad 2,設定檔在任何 2 個使用相同連接器的子裝置之間共享。對於 DeckLink 8K Pro,設定檔在所有 4 個子裝置之間共享。因此 DeckLink 8K Pro 支援四個設定檔。
DeckLink 8K Pro 的有效設定檔模式(使用 DeckLink SDK >= 11.0):‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’
DeckLink Quad 2 和 DeckLink Duo 2 的有效設定檔模式:‘half’、‘full’
- timecode_format
要包含在影格和視訊串流元資料中的時間碼類型。必須為 ‘none’、‘rp188vitc’、‘rp188vitc2’、‘rp188ltc’、‘rp188hfr’、‘rp188any’、‘vitc’、‘vitc2’ 或 ‘serial’。預設值為 ‘none’(不包含)。
為了正確支援 50/60 fps 時間碼,對於 >30 fps 內容,查詢的時間碼類型順序為 HFR、VITC1、VITC2 和 LTC。請注意,這與 DeckLink API 使用的順序略有不同,後者為 HFR、VITC1、LTC、VITC2。
- video_input
設定視訊輸入源。必須為 ‘unset’、‘sdi’、‘hdmi’、‘optical_sdi’、‘component’、‘composite’ 或 ‘s_video’。預設值為 ‘unset’。
- audio_input
設定音訊輸入源。必須為 ‘unset’、‘embedded’、‘aes_ebu’、‘analog’、‘analog_xlr’、‘analog_rca’ 或 ‘microphone’。預設值為 ‘unset’。
- video_pts
設定視訊封包時間戳記來源。必須為 ‘video’、‘audio’、‘reference’、‘wallclock’ 或 ‘abs_wallclock’。預設值為 ‘video’。
- audio_pts
設定音訊封包時間戳記來源。必須為 ‘video’、‘audio’、‘reference’、‘wallclock’ 或 ‘abs_wallclock’。預設值為 ‘audio’。
- draw_bars
如果設定為 ‘true’,則在訊號遺失時繪製色條。預設值為 ‘true’。此選項已棄用,請使用
signal_loss_action
選項。- signal_loss_action
設定在訊號遺失時要採取的動作。接受以下值之一
- 1, none
訊號遺失時不執行任何操作。這通常會導致黑色影格。
- 2, bars
訊號遺失時繪製色條。僅支援 8 位元輸入訊號。
- 3, repeat
訊號遺失時重複最後一個視訊影格。
預設值為 ‘bars’。
- queue_size
設定最大輸入緩衝區大小(以位元組為單位)。如果緩衝達到此值,則會丟棄傳入的影格。預設值為 ‘1073741824’。
- audio_depth
設定音訊取樣位元深度。必須為 ‘16’ 或 ‘32’。預設值為 ‘16’。
- decklink_copyts
如果設定為 true,則時間戳記會按原樣轉發,而不會移除初始偏移量。預設值為 false。
- timestamp_align
擷取開始時間對齊(以秒為單位)。如果設定為非零值,則會丟棄輸入影格,直到系統時間戳記與配置的值對齊。允許高達一個影格持續時間的對齊差異。這對於在為「N 向」冗餘部署的 N 個不同硬體裝置之間保持輸入同步非常有用。不同硬體裝置的系統時間應在使用此選項之前與 NTP 或 PTP 等協定同步。請注意,此方法並非萬無一失。在某些邊緣情況下,由於作業系統中的執行緒排程抖動,輸入同步可能不會發生。同步可能會錯誤 1 個影格,或者在更罕見的情況下錯誤 timestamp_align 秒。預設值為 ‘0’。
- wait_for_tc (bool)
丟棄影格,直到收到帶有時間碼的影格。有時串列時間碼不會與第一個輸入影格一起接收。如果發生這種情況,儲存的串流時間碼將不準確。如果此選項設定為 true,則會丟棄輸入影格,直到收到帶有時間碼的影格。timecode_format 選項必須指定。預設值為 false。
- enable_klv(bool)
如果設定為 true,則從 VANC 擷取 KLV 資料並輸出 KLV 封包。KLV VANC 封包基於 MID 和 PSC 欄位聯接,並聚合到一個 KLV 封包中。預設值為 false。
3.5.2 範例
- 列出輸入裝置
ffmpeg -sources decklink
- 列出支援的格式
ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro'
- 以 1080i50 擷取視訊片段
ffmpeg -format_code Hi50 -f decklink -i 'Intensity Pro' -c:a copy -c:v copy output.avi
- 以 1080i50 10 位元擷取視訊片段
ffmpeg -raw_format yuv422p10 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
- 以 16 個音訊聲道擷取 1080i50 的視訊片段
ffmpeg -channels 16 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
3.6 dshow
Windows DirectShow 輸入裝置。
當 FFmpeg 使用 mingw-w64 專案建置時,會啟用 DirectShow 支援。目前僅支援音訊和視訊裝置。
可以將多個裝置作為單獨的輸入開啟,但也可以在同一個輸入上開啟它們,這應該可以提高它們之間的同步性。
輸入名稱應採用以下格式
TYPE=NAME[:TYPE=NAME]
其中 TYPE 可以是 audio 或 video,而 NAME 是裝置的名稱或備用名稱。
3.6.1 選項
如果未指定任何選項,則使用裝置的預設值。如果裝置不支援請求的選項,則開啟將失敗。
- video_size
設定擷取的視訊中的視訊大小。
- framerate
設定擷取的視訊中的影格率。
- sample_rate
設定擷取的音訊的取樣率(以 Hz 為單位)。
- sample_size
設定擷取的音訊的取樣大小(以位元為單位)。
- channels
設定擷取的音訊中的聲道數。
- list_devices
如果設定為 true,則列印裝置列表並退出。
- list_options
如果設定為 true,則列印選定裝置的選項列表並退出。
- video_device_number
為具有相同名稱的裝置設定視訊裝置號碼(從 0 開始,預設為 0)。
- audio_device_number
為具有相同名稱的裝置設定音訊裝置號碼(從 0 開始,預設為 0)。
- pixel_format
選擇 DirectShow 要使用的像素格式。僅當未設定視訊編解碼器或設定為 rawvideo 時,才可以設定此項。
- audio_buffer_size
設定音訊裝置緩衝區大小(以毫秒為單位)(這會直接影響延遲,具體取決於裝置)。預設為使用音訊裝置的預設緩衝區大小(通常為 500 毫秒的倍數)。將此值設定得太低可能會降低效能。另請參閱 http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx
- video_pin_name
通過名稱或備用名稱選擇要使用的視訊擷取針腳。
- audio_pin_name
通過名稱或備用名稱選擇要使用的音訊擷取針腳。
- crossbar_video_input_pin_number
為交叉開關裝置選擇視訊輸入針腳號碼。這將路由到交叉開關裝置的視訊解碼器輸出針腳。請注意,更改此值可能會影響未來的調用(設定新的預設值),直到系統重新啟動。
- crossbar_audio_input_pin_number
為交叉開關裝置選擇音訊輸入針腳號碼。這將路由到交叉開關裝置的音訊解碼器輸出針腳。請注意,更改此值可能會影響未來的調用(設定新的預設值),直到系統重新啟動。
- show_video_device_dialog
如果設定為 true,則在擷取開始之前,彈出顯示對話方塊給最終使用者,允許他們手動更改視訊濾波器屬性和配置。請注意,對於交叉開關裝置,有時可能需要在此對話方塊中調整值,以在 PAL (25 fps) 和 NTSC (29.97) 輸入影格率、大小、交錯等之間切換。更改這些值可以啟用不同的掃描率/影格率,並避免底部出現綠條、閃爍的掃描線等。請注意,對於某些裝置,更改這些屬性也可能會影響未來的調用(設定新的預設值),直到系統重新啟動。
- show_audio_device_dialog
如果設定為 true,則在擷取開始之前,彈出顯示對話方塊給最終使用者,允許他們手動更改音訊濾波器屬性和配置。
- show_video_crossbar_connection_dialog
如果設定為 true,則在擷取開始之前,彈出顯示對話方塊給最終使用者,允許他們在開啟視訊裝置時手動修改交叉開關針腳路由。
- show_audio_crossbar_connection_dialog
如果設定為 true,則在擷取開始之前,彈出顯示對話方塊給最終使用者,允許他們在開啟音訊裝置時手動修改交叉開關針腳路由。
- show_analog_tv_tuner_dialog
如果設定為 true,則在擷取開始之前,彈出顯示對話方塊給最終使用者,允許他們手動修改電視頻道和頻率。
- show_analog_tv_tuner_audio_dialog
如果設定為 true,則在擷取開始之前,彈出顯示對話方塊給最終使用者,允許他們手動修改電視音訊(例如單聲道與立體聲、語言 A、B 或 C)。
- audio_device_load
從檔案載入音訊擷取濾波器裝置,而不是按名稱搜尋。如果濾波器支援,它也可能載入其他參數。要使用此功能,必須指定音訊擷取來源,但它可以是任何東西,甚至是假的。
- audio_device_save
將目前使用的音訊擷取濾波器裝置及其參數(如果濾波器支援)儲存到檔案。如果存在同名檔案,則會覆蓋它。
- video_device_load
從檔案載入視訊擷取濾波器裝置,而不是按名稱搜尋。如果濾波器支援,它也可能載入其他參數。要使用此功能,必須指定視訊擷取來源,但它可以是任何東西,甚至是假的。
- video_device_save
將目前使用的視訊擷取濾波器裝置及其參數(如果濾波器支援)儲存到檔案。如果存在同名檔案,則會覆蓋它。
- use_video_device_timestamps
如果設定為 false,則視訊影格的時間戳記將從系統時鐘而不是擷取裝置提供的時間戳記衍生而來。這允許繞過提供不可靠時間戳記的裝置。
3.6.2 範例
- 列印 DirectShow 支援的裝置列表並退出
$ ffmpeg -list_devices true -f dshow -i dummy
- 開啟視訊裝置 Camera
$ ffmpeg -f dshow -i video="Camera"
- 開啟第二個名稱為 Camera 的視訊裝置
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
- 開啟視訊裝置 Camera 和音訊裝置 Microphone
$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
- 列印選定裝置中支援的選項列表並退出
$ ffmpeg -list_options true -f dshow -i video="Camera"
- 通過名稱或備用名稱指定針腳名稱以進行擷取,指定備用裝置名稱
$ 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"
- 配置交叉開關裝置,指定交叉開關針腳,允許使用者在啟動時調整視訊擷取屬性
$ 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"
3.7 fbdev
Linux 影格緩衝區輸入裝置。
Linux 影格緩衝區是一個圖形硬體獨立的抽象層,用於在電腦螢幕上顯示圖形,通常在控制台上。它通過檔案裝置節點存取,通常為 /dev/fb0。
有關更詳細的資訊,請閱讀 Linux 原始碼樹中包含的檔案 Documentation/fb/framebuffer.txt。
另請參閱 http://linux-fbdev.sourceforge.net/ 和 fbset(1)。
要使用 ffmpeg
從影格緩衝區裝置 /dev/fb0 錄製
ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi
您可以使用以下命令拍攝單個螢幕截圖影像
ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg
3.7.1 選項
- framerate
設定影格率。預設值為 25。
3.8 gdigrab
基於 Win32 GDI 的螢幕擷取裝置。
此裝置允許您擷取 Windows 上顯示器的一個區域。
輸入檔案名稱的選項包括以下元素,例如
desktop
或
title=window_title
或
hwnd=window_hwnd
第一個選項將擷取整個桌面,或桌面的固定區域。第二個和第三個選項將改為擷取單個視窗的內容,而不管其在螢幕上的位置如何。
例如,要使用 ffmpeg
抓取整個桌面
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
抓取名為「計算機」的視窗的內容
ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg
3.8.1 選項
- draw_mouse
指定是否繪製滑鼠指標。使用值
0
不繪製指標。預設值為1
。- framerate
設定抓取影格率。預設值為
ntsc
,對應於30000/1001
的影格率。- show_region
在螢幕上顯示抓取區域。
如果 show_region 指定為
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
當使用 video_size 擷取區域時,設定距螢幕或桌面左邊緣的距離。
請注意,偏移量計算是從 Windows 上主監視器的左上角開始的。如果您的監視器位於主監視器的左側,則需要使用負 offset_x 值將區域移動到該監視器。
- offset_y
當使用 video_size 擷取區域時,設定距螢幕或桌面頂部邊緣的距離。
請注意,偏移量計算是從 Windows 上主監視器的左上角開始的。如果您的監視器位於主監視器的上方,則需要使用負 offset_y 值將區域移動到該監視器。
3.9 iec61883
使用 libiec61883 的 FireWire DV/HDV 輸入裝置。
要啟用此輸入裝置,您需要在系統上安裝 libiec61883、libraw1394 和 libavc1394。使用配置選項 --enable-libiec61883
使用啟用的裝置進行編譯。
iec61883 擷取裝置支援從通過 IEEE1394 (FireWire) 連接的視訊裝置擷取,使用 libiec61883 和新的 Linux FireWire 堆疊 (juju)。這是 Linux Kernel 2.6.37 及更高版本中的預設 DV/HDV 輸入方法,因為舊的 FireWire 堆疊已被移除。
指定要用作輸入檔案的 FireWire 連接埠,或 "auto" 以選擇第一個連接的連接埠。
3.9.1 選項
- dvtype
覆寫 DV/HDV 的自動偵測。僅當自動偵測不起作用,或者應禁止使用不同的裝置類型時,才應使用此功能。將 DV 裝置視為 HDV(或反之亦然)將不起作用,並導致未定義的行為。支援值 auto、dv 和 hdv。
- dvbuffer
設定傳入資料的緩衝區最大大小(以影格為單位)。對於 DV,這是一個確切的值。對於 HDV,它不是影格精確的,因為 HDV 沒有固定的影格大小。
- dvguid
通過指定其 GUID 來選擇擷取裝置。擷取只會從指定的裝置執行,如果找不到具有給定 GUID 的裝置,則會失敗。如果同時連接了多個裝置,這對於選擇輸入非常有用。查看 /sys/bus/firewire/devices 以找出 GUID。
3.9.2 範例
- 抓取並顯示 FireWire DV/HDV 裝置的輸入。
ffplay -f iec61883 -i auto
- 抓取並錄製 FireWire DV/HDV 裝置的輸入,如果來源是 HDV,則使用 100000 個封包的封包緩衝區。
ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
3.10 jack
JACK 輸入裝置。
要在配置期間啟用此輸入裝置,您需要在系統上安裝 libjack。
JACK 輸入裝置建立一個或多個 JACK 可寫入用戶端,每個聲道一個用戶端,名稱為 client_name:input_N,其中 client_name 是應用程式提供的名稱,而 N 是識別聲道的號碼。每個可寫入用戶端都會將獲取的資料發送到 FFmpeg 輸入裝置。
一旦您建立了一個或多個 JACK 可讀取用戶端,您需要將它們連接到一個或多個 JACK 可寫入用戶端。
要連接或斷開 JACK 用戶端,您可以使用 jack_connect
和 jack_disconnect
程式,或通過圖形介面執行,例如使用 qjackctl
。
要列出 JACK 用戶端及其屬性,您可以調用命令 jack_lsp
。
以下範例顯示瞭如何使用 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/
3.10.1 選項
- channels
設定聲道數。預設值為 2。
3.11 kmsgrab
KMS 視訊輸入裝置。
擷取與指定 CRTC 或平面關聯的 KMS 掃描輸出影格緩衝區作為 DRM 物件,該物件可以傳遞給其他硬體功能。
需要 DRM 主控或 CAP_SYS_ADMIN 才能執行。
如果您不理解所有這些含義,您可能不需要這個。請改為查看 x11grab。
3.11.1 選項
- device
要在其上擷取的 DRM 裝置。預設值為 /dev/dri/card0。
- format
影格緩衝區的像素格式。如果您執行的是 Linux 5.7 或更高版本,則可以自動偵測到此格式,但對於早期版本,則需要提供此格式。預設值為 bgr0,這是 Linux 控制台和 Xorg X 伺服器使用的最常見格式。
- format_modifier
在輸出影格上發出訊號的格式修飾符。這對於正確導入到某些 API 中是必要的。如果您執行的是 Linux 5.7 或更高版本,則可以自動偵測到它,但在早期版本中需要時需要明確提供。有關可能的值,請參閱 libdrm 文件。
- crtc_id
KMS CRTC ID,用於定義擷取來源。將使用給定 CRTC 上的第一個活動平面。
- plane_id
KMS 平面 ID,用於定義擷取來源。如果未指定 crtc_id 和 plane_id,則預設為找到的第一個活動平面。
- framerate
要擷取的影格率。這與任何頁面翻轉或影格緩衝區更改不同步 - 它只定義影格緩衝區的取樣間隔。以快於影格緩衝區更新率的速度取樣將產生具有相同內容的獨立影格。預設值為
30
。
3.11.2 範例
- 從第一個活動平面擷取,將結果下載到正常影格並編碼。這僅在影格緩衝區是線性和可對應的情況下才有效 - 否則,結果可能會混亂或下載失敗。
ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4
- 以 60fps 從 CRTC ID 42 擷取,將結果對應到 VAAPI,轉換為 NV12 並編碼為 H.264。
ffmpeg -crtc_id 42 -framerate 60 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -c:v h264_vaapi output.mp4
- 要僅擷取平面的一部分,可以裁剪輸出 - 這可以用於擷取單個視窗,只要它具有已知的絕對位置和大小即可。例如,要擷取和編碼 1920x1080 平面的中間四分之一
ffmpeg -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,crop=960:540:480:270,scale_vaapi=960:540:nv12' -c:v h264_vaapi output.mp4
3.12 lavfi
Libavfilter 輸入虛擬裝置。
此輸入裝置從 libavfilter 濾波器圖的開放輸出墊讀取資料。
對於每個濾波器圖開放輸出,輸入裝置將建立一個對應的串流,該串流對應到產生的輸出。濾波器圖通過選項 graph 指定。
3.12.1 選項
- graph
指定要用作輸入的濾波器圖。每個視訊開放輸出都必須標記為 "outN" 形式的唯一字串,其中 N 是從 0 開始的數字,對應於裝置產生的對應輸入串流。第一個未標記的輸出自動分配給 "out0" 標籤,但所有其他輸出都需要明確指定。
後綴 "+subcc" 可以附加到輸出標籤,以建立一個額外的串流,其中包含附加到該輸出的隱藏式字幕封包(實驗性;目前僅適用於 EIA-608 / CEA-708)。子 CC 串流在所有正常串流之後按相應串流的順序建立。例如,如果存在 "out19+subcc"、"out7+subcc" 和最多 "out42",則串流 #43 是串流 #7 的子 CC,串流 #44 是串流 #19 的子 CC。
如果未指定,則預設為為輸入裝置指定的檔案名稱。
- graph_file
設定要讀取並發送到其他濾波器的濾波器圖的檔案名稱。濾波器圖的語法與選項 graph 指定的語法相同。
- dumpgraph
將圖傾印到 stderr。
3.12.2 範例
- 建立彩色視訊串流並使用
ffplay
播放ffplay -f lavfi -graph "color=c=pink [out0]" dummy
- 與前面的範例相同,但使用檔案名稱指定圖描述,並省略 "out0" 標籤
ffplay -f lavfi color=c=pink
- 建立三個不同的視訊測試過濾來源並播放它們
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
- 使用 amovie 來源從檔案讀取音訊串流並使用
ffplay
播放ffplay -f lavfi "amovie=test.wav"
- 讀取音訊串流和視訊串流並使用
ffplay
播放ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
- 將解碼的影格傾印到影像,並將隱藏式字幕傾印到 RCWT 備份
ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
3.13 libcdio
基於 libcdio 的 Audio-CD 輸入裝置。
要在配置期間啟用此輸入裝置,您需要在系統上安裝 libcdio。它需要配置選項 --enable-libcdio
。
此裝置允許播放和抓取 Audio-CD。
例如,要使用 ffmpeg
複製 /dev/sr0 中的整個 Audio-CD,您可以執行以下命令
ffmpeg -f libcdio -i /dev/sr0 cd.wav
3.13.1 選項
- speed
設定磁碟機讀取速度。預設值為 0。
速度以 CD-ROM 速度單位指定。速度通過 libcdio
cdio_cddap_speed_set
函數設定。在許多 CD-ROM 磁碟機上,指定的值過大將導致使用最快速度。- paranoia_mode
設定偏執恢復模式標誌。它接受以下值之一
- ‘disable’
- ‘verify’
- ‘overlap’
- ‘neverskip’
- ‘full’
預設值為 ‘disable’。
有關可用恢復模式的更多資訊,請參閱 paranoia 專案文件。
3.14 libdc1394
基於 libdc1394 和 libraw1394 的 IIDC1394 輸入裝置。
需要配置選項 --enable-libdc1394
。
3.14.1 選項
- framerate
設定影格率。預設值為
ntsc
,對應於30000/1001
的影格率。- pixel_format
選擇像素格式。預設值為
uyvy422
。- video_size
設定視訊大小,以字串形式給出,例如
640x480
或hd720
。預設值為qvga
。
3.15 openal
OpenAL 輸入裝置在具有工作 OpenAL 1.1 實作的所有系統上提供音訊擷取。
要在配置期間啟用此輸入裝置,您需要在系統上安裝 OpenAL 標頭和庫,並需要使用 --enable-openal
配置 FFmpeg。
OpenAL 標頭和庫應作為 OpenAL 實作的一部分提供,或作為額外下載(SDK)。根據您的安裝,您可能需要通過 --extra-cflags
和 --extra-ldflags
指定其他標誌,以允許建置系統找到 OpenAL 標頭和庫。
以下是不完整的 OpenAL 實作列表
- Creative
官方 Windows 實作,為支援的裝置提供硬體加速和軟體後備。請參閱 http://openal.org/。
- OpenAL Soft
可移植、開放原始碼 (LGPL) 軟體實作。包括 Windows、Linux、Solaris 和 BSD 作業系統上最常見的聲音 API 的後端。請參閱 http://kcat.strangesoft.net/openal.html。
- Apple
OpenAL 是 Core Audio 的一部分,Core Audio 是官方 Mac OS X 音訊介面。請參閱 http://developer.apple.com/technologies/mac/audio-and-video.html
此裝置允許從通過 OpenAL 處理的音訊輸入裝置擷取。
您需要在提供的檔案名稱中指定要擷取的裝置名稱。如果提供空字串,裝置將自動選擇預設裝置。您可以使用選項 list_devices 獲取支援的裝置列表。
3.15.1 選項
- channels
設定擷取的音訊中的聲道數。目前僅支援值 1(單聲道)和 2(立體聲)。預設值為 2。
- sample_size
設定擷取的音訊的取樣大小(以位元為單位)。目前僅支援值 8 和 16。預設值為 16。
- sample_rate
設定擷取的音訊的取樣率(以 Hz 為單位)。預設值為 44.1k。
- list_devices
如果設定為 true,則列印裝置列表並退出。預設值為 false。
3.15.2 範例
列印 OpenAL 支援的裝置列表並退出
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
從 OpenAL 裝置 DR-BT101 via PulseAudio 擷取
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
從預設裝置擷取(注意空字串「」作為檔案名稱)
$ ffmpeg -f openal -i '' out.ogg
同時從兩個裝置擷取,在同一個 ffmpeg
命令中寫入到兩個不同的檔案
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
注意:並非所有 OpenAL 實作都支援多個同時擷取 - 如果以上方法不起作用,請嘗試最新的 OpenAL Soft。
3.16 oss
開放聲音系統輸入裝置。
提供給輸入裝置的檔案名稱是表示 OSS 輸入裝置的裝置節點,通常設定為 /dev/dsp。
例如,要使用 ffmpeg
從 /dev/dsp 抓取,請使用以下命令
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
有關 OSS 的更多資訊,請參閱:http://manuals.opensound.com/usersguide/dsp.html
3.16.1 選項
- sample_rate
設定取樣率,單位為 Hz。預設值為 48000。
- channels
設定聲道數。預設值為 2。
3.17 pulse
PulseAudio 輸入裝置。
要啟用此輸出裝置,您需要使用 --enable-libpulse
配置 FFmpeg。
提供給輸入裝置的檔案名稱是來源裝置或字串 "default"
要列出 PulseAudio 來源裝置及其屬性,您可以調用命令 pactl list sources
。
有關 PulseAudio 的更多資訊,請訪問 http://www.pulseaudio.org。
3.17.1 選項
- server
連接到特定的 PulseAudio 伺服器,由 IP 位址指定。未提供時使用預設伺服器。
- name
指定 PulseAudio 在顯示活動用戶端時將使用的應用程式名稱,預設情況下它是
LIBAVFORMAT_IDENT
字串。- stream_name
指定 PulseAudio 在顯示活動串流時將使用的串流名稱,預設情況下它是 "record"。
- sample_rate
指定取樣率(以 Hz 為單位),預設情況下使用 48kHz。
- channels
指定使用的聲道,預設情況下設定為 2(立體聲)。
- frame_size
此選項不執行任何操作,並且已棄用。
- fragment_size
指定 PulseAudio 中最小緩衝片段的大小(以位元組為單位),它會影響音訊延遲。預設情況下,它設定為 50 毫秒的資料量。
- wallclock
使用目前時間設定初始 PTS。預設值為 1。
3.17.2 範例
從預設裝置錄製串流
ffmpeg -f pulse -i default /tmp/pulse.wav
3.18 sndio
sndio 輸入裝置。
要在配置期間啟用此輸入裝置,您需要在系統上安裝 libsndio。
提供給輸入裝置的檔案名稱是表示 sndio 輸入裝置的裝置節點,通常設定為 /dev/audio0。
例如,要使用 ffmpeg
從 /dev/audio0 抓取,請使用以下命令
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
3.18.1 選項
- sample_rate
設定取樣率,單位為 Hz。預設值為 48000。
- channels
設定聲道數。預設值為 2。
3.19 video4linux2, v4l2
Video4Linux2 輸入視訊裝置。
"v4l2" 可以用作 "video4linux2" 的別名。
如果 FFmpeg 是使用 v4l-utils 支援建置的(通過使用 --enable-libv4l2
配置選項),則可以使用 -use_libv4l2
輸入裝置選項來使用它。
要抓取的裝置名稱是一個檔案裝置節點,通常 Linux 系統在裝置(例如 USB 網路攝影機)插入系統時傾向於自動建立此類節點,並且具有 /dev/videoN 類型的名稱,其中 N 是與裝置關聯的數字。
Video4Linux2 裝置通常支援一組有限的 widthxheight 大小和影格率。您可以使用 -list_formats all
檢查 Video4Linux2 裝置支援哪些格式。某些裝置(例如電視卡)支援一個或多個標準。可以使用 -list_standards all
列出所有支援的標準。
時間戳記的時間基底為 1 微秒。根據核心版本和配置,時間戳記可能來自即時時鐘(原點在 Unix Epoch)或單調時鐘(原點通常在啟動時,不受 NTP 或手動更改時鐘的影響)。-timestamps abs 或 -ts abs 選項可用於強制轉換為即時時鐘。
以下是 video4linux2 裝置與 ffmpeg
和 ffplay
的一些使用範例
- 列出 video4linux2 裝置支援的格式
ffplay -f video4linux2 -list_formats all /dev/video0
- 抓取並顯示 video4linux2 裝置的輸入
ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
- 抓取並錄製 video4linux2 裝置的輸入,將影格率和大小保留為先前設定的值
ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
有關 Video4Linux 的更多資訊,請查看 http://linuxtv.org/。
3.19.1 選項
- standard
設定標準。必須是支援的標準的名稱。要獲取支援的標準列表,請使用 list_standards 選項。
- channel
設定輸入頻道號碼。預設值為 -1,表示使用先前選擇的頻道。
- video_size
設定視訊影格大小。參數必須是 WIDTHxHEIGHT 形式的字串或有效的尺寸縮寫。
- pixel_format
選擇像素格式(僅對原始視訊輸入有效)。
- input_format
設定首選像素格式(對於原始視訊)或編解碼器名稱。當有多種格式可用時,此選項允許選擇輸入格式。
- framerate
設定首選視訊影格率。
- list_formats
列出可用格式(支援的像素格式、編解碼器和影格大小)並退出。
可用值為
- ‘all’
顯示所有可用的格式(壓縮和未壓縮)。
- ‘raw’
僅顯示原始視訊(未壓縮)格式。
- ‘compressed’
僅顯示壓縮格式。
- list_standards
列出支援的標準並退出。
可用值為
- ‘all’
顯示所有支援的標準。
- timestamps, ts
設定抓取影格的時間戳記類型。
可用值為
- ‘default’
使用來自核心的時間戳記。
- ‘abs’
使用絕對時間戳記(系統時鐘)。
- ‘mono2abs’
強制從單調時間戳記轉換為絕對時間戳記。
預設值為
default
。- use_libv4l2
使用 libv4l2 (v4l-utils) 轉換函數。預設值為 0。
3.20 vfwcap
VfW(Video for Windows)擷取輸入裝置。
作為輸入傳遞的檔案名稱是擷取驅動程式號碼,範圍從 0 到 9。您可以使用 "list" 作為檔案名稱來列印驅動程式列表。任何其他檔案名稱都將被解釋為裝置號碼 0。
3.20.1 選項
- video_size
設定視訊影格大小。
- framerate
設定抓取影格率。預設值為
ntsc
,對應於30000/1001
的影格率。
3.21 x11grab
X11 視訊輸入裝置。
要在配置期間啟用此輸入裝置,您需要在系統上安裝 libxcb。它將在配置期間自動偵測。
此裝置允許擷取 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
3.21.1 選項
- select_region
指定是否使用指標以圖形方式選擇抓取區域。值為
1
會提示使用者通過點擊和拖曳以圖形方式選擇抓取區域。單擊但不拖曳將選擇整個螢幕。寬度或高度為零的區域也將選擇整個螢幕。此選項會覆蓋 video_size、grab_x 和 grab_y 選項。預設值為0
。- draw_mouse
draw_mouse
- 指定是否繪製滑鼠指標。值為
0
指定不繪製指標。預設值為1
。 follow_mouse
使抓取區域跟隨滑鼠。參數可以是
centered
或像素數 PIXELS。例如
ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
當指定為 "centered" 時,抓取區域跟隨滑鼠指標,並使指標保持在區域的中心;否則,僅當滑鼠指標到達 PIXELS(大於零)到區域邊緣時,區域才會跟隨。
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
,則抓取區域將在螢幕上指示。使用此選項,如果僅抓取螢幕的一部分,則很容易知道正在抓取什麼。- 僅當滑鼠指標到達邊緣 100 像素以內時才跟隨
region_border
例如
ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
如果使用 -show_region 1,則設定區域邊框厚度。範圍為 1 到 128,預設值為 3(僅限於基於 XCB 的 x11grab)。
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
- 使用 follow_mouse
window_id
抓取此視窗,而不是整個螢幕。預設值為 0,這對應於整個螢幕(根視窗)。
可以使用
xwininfo
程式找到視窗的 ID,可能帶有選項 -tree 和 -root。如果視窗稍後被放大,則不會錄製新區域。當視窗關閉、取消對應(即圖示化)或縮小到超出視訊大小(預設為初始視窗大小)時,視訊結束。
- video_size
此選項會停用選項 follow_mouse 和 select_region。
- video_size
- grab_x
grab_y
4 輸出裝置
設定抓取區域座標。它們表示為相對於 X11 視窗左上角的偏移量,並對應於裝置名稱中的 x_offset 和 y_offset 參數。兩個選項的預設值均為 0。
輸出裝置是 FFmpeg 中配置的元素,可以將多媒體資料寫入連接到系統的輸出裝置。
當您配置 FFmpeg 建置時,所有支援的輸出裝置預設為啟用。您可以使用配置選項 "–list-outdevs" 列出所有可用的輸出裝置。
您可以使用配置選項 "–disable-outdevs" 停用所有輸出裝置,並使用選項 "–enable-outdev=OUTDEV" 選擇性地啟用輸出裝置,或者您可以使用選項 "–disable-outdev=OUTDEV" 停用特定的輸入裝置。
ff* 工具的選項 "-devices" 將顯示已啟用的輸出裝置列表。
4.1 alsa
以下是目前可用的輸出裝置的描述。
4.1.1 範例
- ALSA(進階 Linux 聲音架構)輸出裝置。
ffmpeg -i INPUT -f alsa default
- 在預設 ALSA 裝置上播放檔案
ffmpeg -i INPUT -f alsa hw:1,7
4.2 AudioToolbox
在音效卡 1、音訊裝置 7 上播放檔案
AudioToolbox 輸出裝置。
允許在本機輸出到 OSX 上的 CoreAudio 裝置。
輸出檔案名稱可以為空(或 -
),以引用預設系統輸出裝置,或引用使用以下命令顯示的裝置索引的數字:-list_devices true
。
或者,可以使用 -audio_device_index <INDEX> 按索引選擇音訊輸入裝置,覆蓋輸入檔案名稱中給出的任何裝置名稱或索引。
4.2.1 選項
所有可用裝置都可以通過使用 -list_devices true 枚舉,列出所有裝置名稱、UID 和相應的索引。
- -audio_device_index <INDEX>
AudioToolbox 支援以下選項
4.2.2 範例
- 通過索引指定音訊裝置。覆蓋輸出檔案名稱中給出的任何內容。
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
- 列印支援的裝置列表,並將正弦波輸出到預設裝置
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
4.3 caca
將正弦波輸出到索引為 2 的裝置,覆蓋任何輸出檔案名稱
CACA 輸出裝置。
此輸出裝置允許在 CACA 視窗中顯示視訊串流。每個應用程式只允許一個 CACA 視窗,因此您在一個應用程式中只能有一個此輸出裝置的實例。
要啟用此輸出裝置,您需要使用 --enable-libcaca
配置 FFmpeg。libcaca 是一個圖形庫,它輸出文字而不是像素。
4.3.1 選項
- 有關 libcaca 的更多資訊,請查看:http://caca.zoy.org/wiki/libcaca
window_title
- 設定 CACA 視窗標題,如果未指定,則預設為為輸出裝置指定的檔案名稱。
window_size
- 設定 CACA 視窗大小,可以是 widthxheight 形式的字串或視訊大小縮寫。如果未指定,則預設為輸入視訊的大小。
driver
- 設定顯示驅動程式。
algorithm
- 設定抖動演算法。抖動是必要的,因為要渲染的圖片通常比可用的調色盤顏色多得多。接受的值列在
-list_dither algorithms
中。 antialias
- 設定反鋸齒方法。反鋸齒平滑渲染的影像,並避免常見的階梯效應。接受的值列在
-list_dither antialiases
中。 charset
- 設定在渲染文字時將使用的字元集。接受的值列在
-list_dither charsets
中。 color
- 設定渲染文字時要使用的顏色。接受的值列在
-list_dither colors
中。 list_drivers
- 如果設定為 true,則列印可用驅動程式的列表並退出。
list_dither
4.3.2 範例
- 列出與參數相關的可用抖動選項。參數必須是
algorithms
、antialiases
、charsets
、colors
之一。ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
- 以下命令顯示
ffmpeg
輸出是一個 CACA 視窗,強制其大小為 80x25ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
- 顯示可用驅動程式的列表並退出
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
4.4 decklink
顯示可用抖動顏色的列表並退出
decklink 輸出裝置為 Blackmagic DeckLink 裝置提供播放功能。
要啟用此輸出裝置,您需要 Blackmagic DeckLink SDK,並且需要使用適當的 --extra-cflags
和 --extra-ldflags
進行配置。在 Windows 上,您需要通過 widl
執行 IDL 檔案。
4.4.1 選項
- list_devices
DeckLink 對其支援的格式非常挑剔。像素格式始終為 uyvy422,影格率、欄位順序和視訊大小必須使用
-list_formats 1
為您的裝置確定。音訊取樣率始終為 48 kHz。- list_formats
如果設定為 true,則列印支援的格式列表並退出。預設值為 false。
- list_devices
如果設定為 true,則列印裝置列表並退出。預設值為 false。此選項已棄用,請使用 ffmpeg 的
-sinks
選項列出可用的輸出裝置。- duplex_mode
設定 decklink 裝置雙工/設定檔模式。必須為 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 預設值為 ‘unset’。
注意:DeckLink SDK 11.0 已將雙工屬性替換為設定檔屬性。對於 DeckLink Duo 2 和 DeckLink Quad 2,設定檔在任何 2 個使用相同連接器的子裝置之間共享。對於 DeckLink 8K Pro,設定檔在所有 4 個子裝置之間共享。因此 DeckLink 8K Pro 支援四個設定檔。
DeckLink 8K Pro 的有效設定檔模式(使用 DeckLink SDK >= 11.0):‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’
DeckLink Quad 2 和 DeckLink Duo 2 的有效設定檔模式:‘half’、‘full’
- preroll
視訊預先滾動的時間量(以秒為單位)。預設值為 0.5。
- timing_offset
設定使用的輸出上的 genlock 定時像素偏移量。預設值為 ‘unset’。
- link
設定使用的輸出上的 SDI 視訊鏈路配置。必須為 ‘unset’、‘single’ 鏈路 SDI、‘dual’ 鏈路 SDI 或 ‘quad’ 鏈路 SDI。預設值為 ‘unset’。
- sqd
為四鏈路 SDI 輸出啟用方形分割四分割模式。必須為 ‘unset’、‘true’ 或 ‘false’。預設值為 unset。
- level_a
在使用的輸出上啟用 SMPTE Level A 模式。必須為 ‘unset’、‘true’ 或 ‘false’。預設值為 unset。
4.4.2 範例
- vanc_queue_size
ffmpeg -sinks decklink
- 列出支援的格式
ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
- 設定 VANC 資料的最大輸出緩衝區大小(以位元組為單位)。如果緩衝達到此值,則會丟棄傳出的 VANC 資料。預設值為 ‘1048576’。
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
- 列出輸出裝置
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
4.5 fbdev
播放視訊片段
Linux 影格緩衝區是一個圖形硬體獨立的抽象層,用於在電腦螢幕上顯示圖形,通常在控制台上。它通過檔案裝置節點存取,通常為 /dev/fb0。
以非標準影格率或視訊大小播放視訊片段
4.5.1 選項
- Linux 影格緩衝區輸出裝置。
- 有關更詳細的資訊,請閱讀 Linux 原始碼樹中包含的檔案 Documentation/fb/framebuffer.txt。
xoffset
4.5.2 範例
yoffset
ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
另請參閱 http://linux-fbdev.sourceforge.net/ 和 fbset(1)。
4.6 opengl
設定左上角的 x/y 座標。預設值為 0。
在影格緩衝區裝置 /dev/fb0 上播放檔案。所需的像素格式取決於目前的影格緩衝區設定。
OpenGL 輸出裝置。已棄用,將被移除。
要啟用此輸出裝置,您需要使用 --enable-opengl
配置 FFmpeg。
4.6.1 選項
- 此輸出裝置允許渲染到 OpenGL 上下文。上下文可以由應用程式提供,也可以建立預設 SDL 視窗。
當裝置渲染到外部上下文時,應用程式必須實作以下訊息的處理常式:
AV_DEV_TO_APP_CREATE_WINDOW_BUFFER
- 在目前執行緒上建立 OpenGL 上下文。AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER
- 使 OpenGL 上下文成為目前的。AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER
- 交換緩衝區。AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER
- 銷毀 OpenGL 上下文。應用程式還需要通過發送AV_APP_TO_DEV_WINDOW_SIZE
訊息來通知裝置目前的解析度。- background
設定背景顏色。黑色為預設值。
- 有關 libcaca 的更多資訊,請查看:http://caca.zoy.org/wiki/libcaca
no_window
- 設定 CACA 視窗標題,如果未指定,則預設為為輸出裝置指定的檔案名稱。
設定為非零值時停用預設 SDL 視窗。設定時,應用程式必須提供 OpenGL 上下文以及
window_size_cb
和window_swap_buffers_cb
回調。
4.6.2 範例
window_title
ffmpeg -i INPUT -f opengl "window title"
4.7 oss
設定 SDL 視窗標題,如果未指定,則預設為為輸出裝置指定的檔案名稱。設定 no_window 時忽略。
4.8 pulse
window_size
要啟用此輸出裝置,您需要使用 --enable-libpulse
配置 FFmpeg。
設定首選視窗大小,可以是 widthxheight 形式的字串或視訊大小縮寫。如果未指定,則預設為輸入視訊的大小,並根據縱橫比縮小。主要在未設定 no_window 時可用。
4.8.1 選項
- server
連接到特定的 PulseAudio 伺服器,由 IP 位址指定。未提供時使用預設伺服器。
- name
指定 PulseAudio 在顯示活動用戶端時將使用的應用程式名稱,預設情況下它是
LIBAVFORMAT_IDENT
字串。- stream_name
在 SDL 視窗上使用 OpenGL 渲染播放檔案
- device
OSS(開放聲音系統)輸出裝置。
- PulseAudio 輸出裝置。
- 有關 PulseAudio 的更多資訊,請訪問 http://www.pulseaudio.org
stream_name
指定 PulseAudio 在顯示活動串流時將使用的串流名稱,預設情況下,它設定為指定的輸出名稱。
device
- 指定要使用的裝置。未提供時使用預設裝置。可以使用命令
pactl list sinks
獲取輸出裝置列表。 buffer_size
- buffer_duration
控制 PulseAudio 緩衝區的大小和持續時間。小緩衝區可提供更多控制,但需要更頻繁的更新。
4.8.2 範例
buffer_size 指定大小(以位元組為單位),而 buffer_duration 指定持續時間(以毫秒為單位)。
ffmpeg -i INPUT -f pulse "stream name"
4.9 sdl
如果同時提供兩個選項,則使用最高值(使用串流參數將持續時間重新計算為位元組)。如果它們設定為 0(這是預設值),則裝置將使用預設的 PulseAudio 持續時間值。預設情況下,PulseAudio 將緩衝區持續時間設定為大約 2 秒。
prebuf
ffmpeg -i INPUT -f nut -c:v rawvideo - | ffplay -
指定預先緩衝大小(以位元組為單位)。伺服器在緩衝區中至少有 prebuf 位元組可用之前不會開始播放。預設情況下,此選項初始化為與 buffer_size 或 buffer_duration 相同的值(以較大者為準)。
minreq
指定最小請求大小(以位元組為單位)。伺服器不會從用戶端請求少於 minreq 位元組,而是等待直到緩衝區有足夠的空間一次請求更多位元組。建議不要設定此選項,這會將其初始化為伺服器認為合理的值。
在預設伺服器上的預設裝置上播放檔案
4.9.1 選項
- SDL(Simple DirectMedia Layer)輸出裝置。已棄用,將被移除。
為了在 FFmpeg 中進行監控,可以使用管道和視訊播放器(例如 ffplay)
- "sdl2" 可以用作 "sdl" 的別名。
此輸出裝置允許在 SDL 視窗中顯示視訊串流。每個應用程式只允許一個 SDL 視窗,因此您在一個應用程式中只能有一個此輸出裝置的實例。
- 要啟用此輸出裝置,您需要在配置建置時安裝 libsdl。
有關 SDL 的更多資訊,請查看:http://www.libsdl.org/
- 設定 CACA 視窗標題,如果未指定,則預設為為輸出裝置指定的檔案名稱。
window_borderless
- 有關 libcaca 的更多資訊,請查看:http://caca.zoy.org/wiki/libcaca
關閉 SDL 視窗邊框。預設值為 0(啟用視窗邊框)。
- window_enable_quit
- 提供非零值時啟用退出操作(使用視窗按鈕或鍵盤按鍵)。預設值為 1(啟用退出操作)。
window_fullscreen
4.9.2 互動式指令
提供非零值時設定全螢幕模式。預設值為零。
- window_size
設定 SDL 視窗大小,可以是 widthxheight 形式的字串或視訊大小縮寫。如果未指定,則預設為輸入視訊的大小,並根據縱橫比縮小。
4.9.3 範例
window_title
ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
4.10 sndio
設定 SDL 視窗標題,如果未指定,則預設為為輸出裝置指定的檔案名稱。
4.11 v4l2
window_x
4.12 xv
window_y
設定視窗在螢幕上的位置。
4.12.1 選項
- 裝置建立的視窗可以通過以下互動式指令控制。
q, ESC
立即退出裝置。
以下命令顯示
ffmpeg
輸出是一個 SDL 視窗,強制其大小為 qcif 格式sndio 音訊輸出裝置。
Video4Linux2 輸出裝置。
XV (XVideo) 輸出裝置。
- 使用 follow_mouse
此輸出裝置允許在 X Window System 視窗中顯示視訊串流。
- 設定 CACA 視窗標題,如果未指定,則預設為為輸出裝置指定的檔案名稱。
display_name
- window_enable_quit
- 提供非零值時啟用退出操作(使用視窗按鈕或鍵盤按鍵)。預設值為 1(啟用退出操作)。
指定硬體顯示名稱,它決定要使用的顯示和通訊域。
- 有關 libcaca 的更多資訊,請查看:http://caca.zoy.org/wiki/libcaca
顯示名稱或 DISPLAY 環境變數可以是 hostname[:number[.screen_number]] 格式的字串。
hostname 指定顯示器實際連接的主機名稱。number 指定該主機上的顯示伺服器號碼。screen_number 指定要在該伺服器上使用的螢幕。
4.12.2 範例
- 如果未指定,則預設為 DISPLAY 環境變數的值。
ffmpeg -i INPUT OUTPUT -f xv display
- 例如,
dual-headed:0.1
將指定名為「dual-headed」的機器上的顯示器 0 的螢幕 1。ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
5 參見
查看 X11 規範以獲取有關顯示名稱格式的更多詳細資訊。
6 作者
window_id
設定為非零值時,裝置不會建立新視窗,而是使用具有提供的 window_id 的現有視窗。預設情況下,此選項設定為零,裝置會建立自己的視窗。
window_size
設定建立的視窗大小,可以是 widthxheight 形式的字串或視訊大小縮寫。如果未指定,則預設為輸入視訊的大小。設定 window_id 時忽略。
window_x