我有一个 USB 音频-视频捕获设备,用于数字化录像带。我想将设备中的视频和音频录制到一个尺寸为 720x576、视频编解码器为 H.264 且音频质量良好的视频文件中。
我可以使用 ffmpeg 从设备录制视频,并且可以使用 MPlayer 从设备查看视频。通过查看“声音首选项”窗口的输入选项卡或使用 Audacity 录制音频,我还可以看到音频正在从设备传送到计算机,但是显然只有在视频正在播放时,音频才会从设备传送使用 ffmpeg 或 MPlayer 访问。
我试图让 ffmpeg 录制音频,我试图让 MPlayer 播放音频,但我的努力没有成功。
该设备是“Pinnacle Dazzle DVC 90/100/101”(由 v4l2-ctl --list-devices
返回)。声卡列表显示为“DVC100”:
$ cat /proc/asound/cards
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0x601d118000 irq 171
1 [DVC100 ]: USB-Audio - DVC100
Pinnacle Systems GmbH DVC100 at usb-0000:00:14.0-4, high speed
29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
ThinkPad Console Audio Control at EC reg 0x30, fw N2LHT33W
该设备的 PulseAudio 列表如下:$ pactl list cards short
0 alsa_card.pci-0000_00_1f.3 module-alsa-card.c
14 alsa_card.usb-Pinnacle_Systems_GmbH_DVC100-01 module-alsa-card.c
以下 ffmpeg 命令成功录制视频,但录制严重失真、损坏和不同步的音频:ffmpeg -y -f rawvideo -f alsa -thread_queue_size 2048 -ar 48000 -i hw:0 \
-c:a aac -video_size 720x576 -pixel_format uyvy422 -i /dev/video2 out.mp4
以下 MPlayer 命令成功显示视频但不播放音频:mplayer -tv driver=v4l2:norm=PAL:device=/dev/video2:width=720:height=576 \
-ao alsa:device=hw=1.0 -vf pp=lb tv://
现在,当上面的 MPlayer 命令运行( 而不是 ffmpeg 命令)并在窗口中显示输入视频时,可以打开 Audacity 并设置录制音频,它可以清晰且清晰地录制来自设备的音频高品质。在 Audacity 执行此操作时,输入设备在 pavucontrol
中列出。作为“Dazzle DVC Audio Device Analogue Stereo”。等效地,arecord 也可用于使用以下命令录制音频(显示输出):$ arecord -vv -D plughw:DVC100 -fdat out.wav
Recording WAVE 'out.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
Plug PCM: Hardware PCM card 1 'DVC100' device 0 subdevice 0
Its setup is:
stream : CAPTURE
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 24000
period_size : 6000
period_time : 125000
tstamp_mode : NONE
tstamp_type : MONOTONIC
period_step : 1
avail_min : 6000
period_event : 0
start_threshold : 1
stop_threshold : 24000
silence_threshold: 0
silence_size : 0
boundary : 6755399441055744000
appl_ptr : 0
hw_ptr : 0
查看 arecord -L
的输出,我用 ffmpeg 尝试了各种音频设备输入名称,但它们似乎都不起作用。因此,例如,我尝试了如下命令:ffmpeg -y -f rawvideo -f alsa -i plughw:DVC100 \
-video_size 720x576 -pixel_format uyvy422 -i /dev/video2 out.mp4
并尝试了以下音频设备名称:plughw:DVC100
plughw:CARD=DVC100,DEV=0
hw:CARD=DVC100,DEV=0
plughw:CARD=DVC100
sysdefault:CARD=DVC100
iec958:CARD=DVC100,DEV=0
dsnoop:CARD=DVC100,DEV=0
那么,我怎样才能让 ffmpeg 成功地将音频录制到视频文件中呢?有没有其他方法可以解决这个问题?编辑:命令的相关输出
pactl list sources
如下:Source #20
State: SUSPENDED
Name: alsa_input.usb-Pinnacle_Systems_GmbH_DVC100-01.analog-stereo
Description: Dazzle DVC100 Audio Device Analogue Stereo
Driver: module-alsa-card.c
Sample Specification: s16le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 45
Mute: no
Volume: front-left: 99957 / 153% / 11.00 dB, front-right: 99957 / 153% / 11.00 dB
balance 0.00
Base Volume: 35466 / 54% / -16.00 dB
Monitor of Sink: n/a
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
Properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "USB Audio"
alsa.id = "USB Audio"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "1"
alsa.card_name = "DVC100"
alsa.long_card_name = "Pinnacle Systems GmbH DVC100 at usb-0000:00:14.0-4, high speed"
alsa.driver_name = "snd_usb_audio"
device.bus_path = "pci-0000:00:14.0-usb-0:4:1.1"
sysfs.path = "/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.1/sound/card1"
udev.id = "usb-Pinnacle_Systems_GmbH_DVC100-01"
device.bus = "usb"
device.vendor.id = "2304"
device.vendor.name = "Pinnacle Systems, Inc."
device.product.id = "021a"
device.product.name = "Dazzle DVC100 Audio Device"
device.serial = "Pinnacle_Systems_GmbH_DVC100"
device.string = "front:1"
device.buffering.buffer_size = "352800"
device.buffering.fragment_size = "176400"
device.access_mode = "mmap+timer"
device.profile.name = "analog-stereo"
device.profile.description = "Analogue Stereo"
device.description = "Dazzle DVC100 Audio Device Analogue Stereo"
alsa.mixer_name = "USB Mixer"
alsa.components = "USB2304:021a"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-usb"
Ports:
analog-input-linein: Line In (priority: 8100)
Active Port: analog-input-linein
Formats:
pcm
我用 ffmpeg(4.3.1 版,用 -enable-libpulse
编译)通过以下方式测试了这个名称:ffmpeg -y -f video4linux2 -f pulse \
-i alsa_input.usb-Pinnacle_Systems_GmbH_DVC100-01.analog-stereo \
-video_size 720x576 -pixel_format uyvy422 -i /dev/video2 out.mp4
不幸的是,这没有奏效。
最佳答案
我还使用 Dazzle DVC100 捕捉视频和 -f alsa -i hw:1
对我很好。例如:
ffmpeg -f alsa -i hw:1 -i /dev/video2 \
-codec:v ffv1 -codec:a pcm_s16le raw.mkv
可以使用以下方法找到设备的编号:cat /proc/asound/cards
使用 hw:
之后第一列中的数字字首。在您的情况下,它是 hw:1
.请记住,打开 PulsAudio 设备时,FFmpeg 无法打开设备。我运行时会发生这种情况
pavucontrol
同时例如。在实践中,我需要在关闭 pavucontrol
后等待大约半分钟在成功运行 FFmpeg 之前。您可以使用以下命令实时检查 FFmpeg 的输出:
ffmpeg -f alsa -i hw:1 -i /dev/video2 \
-codec:v ffv1 -codec:a pcm_s16le -f matroska - | ffplay -
您可以找到有关使用 Dazzle DVC100 in my post 捕获视频的更多信息.
关于audio - 在Ubuntu上使用ffmpeg,如何记录来自音视频USB捕获设备的音视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65688296/