Alsa 无法设置样本格式[FFMPEG] [英] Alsa cannot set sample format[FFMPEG]

查看:34
本文介绍了Alsa 无法设置样本格式[FFMPEG]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 ffmpeg 从 Roland USB 设备捕获 pcm 流并用 wav 包装它.我使用的命令行如下:

I am trying to capture a pcm stream from a Roland USB device with ffmpeg and wrap it with wav. The command line I am using is the following:

ffmpeg -f alsa -acodec pcm_s32le -ac 2 -ar 48000 -i hw:2,0 out.wav

符合硬件的设置.我还可以使用 Audacity 捕获流.问题是 FFMPEG 抛出无法设置样本格式错误".知道可能会发生什么以及我如何解决这个问题吗?

Which comply with the settings of the hardware. I can also capture the stream with Audacity. The problem is that FFMPEG throws "cannot set sample format error". Any idea of what may be happening and how I can fix this?

提前致谢.

FFMPEG 输出

user@user:~$ ffmpeg -f alsa -acodec pcm_s32le -ac 2 -ar 48000 -i hw:2,0 out.wav
    ffmpeg version N-85548-g3390a2b Copyright (c) 2000-2017 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
      configuration: --enable-gpl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libvorbis --enable-libopus --enable-ffplay
      libavutil      55. 61.100 / 55. 61.100
      libavcodec     57. 92.100 / 57. 92.100
      libavformat    57. 72.101 / 57. 72.101
      libavdevice    57.  7.100 / 57.  7.100
      libavfilter     6. 84.101 /  6. 84.101
      libswscale      4.  7.101 /  4.  7.101
      libswresample   2.  8.100 /  2.  8.100
      libpostproc    54.  6.100 / 54.  6.100
    [alsa @ 0x34b6780] cannot set sample format 0x10008 10 (Invalid argument)
    hw:2,0: Input/output error

记录输出:

user@user:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: PCH [HDA Intel PCH], device 0: ALC3236 Analog [ALC3236 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: DUOCAPTURE [DUO-CAPTURE], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

在 Deimus 的帮助下,我在 arecord 中检查了我的卡的设置,并为 FFMPEG 使用了正确的行(请注意,我已经更改了硬件上的捕获频率).

记录输出

user@user:~$ arecord --dump-hw-params -D hw:2,0
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:2,0":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S24_3LE
SUBFORMAT:  STD
SAMPLE_BITS: 24
FRAME_BITS: 48
CHANNELS: 2
RATE: 44100
PERIOD_TIME: (1020 1981429)
PERIOD_SIZE: [45 87381]
PERIOD_BYTES: [270 524286]
PERIODS: [2 1024]
BUFFER_TIME: (2040 3962858)
BUFFER_SIZE: [90 174762]
BUFFER_BYTES: [540 1048572]
TICK_TIME: ALL
--------------------
arecord: set_params:1233: Sample format non available
Available formats:
- S24_3LE

正确的命令行

ffmpeg -f alsa -acodec pcm_s24le -ac 2 -ar 44100 -i hw:2,0 out.wav

推荐答案

使用 arecord 工具的 --dump-hw-params 选项检查支持的示例格式.

Use the --dump-hw-params option of arecord tool to check the supported sample formats.

arecord

然后您可以使用 ffmpeg-sample_fmt 选项来指定格式,例如.s32

Then you can use the -sample_fmt option of ffmpeg to specficy the format eg. s32

ffmpeg 的音频选项在这里

Audio options for ffmpeg are here

这篇关于Alsa 无法设置样本格式[FFMPEG]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