FFmpeg设备文档

网站翻译由林建有提供支持

1 描述

该文档描述了由libavdevice库提供的输入和输出设备。

2 设备选项

libavdevice库提供了与libavformat相同的接口。即,一个输入设备被视为一个解复用器,一个输出设备被视为一个复用器,它们的接口和通用设备选项与libavformat提供的选项相同(请参阅ffmpeg-formats手册)。

此外,每个输入或输出设备可能支持所谓的私有选项,这些选项针对该组件是特定的。

可以通过在FFmpeg工具中指定-选项 ,或通过显式设置设备中的值AVFormatContext选项或使用libavutil/opt.hAPI进行程序化使用。

3 输入设备

输入设备是FFmpeg中的配置元素,可以访问来自系统附加的多媒体设备的数据。

当您配置FFmpeg构建时,所有支持的输入设备都会默认启用。您可以使用配置选项"–list-indevs"列出所有可用设备。

您可以使用配置选项"–disable-indevs"禁用所有输入设备,并使用选项"–enable-indev=INDEV"来选择性启用一个输入设备,或者使用选项"–disable-indev=INDEV".

禁用特定输入设备。

ff*工具的选项"-devices"将显示支持的输入设备列表。

以下是当前可用输入设备的描述。

ALSA(高级Linux声音架构)输入设备。

要在配置期间启用该输入设备,您的系统需要安装libasound。

该设备允许从ALSA设备捕获。捕获设备的名称必须是一个ALSA卡标识符。

ALSA标识符的语法为:

hw:CARD[,DEV[,SUBDEV]]

其中DEVSUBDEV组件是可选的。

三个参数(按顺序:CARD,DEV,SUBDEV)指定卡号或标识符、设备号和子设备号(-1表示任何设备)。

要查看系统当前识别的卡列表,请检查文件/proc/asound/cards/proc/asound/devices.

例如,要使用ID为0的ALSA设备进行捕获,您可以运行以下命令:ffmpeg from an ALSA device with card id 0, you may run the command:

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级别24+的设备。在配置期间,android_camera的可用性会被自动检测。

该设备允许从集成到Camera2 NDK API的Android设备上的所有相机捕获。

可用的相机会被内部枚举,并可以通过camera_index参数选择。输入文件字符串被忽略。

通常后置相机的索引为0,而前置相机的索引为1。

3.2.1 选项

video_size

设置视频尺寸,格式为字符串,如640x480或hd720。 如果请求的视频尺寸不可用或默认为Android报告的第一个可用配置。

framerate

设置视频帧率。 如果请求帧率不可用或默认为Android报告的第一个可用配置(-1)。

camera_index

设置使用的相机索引。默认值为0。

input_queue_size

设置最大帧缓冲数量。默认值为5。

3.3 avfoundation

AVFoundation输入设备。

AVFoundation是苹果推荐用于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上,您需要通过IDL文件运行widl.

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行为掩码中的最低位。未包含字幕信息的选定行将被忽略。可以使用特殊值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时间码,‘rp188any’查询的时间码类型的顺序为HFR、VITC1、VITC2和LTC(对于>30 fps内容)。注意,这稍有不同于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等协议进行同步。 请注意,这种方法并不绝对可靠。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能无法实现。 同步可能会有一帧的误差,或者在更极少见的情况下为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
    
  • 以1080i50并带有16个音频频道捕获视频片段:
    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支持。 目前仅支持音频和视频设备。

多个设备可以作为单独的输入打开,但它们也可以作为同一输入打开,这应提高它们之间的同步性。

输入名称的格式应为:

类型=名称[:类型=名称]

其中类型可以是音频视频, 而名称则是设备的名称或替代名称。

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(25fps)和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
    
  • 打开视频设备摄像头:
    $ ffmpeg -f dshow -i video="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"
    
  • 通过名称或替代名称指定引脚名称进行捕获,指定替代设备名称:
    $ 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)。

要从帧缓冲设备录制/dev/fb0使用ffmpeg:

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=窗口标题

