筆記:ffmpeg和alsa指令錄音PCM及WAV

因為工作研發及驗證需要整理一下ffmpeg和alsa錄音指令


用ALSA錄音

0. 列出ALSA錄音裝置

$ arecord -l

**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: ALC887-VD Alt Analog [ALC887-VD Alt Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

用alsa的工具程式列出可錄音的裝置(CAPTURE Hardware Devices)
若是不太會辨別的話,就每個裝置用ffplay去測試,例如: ffplay -f alsa -i plughw:CARD=U0x46d0x825

1. 錄音成wav檔

$ arecord -D plughw:CARD=U0x46d0x825 -d 5 rec_arecord.wav -v

-d 5是指錄音5秒

-v 會顯示錄音細節

我電腦錄出來的取樣格式是pcm u8, 取樣率8k Hz,單聲道

2. 指定wav錄音格式

$ arecord -D plughw:CARD=U0x46d0x825 -d 5 -f S16_LE -r 16000 -c 1 -t wav rec_arecord.wav -v

-f 指定錄音取樣格式是S16_LE

-r 指定取樣率

-c 指定聲道數

3. 邊錄邊播

$ arecord -Dhw:0,2 -r48000 -f S32_LE -c 2 | aplay -Dhw:0,1 -r48000
$ arecord -Dhw:0,0 -r32000 -f cd|aplay -Dhw:0,0 -r32000

4. 其他奇淫巧計

$ arecord -t wav --max-file-time 30 mon.wav
Record from the default audio source in monaural, 8,000 samples per second, 8 bits per sample. Start a new file every 30 seconds. File names are mon-nn.wav, where nn increases from 01. The file after mon-99.wav is mon-100.wav.

$ arecord -f cd -t wav --max-file-time 3600 --use-strftime %Y/%m/%d/listen-%H-%M-%v.wav
Record in stereo from the default audio source. Create a new file every hour. The files are placed in directories based on their start dates and have names which include their start times and file numbers.

用ALSA播放

1. 播放PCM檔

$ aplay -f S16_LE -r 16000 -c 1 -t raw -v rec.pcm

-f 指定pcm的取樣格式
-r 指定pcm的取樣率
-c 指定pcm的聲道數
-t 指定播放的是raw
-v 顯示細節

2. 播放wav檔

$ aplay rec.wav

wave檔自帶標頭所以不用像pcm檔案要指定

3. 列出ALSA播音裝置

$ aplay -l
印播放的裝置就用aplay列出可播放的裝置(PLAYBACK Hardware Devices)

3.1 指定播放裝置
$ aplay -D plughw:0,0 test.wav -v
用-D指定播放裝置

用FFMPEG錄音

1. 錄音成wav檔

$ ffmpeg -f alsa -i plughw:CARD=U0x46d0x825 -t 5 -f wav rec_ffmpeg.wav

-i 是指定從哪個裝置錄音

-t 5是指5秒

我電腦錄出來的取樣格式是pcm s16le, 取樣率48k Hz,雙聲道

2. 指定wav錄音格式

$ ffmpeg -f alsa -i plughw:CARD=U0x46d0x825 -t 5 -c:a pcm_s16le -ar 16k -ac 1 -f wav rec_ffmpeg.wav

-t 5是指5秒

-c:a 指定轉換格式

-ar 指定取樣率

-ac指定聲道數

3. 列出可用的alsa裝置

$ ffmpeg -sources alsa

因為現在的主機板都自帶很多裝置導致這指令列出來的裝置實在很多

用ffplay播放

1. 播放PCM檔

$ ffplay -autoexit -ar 16k -ac 1 -f f32le rec.pcm

$ ffplay -autoexit -ar 16k -ac 1 -f s16le rec.pcm

pcm播放需要用-f指定格式 -ar指定取樣率 -ac指定聲道數

比較新的版本需要用-autoexit不然不會結束播放

2. 播放wav檔

$ ffplay rec.wav

PCM切檔

$ split -b 4800 got.pcm -d got_part.pcm

留言