leadcom@leadcom:~$ ffmpeg -hide_banner -devices Devices: D. = Demuxing supported .E = Muxing supported -- DE alsa ALSA audio output E caca caca (color ASCII art) output device DE fbdev Linux framebuffer D iec61883 libiec61883 (new DV1394) A/V input device D jack JACK Audio Connection Kit D kmsgrab KMS screen capture D lavfi Libavfilter virtual input device D libcdio D libdc1394 dc1394 v.2 A/V grab D openal OpenAL audio capture device E opengl OpenGL output DE oss OSS (Open Sound System) playback DE pulse Pulse audio output E sdl,sdl2 SDL2 output device DE sndio sndio audio playback DE video4linux2,v4l2 Video4Linux2 output device D x11grab X11 screen capture, using XCB E xv XV (XVideo) output device音频输入设备
ffmpeg支持alsa格式的音频输入设备
查看ffmpeg支持的alsa格式的音频输入参数选项leadcom@leadcom:~$ ffmpeg -hide_banner -h demuxer=alsa Demuxer alsa [ALSA audio input]: ALSA demuxer AVOptions: -sample_rate.D....... (from 1 to INT_MAX) (default 48000) -channels .D....... (from 1 to INT_MAX) (default 2)
可以看到只有采样率sample_rate、声道数channels这两个参数。
查看音频输入设备leadcom@leadcom:~$ arecord -l **** List of CAPTURE Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC3227 Analog [ALC3227 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: Camera [Full HD 1080P PC Camera], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
可以看到当前电脑有两个音频输入,其中Camera [Full HD 1080P PC Camera]是我自己的USB摄像头中的麦克风设备。
查看音频输入设备的具体参数查看上面USB摄像头中的麦克风设备的具体参数
leadcom@leadcom:~$ arecord -D hw:1,0 --dump-hw-params Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono HW Params of device "hw:1,0": -------------------- ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED FORMAT: S16_LE SUBFORMAT: STD SAMPLE_BITS: 16 frame_BITS: 32 CHANNELS: 2 RATE: [44100 48000] PERIOD_TIME: [1000 2972155) PERIOD_SIZE: [45 131072] PERIOD_BYTES: [180 524288] PERIODS: [2 1024] BUFFER_TIME: [1875 5944309) BUFFER_SIZE: [90 262144] BUFFER_BYTES: [360 1048576] TICK_TIME: ALL -------------------- arecord: set_params:1339: Sample format non available Available formats: - S16_LE
这里通过指定声卡名称获取其硬件参数信息,可以看到channels通道数和rate即sample_rate采样率。
采样率是一个区间,但并意味着区间内所有值都有效,一般只有几个特定值可以。
例如44100/48000/192000,其他的值将会变成最接近上面三个值中的一个,这其中的验证方法可以通过ffmpeg命令行来试验一下,如下:
ffmpeg -f alsa -sample_rate 采样率 -i hw:1,0 -t 10 test.wav -v trace
查看命令行的输出结果,可以看到最终可用的采样率。
ffmpeg支持v4l2格式的视频输入设备
查看ffmpeg支持的v4l2格式的视频输入参数选项leadcom@leadcom:~$ ffmpeg -hide_banner -h demuxer=v4l2 Demuxer video4linux2,v4l2 [Video4Linux2 device grab]: V4L2 indev AVOptions: -standard查看视频输入设备.D....... set TV standard, used only by analog frame grabber -channel .D....... set TV channel, used only by frame grabber (from -1 to INT_MAX) (default -1) -video_size .D....... set frame size -pixel_format .D....... set preferred pixel format -input_format .D....... set preferred pixel format (for raw video) or codec name -framerate .D....... set frame rate -list_formats .D....... list available formats and exit (from 0 to INT_MAX) (default 0) all .D....... show all available formats raw .D....... show only non-compressed formats compressed .D....... show only compressed formats -list_standards .D....... list supported standards and exit (from 0 to 1) (default 0) all .D....... show all supported standards -timestamps .D....... set type of timestamps for grabbed frames (from 0 to 2) (default default) default .D....... use timestamps from the kernel abs .D....... use absolute timestamps (wall clock) mono2abs .D....... force conversion from monotonic to absolute timestamps -ts .D....... set type of timestamps for grabbed frames (from 0 to 2) (default default) default .D....... use timestamps from the kernel abs .D....... use absolute timestamps (wall clock) mono2abs .D....... force conversion from monotonic to absolute timestamps -use_libv4l2 .D....... use libv4l2 (v4l-utils) conversion functions (default false
leadcom@leadcom:~$ ffmpeg -hide_banner -sources v4l2 Auto-detected sources for video4linux2,v4l2: /dev/video3 [HP TrueVision HD Camera: HP Tru] /dev/video2 [HP TrueVision HD Camera: HP Tru] /dev/video1 [Full HD 1080P PC Camera: Full H] /dev/video0 [Full HD 1080P PC Camera: Full H]
或者使用v4l2-ctl工具(apt install v4l-utils)
leadcom@leadcom:~$ v4l2-ctl --list-devices Full HD 1080P PC Camera: Full H (usb-0000:00:14.0-1): /dev/video0 /dev/video1 HP TrueVision HD Camera: HP Tru (usb-0000:00:14.0-3): /dev/video2 /dev/video3
可以看到摄像头有两个video目录,其中一个是图像/视频采集,一个是metadata采集。
如何区别他们两个呢?
leadcom@leadcom:~$ ffmpeg -hide_banner -f v4l2 -list_formats all -i /dev/video0 [video4linux2,v4l2 @ 0x55ccd5f848c0] Compressed: mjpeg : Motion-JPEG : 1920x1080 352x288 1712x960 1600x896 1280x960 800x600 432x240 1280x720 640x480 640x360 848x480 [video4linux2,v4l2 @ 0x55ccd5f848c0] Raw : yuyv422 : YUYV 4:2:2 : 1920x1080 352x288 1712x960 1600x896 1280x960 800x600 432x240 1280x720 640x480 640x360 848x480 /dev/video0: Immediate exit requested
或者使用v4l2-ctl查看
# 查看当前摄像头支持的视频压缩格式 leadcom@leadcom:~$ v4l2-ctl -d /dev/video0 --list-formats ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'MJPG' (Motion-JPEG, compressed) [1]: 'YUYV' (YUYV 4:2:2)
# 查看摄像头所有参数
leadcom@leadcom:~$ v4l2-ctl -d /dev/video0 --all
Driver Info:
Driver name : uvcvideo
Card type : Full HD 1080P PC Camera: Full H
Bus info : usb-0000:00:14.0-1
Driver version : 5.10.50
Capabilities : 0x84a00001
Video Capture
metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 3840
Size Image : 4147200
Colorspace : Default
Transfer Function : Default (maps to Rec. 709)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
frames per second: 5.000 (5/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-10 max=10 step=1 default=2 value=2
contrast 0x00980901 (int) : min=1 max=32 step=1 default=17 value=17
saturation 0x00980902 (int) : min=0 max=32 step=1 default=17 value=17
hue 0x00980903 (int) : min=-5 max=5 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=100 max=200 step=1 default=150 value=150
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=0
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1850 default=6500 value=6500 flags=inactive
sharpness 0x0098091b (int) : min=0 max=10 step=1 default=6 value=6
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=156 max=5000 step=1 default=512 value=200 flags=inactive
# 查看摄像头所支持的分辨率 leadcom@leadcom:~$ v4l2-ctl --list-framesizes=MJPG -d /dev/video0 ioctl: VIDIOC_ENUM_frameSIZES Size: Discrete 1920x1080 Size: Discrete 352x288 Size: Discrete 1712x960 Size: Discrete 1600x896 Size: Discrete 1280x960 Size: Discrete 800x600 Size: Discrete 432x240 Size: Discrete 1280x720 Size: Discrete 640x480 Size: Discrete 640x360 Size: Discrete 848x480