或者

hwnd=窗口句柄

第一个选项将捕获整个桌面或固定区域的桌面。第二个和第三个选项将改为捕获单个窗口的内容,无论它的位置如何。

例如,使用以下命令捕获整个桌面ffmpeg:

ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg

抓取一个640x480区域,位置为10,20:

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=窗口标题,默认为捕获完整窗口尺寸。

offset_x

在使用视频大小抓取区域时,从屏幕或桌面的左边缘设置距离。

请注意,偏移位置计算是基于Windows上主显示器的左上角。如果您有一个位于主显示器左侧的显示器,则需要使用负的offset_x值以将区域移动到该显示器。

offset_y

在使用视频大小抓取区域时,从屏幕或桌面的上边缘设置距离。

请注意,偏移位置计算是基于Windows上的主显示器的左上角。如果您有一个位于主显示器上方的显示器,则需要使用负的offset_y值以将区域移动到该显示器。

3.9 iec61883

使用libiec61883的FireWire DV/HDV输入设备。

要启用此输入设备,您需要在系统上安装libiec61883、libraw1394和 libavc1394。使用配置选项--enable-libiec61883以启用该设备的编译。

iec61883捕获设备支持从通过IEEE1394(FireWire)连接的视频设备捕获, 使用libiec61883和新的Linux FireWire堆栈(juju)。这是Linux内核2.6.37及更高版本的默认DV/HDV输入方法,因为旧的FireWire堆栈已被移除。

将FireWire端口指定为输入文件,或设置为“auto”以选择第一个已连接的端口。

3.9.1 选项

dvtype

覆盖对 DV/HDV 的自动检测。仅在自动检测无效或希望禁止使用其他设备类型时使用。将 DV 设备当作 HDV(或反之)使用将不起作用并导致未定义的行为。取值auto, dvhdv被支持。

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 设备的输入,使用 100000 包的包缓冲区(如果源是 HDV)。
    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_connectjack_disconnect程序,或者通过图形界面完成,例如使用qjackctl.

要列出 JACK 客户端及其属性,可调用命令jack_lsp.

以下是一个展示如何使用ffmpeg.

# 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

捕获 JACK 可读客户端的示例。有关详细信息,请阅读:

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_idplane_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)。 subcc 流在所有正常流之后创建,按对应流的顺序创建。 例如,如果存在“out19+subcc”, “out7+subcc”直到“out42”, 流#43 是流#7 的 subcc 而流#44 是流#19 的 subcc。

如果未指定,则默认为为输入设备指定的文件名。

graph_file

设置要读取和发送到其他过滤器的过滤图的文件名。过滤图的语法与选项指定的一样.

dumpgraph

将过滤图转储到标准错误。

3.12.2 示例

  • 创建一个彩色视频流并使用ffplay:
    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
    
  • 回放。
    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 的音频 CD 输入设备。

要在配置期间启用此输入设备,您需要在系统中安装 libcdio,并需要配置选项--enable-libcdio.

此设备允许播放和抓取音频 CD。

例如使用ffmpeg复制整个音频 CD,存储在/dev/sr0中, 可以运行命令:

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

3.13.1 选项

speed

设置驱动器读取速度。默认值为 0。

速度以 CD-ROM 速度单位指定。速度通过 libcdiocdio_cddap_speed_set函数设置。在许多 CD-ROM 驱动器上,指定值过大会导致使用最快速度。

paranoia_mode

设置偏执恢复模式标志。它接受以下值之一:

disable
verify
overlap
neverskip
full

默认值为 ‘disable’.

有关可用的恢复模式的更多信息,请参考偏执项目文档。

3.14 libdc1394

基于 libdc1394 和 libraw1394 的 IIDC1394 输入设备。

需要配置选项--enable-libdc1394.

3.14.1 选项

framerate

设置帧速率。默认值为ntsc,对应的帧速率为30000/1001.

pixel_format

选择像素格式。默认值为uyvy422.

video_size

