audio - 在Ubuntu上使用ffmpeg,如何记录来自音视频USB捕获设备的音视频?

标签 audio video ffmpeg audacity digitization

我有一个 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/

相关文章:

php - OpenCart mp3 预览

audio - OpenAL:alSourcePlay() 会阻塞当前线程吗?

android - 如何在android中开发视频剪辑?

audio - 获取YouTube的所有媒体链接,而无需使用flashgot,youtube-dl或任何工具

python - Discord.Py Opus Heroku 问题

FFMPEG:如何从所有流中选择一个流

C++ - 在 ffmpeg 中应用过滤器

c - PortAudio 的 PaStreamFinishedCallback 的安全操作

video - Apple TV 的 ffmpeg 转换

audio - 从 mp3 创建 HLS 可流式音频文件