设置视频大小,以字符串形式指定,例如640x480hd720。 默认值为qvga.

3.15 openal

OpenAL 输入设备提供了在具有工作 OpenAL 1.1 实现的所有系统上的音频捕获功能。

要在配置期间启用此输入设备,您需要在系统中安装 OpenAL 头文件和库,并需要通过指定相关选项来配置 FFmpeg。--enable-openal.

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 的一部分,即 macOS 的官方音频接口。 详情请参见http://developer.apple.com/technologies/mac/audio-and-video.html

此设备允许通过 OpenAL 捕获音频输入设备。

需要在提供的文件名中指定捕获设备的名称。如果提供了空字符串,设备将自动选择默认设备。可以通过使用选项list_devices.

3.15.1 选项

channels

设置捕获音频的通道数。目前仅支持1(单声道)和2(立体声)。 默认为2.

sample_size

设置捕获音频的样本大小(单位为位)。目前仅支持816值。默认为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.

例如使用/dev/dsp利用ffmpeg命令进行抓取:

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 输入设备。

要启用此输出设备,您需要使用选项配置 FFmpeg。--enable-libpulse.

要提供给输入设备的文件名是源设备或字符串 "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.

例如,从/dev/audio0使用ffmpeg使用以下命令:

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 设备通常支持有限的一组宽度x高度的尺寸和帧率。您可以使用-list_formats all检查 Video4Linux2 设备支持的格式。 某些设备(如电视卡)支持一个或多个标准。可以使用-list_standards all.

列出所有支持的标准。 时间戳的时间基准是 1 微秒。根据内核版本和配置,时间戳可能来源于实际时间钟(起点为 UNIX 纪元)或单调时钟(通常在启动时起点,不受 NTP 或手动时钟更改影响)。通过-timestamps abs-ts abs选项,可以强制转换为实际时间钟。

以下是 video4linux2 设备与ffmpegffplay:

  • 的使用示例:
    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

设置视频帧大小。参数必须是形式宽度x高度或者一个有效的尺寸缩写。

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(Windows 视频)捕获输入设备。

作为输入传递的文件名是捕获驱动程序编号,范围从 0 到 9。您可以使用“list”作为文件名来打印驱动程序列表。任何其他文件名将被解读为设备号 0。

3.20.1 选项

video_size

设置视频帧大小。

framerate

设置抓取的帧率。默认值是ntsc,对应的帧率为30000/1001.

3.21 x11grab

X11 视频输入设备。

要在配置期间启用此输入设备,您的系统需要安装 libxcb。它将在配置期间自动检测。

此设备允许捕获 X11 显示屏的某一区域。

作为输入传递的文件名语法为:

[主机名]:显示编号.屏幕编号[+x 偏移,y 偏移]

主机名:显示编号.屏幕编号指定要捕获的 X11 显示屏的屏幕名称。主机名可以省略,默认为“localhost”。环境变量DISPLAY包含默认显示屏名称。

x 偏移y 偏移指定与 X11 屏幕左上角边界的偏移量。它们默认为 0。

查看 X11 文档(例如,man X)了解更多详细信息。

使用xdpyinfo程序获取有关 X11 显示屏属性的基本信息(如,搜索“name”或“dimensions”)。

例如,从:0.0使用ffmpeg:

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_xgrab_y选项。默认值为0.

draw_mouse

指定是否绘制鼠标指针。值为0表示不绘制指针。默认值为1.

follow_mouse

使抓取区域跟随鼠标。参数可以是centered或数字像素值像素.

如果指定为“centered”,抓取区域将跟随鼠标指针,并将指针保持在区域中心位置;否则,区域只在鼠标指针靠近区域边界时跟随移动,靠近距离为像素(大于零)。

例如:

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 的 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
window_id

抓取此窗口而不是整个屏幕。默认值为 0,对应整个屏幕(根窗口)。

可以使用xwininfo程序查找窗口 ID,可能带有 -tree 和 -root 选项。

如果窗口稍后被放大,新区域将不会被记录。 当窗口关闭、未映射(即最小化)或缩小到小于视频大小的范围时(默认为初始窗口大小),视频将结束。

此选项禁用选项follow_mouseselect_region.

video_size

设置视频帧大小。默认为整个桌面或窗口。

grab_x
grab_y

设置抓取区域的坐标。它们表示 X11 窗口左上角的偏移量,对应设备名称中的x 偏移y 偏移参数。两个选项的默认值均为 0。

4 输出设备

输出设备是 FFmpeg 中的配置元素,可将多媒体数据写入系统连接的输出设备。

在配置您的 FFmpeg 构建时,默认启用所有支持的输出设备。您可以使用配置选项“–list-outdevs”列出所有可用的设备。

您可以使用配置选项“–disable-outdevs”禁用所有输出设备,或使用选项“–enable-outdev=OUTDEV”选择性启用某个输出设备,或使用选项“–disable-outdev=OUTDEV".

禁用某个特定输入设备。

ff* 工具的“-devices”选项将显示启用的输出设备列表。

以下是当前可用的输出设备的描述。

ALSA(高级 Linux 声音架构)输出设备。

4.1.1 Examples

  • Play a file on default ALSA device:
    ffmpeg -i INPUT -f alsa default
    
  • 在声卡 1、音频设备 7 上播放文件:
    ffmpeg -i INPUT -f alsa hw:1,7
    

4.2 AudioToolbox

AudioToolbox output device.

允许在 OSX 上对 CoreAudio 设备的本地输出。

The output filename can be empty (or -) 使用索引编号表示默认系统输出设备,另一个选项是通过以下方式显示的设备索引:-list_devices true.

Alternatively, the audio input device can be chosen by index using the -audio_device_index <INDEX> , overriding any device name or index given in the input filename.

All available devices can be enumerated by using -list_devices true,列出所有设备名称、UID 和对应索引。

4.2.1 Options

AudioToolbox supports the following options:

-audio_device_index <INDEX>

通过其索引指定音频设备。

4.2.2 Examples

  • Print the list of supported devices and output a sine wave to the default device:
    $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
    
  • Output a sine wave to the device with the index 2, overriding any output filename:
    $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
    

4.3 caca

CACA output device.

This output device allows one to show a video stream in CACA window. Only one CACA window is allowed per application, so you can have only one instance of this output device in an application.

To enable this output device you need to configure FFmpeg with --enable-libcaca. libcaca is a graphics library that outputs text instead of pixels.

For more information about libcaca, check: http://caca.zoy.org/wiki/libcaca

4.3.1 Options

window_title

Set the CACA window title, if not specified default to the filename specified for the output device.

window_size

Set the CACA window size, can be a string of the form widthxheight or a video size abbreviation. If not specified it defaults to the size of the input video.

driver

Set display driver.

algorithm

Set dithering algorithm. Dithering is necessary because the picture being rendered has usually far more colours than the available palette. The accepted values are listed with -list_dither algorithms.

antialias

Set antialias method. Antialiasing smoothens the rendered image and avoids the commonly seen staircase effect. The accepted values are listed with -list_dither antialiases.

charset

Set which characters are going to be used when rendering text. The accepted values are listed with -list_dither charsets.

color

Set color to be used when rendering text. The accepted values are listed with -list_dither colors.

list_drivers

If set to true, print a list of available drivers and exit.

list_dither

List available dither options related to the argument. The argument must be one of algorithms, antialiases, charsets, colors.

4.3.2 Examples

  • The following command shows the ffmpeg output is an CACA window, forcing its size to 80x25:
    ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
    
  • Show the list of available drivers and exit:
    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
    
  • Show the list of available dither colors and exit:
    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 文件。 DeckLink 对支持的格式非常挑剔。像素格式始终为 uyvy422,帧率、场序和视频尺寸必须由-list_formats 1为您的设备确定。音频采样率始终为 48 kHz。

4.4.1 Options

list_devices

如果设置为true,打印设备列表并退出。 默认值是false。此选项已被弃用,请使用-sinksffmpeg选项列出可用的输出设备。

list_formats

如果设置为true,打印支持的格式列表并退出。 默认值是false.

preroll

视频预滚时间(以秒为单位)。 默认值是0.5.

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

timing_offset

设置使用的输出上的同步信号定时像素偏移。 默认值是‘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.

vanc_queue_size

设置VANC数据的最大输出缓冲区大小(以字节为单位)。如果缓冲达到此值, 传出的VANC数据将被丢弃。 默认值是‘1048576’.

4.4.2 示例

  • 列出输出设备:
    ffmpeg -sinks decklink
    
  • 列出支持的格式:
    ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
    
  • 播放视频片段:
    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帧缓冲输出设备。

Linux帧缓冲是一种与图形硬件无关的抽象层, 用于在计算机显示器上显示图形,通常是在 控制台上。它通过文件设备节点访问,通常为/dev/fb0.

有关更详细的信息,请阅读文件Documentation/fb/framebuffer.txt包含在Linux源代码树中。

4.5.1 选项

xoffset
yoffset

设置左上角的x/y坐标。默认值是0。

4.5.2 示例

在帧缓冲设备上播放文件/dev/fb0。 所需的像素格式取决于当前帧缓冲设置。

ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0

另请参见http://linux-fbdev.sourceforge.net/,以及fbset(1)。

4.6 opengl

OpenGL输出设备。已弃用并将被移除。

要启用此输出设备,您需要使用以下配置FFmpeg--enable-opengl.

此输出设备允许渲染到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消息通知设备当前的分辨率。

4.6.1 选项

background

设置背景颜色。默认是黑色。

no_window

设置为非零值时禁用默认的SDL窗口。 应用程序必须提供OpenGL上下文以及window_size_cbwindow_swap_buffers_cb回调。

window_title

设置SDL窗口标题,如果未指定则默认为输出设备指定的文件名。 在no_window设置时被忽略。

window_size

设置首选窗口大小,可以是宽x高形式的字符串或视频尺寸缩写。 如果未指定,则默认为输入视频的大小,根据纵横比缩小比例。 主要在no_window未设置时使用。

4.6.2 示例

使用OpenGL渲染在SDL窗口中播放文件:

ffmpeg  -i INPUT -f opengl "window title"

4.7 oss

OSS (Open Sound System) 输出设备。

4.8 pulse

PulseAudio输出设备。

要启用此输出设备,您需要使用以下配置FFmpeg--enable-libpulse.

有关PulseAudio的更多信息可以在以下地址找到http://www.pulseaudio.org

4.8.1 选项

server

连接到特定的PulseAudio服务器,由IP地址指定。 如果未提供,则会使用默认服务器。

name

指定PulseAudio在显示活动客户端时使用的应用程序名称, 默认情况下为LIBAVFORMAT_IDENT字符串。

stream_name

指定PulseAudio在显示活动流时使用的流名称, 默认情况下设置为指定的输出名称。

device

指定要使用的设备。如果未提供,则会使用默认设备。 可以使用命令获得输出设备列表pactl list sinks.

buffer_size
buffer_duration

控制PulseAudio缓冲区的大小和持续时间。小缓冲区 需要更频繁的更新,但提供更多的控制。

buffer_size指定字节大小,而buffer_duration指定毫秒时间。

当提供了两个选项时会使用最高值 (持续时间根据流参数转换为字节)。如果它们 被设置为0(默认值),设备将使用默认 PulseAudio持续时间值。默认情况下,PulseAudio设置缓冲 持续时间约为2秒。

prebuf

指定预缓冲大小(以字节为单位)。在缓冲中至少有prebuf字节可用前,服务器不会开始播放。 默认情况下,此选项初始化为与buffer_sizebuffer_duration(以较大值为准)相同的值。

minreq

指定最小请求大小(以字节为单位)。服务器不会向客户端请求小于minreq字节,而是等到缓冲区足够空闲以一次性请求更多字节。 建议不设置此选项,这将初始化为服务器认为合理的值。

4.8.2 示例

在默认服务器上的默认设备上播放文件:

ffmpeg  -i INPUT -f pulse "stream name"

4.9 sdl

SDL (Simple DirectMedia Layer) 输出设备。已弃用并将被移除。

在FFmpeg中,为了监控目的,可以使用管道和视频播放器,例如ffplay:

ffmpeg -i INPUT -f nut -c:v rawvideo - | ffplay -

“sdl2”可以作为“sdl”的别名使用。

此输出设备允许在SDL窗口中显示视频流。每个应用程序仅允许一个SDL窗口, 因此在一个应用程序中仅能有一个此输出设备实例。

要启用此输出设备,你需要在配置构建时你的系统中安装libsdl。

有关SDL的更多信息,请查看:http://www.libsdl.org/

4.9.1 选项

window_borderless

关闭SDL窗口边框。 默认值为0(启用窗口边框)。

window_enable_quit

在提供非零值时启用退出操作(使用窗口按钮或键盘键)。 默认值为1(启用退出操作)。

window_fullscreen

设置为非零值时启用全屏模式。 默认值为0。

window_size

设置SDL窗口大小,可以是宽度x高度形式的字符串或视频大小缩写。 如果未指定,则默认采用输入视频的大小, 根据纵横比缩小比例。

window_title

设置SDL窗口标题,如果未指定则默认为输出设备指定的文件名。

window_x
window_y

设置窗口在屏幕上的位置。

4.9.2 交互命令

设备创建的窗口可以通过以下交互命令进行控制。

q,ESC

立即退出设备。

4.9.3 示例

以下命令显示ffmpeg输出是一个 SDL窗口,强制其大小为qcif格式:

ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"

4.10 sndio

sndio音频输出设备。

4.11 v4l2

Video4Linux2输出设备。

4.12 xv

XV (XVideo) 输出设备。

此输出设备允许在X窗口系统中显示视频流。

4.12.1 选项

display_name

指定硬件显示名称,其决定了要使用的显示和通信域。

显示名称或DISPLAY环境变量可以是以下格式的字符串主机名[:编号[.屏幕编号]].

主机名指定显示实际连接的主机机器的名称。编号指定该主机机器上显示服务器的编号。屏幕编号指定要在该服务器上使用的屏幕。

如果未指定,则默认为DISPLAY环境变量的值。

例如,dual-headed:0.1会指定“dual-headed”机器上的显示0的屏幕1。

请查看X11规范,以了解有关显示名称格式的更多详细信息。

window_id

当设置为非零值时,设备不会创建新窗口, 而是使用具有提供的window_id的现有窗口。默认情况下, 此选项设置为零并且设备创建自己的窗口。

window_size

设置创建的窗口大小,可以是宽度x高度形式的字符串或视频大小缩写。如果未 指定,则默认采用输入视频的大小。 当window_id设置时会被忽略。

window_x
window_y

设置为创建的窗口的X和Y窗口偏移。两者默认 设置为0。窗口管理器可能会忽略值。 当window_id设置时会被忽略。

window_title

设置窗口标题,如果未指定则默认为输出设备指定的文件名。 当window_id设置时会被忽略。

有关XVideo的更多信息,请参阅http://www.x.org/.

4.12.2 示例

  • 同时解码、显示并编码视频输入ffmpeg
    ffmpeg -i INPUT OUTPUT -f xv display
    
  • 解码并将输入视频显示到多个X11窗口:
    ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
    

5 另请参阅

ffmpeg, ffplay, ffprobe, libavdevice

6 作者

FFmpeg开发人员。

有关作者的详细信息,请参阅项目的Git历史 (https://git.ffmpeg.org/ffmpeg),例如,通过在FFmpeg源目录中键入以下命令git log或者在线浏览存储库https://git.ffmpeg.org/ffmpeg.

特定组件的维护者列在代码树中的文件中MAINTAINERS

此文档是使用工具生成的makeinfo.

托管由以下提供telepoint.bg