一、使用 FFmpeg 提取 PCM 音频数据
1、PCM 音频格式
PCM 全称 " Pulse Code Modulation " , 脉冲编码调制 , 该 音频数据 是未经压缩的 采样裸数据 , 只有 知道该数据的 采样率 / 采样位数 / 通道数 才能将该音频数据播放出来 ;
PCM 数据是 最原始的音频数据 , 音频内容完全无损 , 但是 PCM 数据体积庞大 , 对 PCM 音频数据压缩 分为 无损压缩 和 有损压缩 :
- 无损压缩 : ALAC、APE、FLAC 等格式 ;
- 有损压缩 : MP3、AAC、OGG、WMA 等格式 ;
将 PCM 数据 单纯的添加一个 文件头 , 注明该文件的 采样率 / 采样数 / 通道数 等核心数据 , 就是 WAV 文件 , 该格式的文件体积很大 ;
2、提取 PCM 音频格式常用参数
在 提取 PCM 音频格式常用参数 时 , 需要设置 PCM 数据的 采样率 , 通道数 , 采样位数 ;
-
设置 采样率 参数 : 使用
-ar
参数 , 设置采样率 ; 取值 48000 或 44100 ; -
设置 通道数 参数 : 使用
-ac
参数 , 设置 PCM 通道数 ; 取值 1 单声道 , 2 立体声 ; -
设置 采样位数 参数 :
-
使用
-f
参数 , 可取值如下 :- s16 / s16p : 有符号 16 位 采样 ;
- s16le : 小端模式 有符号 16 位 采样 ;
- s16be : 大端模式 有符号 16位 采样 ;
- s32 / s32p / s32le / s32be : 有符号 32 位采样 / 有符号 32 位采样 / 有符号 32 位 小端字节序 采样 / 有符号 32 位 大端字节序 采样 ;
-
使用
-sample_fmt
参数 , 可取值如下 :- s16 / s16p : 有符号 16 位 采样 ;
- s32 / s32p : 有符号 32 位 采样 ;
-
使用
-codec:a
参数 , 可取值如下 :- pcm_s16le : 小端模式 16 位 有符号整数 采样 ;
- pcm_s16be : 大端模式 16 位 有符号整数 采样 ;
- pcm_s32le : 小端模式 32 位 有符号整数 采样 ;
- pcm_s32be : 大端模式 32 位 有符号整数 采样 ;
-
使用
3、提取 PCM 音频数据 - 使用 -f 参数
执行
ffmpeg -i input.mp4 -ar 48000 -ac 2 -f s16le output.pcm
命令 , 从 input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ;
-
-ar 48000
参数 设置 输出文件的采样率是 48000 Hz ; -
-ac 2
参数 设置 输出文件 是 双通道 立体声 ; -
-f s16le
参数 设置 输出文件 是 16 位小端模式 的 采样 ;
执行
ffplay -ar 48000 -ac 2 -f s16le output.pcm
命令 , 播放上述 output.pcm 音频数据 ;
PCM 数据是 纯 音频裸数据 , 没有该音频的 格式信息 , 需要在命令行中额外指定 采样率 , 采样位数 , 通道数 , 如果 指定错了参数 , 播放出来的就是随机噪音 ;
4、提取 PCM 音频数据 - 使用 -sample_fmt 参数
执行
ffmpeg -i input.mp4 -ar 48000 -ac 2 -sample_fmt s16 output.wav
命令 , 从 input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ;
-
-ar 48000
参数 设置 输出文件的采样率是 48000 Hz ; -
-ac 2
参数 设置 输出文件 是 双通道 立体声 ; -
-sample_fmt s16
参数 设置 输出文件 是 有符号 16 位 的 采样 ;
使用 -sample_fmt
参数设置 采样位数 , 与 -f
参数设置 , 参数取值不同 ;
同时 , 使用 -sample_fmt
参数设置 采样位数 的 输出文件 不能是 PCM 裸数据 , 而是 WAV 封装格式的文件 , WAV 格式的文件就是 PCM 裸数据的基础上 增加了一个文件头 , 用于表明该文件的 采样率 / 采样位数 / 通道数 等音频信息 ;
执行
ffplay output.wav
命令 , 播放上述 提取的 output.wav 音频数据 ;
WAV 格式的文件可以直接使用 ffplay 播放 , 不需要设置 采样率 / 采样位数 / 通道数 等 额外参数 ;
将上述提取的 WAV 文件 与 PCM 文件进行对比 , 发现 WAV 文件 只比 PCM 文件多一个文件头 , 其它数据内容基本一致 ;
5、提取 PCM 音频数据 - 使用 -codec:a 参数
执行
ffmpeg -i input.mp4 -ar 48000 -ac 2 -codec:a pcm_s16le output.wav
命令 , 从 input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ;
-
-ar 48000
参数 设置 输出文件的采样率是 48000 Hz ; -
-ac 2
参数 设置 输出文件 是 双通道 立体声 ; -
-codec:a pcm_s16le
参数 设置 输出文件 是 16 位 小端模式 的 采样 ;
由于 WAV 文件自带文件头 , 上述输出文件 , 也可以通过执行
ffplay output.wav
命令 , 进行播放 , 不需要设置 PCM 的播放参数 ;
二、查询文档方法
1、PCM 采样位数查询
上面播放 PCM 格式的音频文件 , 涉及到了设置 PCM 采样位数 , 可以通过如下的命令进行查询 ;
执行
ffmpeg -muxers | findstr PCM
命令 , 可以获取 PCM 的 复用器 ;
-
-muxers
参数 作用是 尝试列出 ffmpeg 支持的所有复用器 ; -
|
的作用是 用作管道符号 , 将一个命令的输出 作为 另一个命令的输入 ; -
findstr PCM
的作用是 用于在文本中搜索字符串 " PCM " , findstr 是 Windows 命令提示符中的一个命令 其作用是 查找字符串 ;
可以在命令行中得到如下结果 , 这是 PCM 音频格式的采样位数 可设置的值 ;
D:\004_Operate\ffmpeg>ffmpeg -muxers | findstr PCM
...
E alaw PCM A-law
E f32be PCM 32-bit floating-point big-endian
E f32le PCM 32-bit floating-point little-endian
E f64be PCM 64-bit floating-point big-endian
E f64le PCM 64-bit floating-point little-endian
E mulaw PCM mu-law
E s16be PCM signed 16-bit big-endian
E s16le PCM signed 16-bit little-endian
E s24be PCM signed 24-bit big-endian
E s24le PCM signed 24-bit little-endian
E s32be PCM signed 32-bit big-endian
E s32le PCM signed 32-bit little-endian
E s8 PCM signed 8-bit
E u16be PCM unsigned 16-bit big-endian
E u16le PCM unsigned 16-bit little-endian
E u24be PCM unsigned 24-bit big-endian
E u24le PCM unsigned 24-bit little-endian
E u32be PCM unsigned 32-bit big-endian
E u32le PCM unsigned 32-bit little-endian
E u8 PCM unsigned 8-bit
E vidc PCM Archimedes VIDC
D:\004_Operate\ffmpeg>
2、-sample_fmts 参数值 查询
执行
ffmpeg -sample_fmts
命令 , 可以查询 -sample_fmts
参数可以设置的值 ;文章来源:https://www.toymoban.com/news/detail-848029.html
D:\004_Operate\ffmpeg>ffmpeg -sample_fmts
ffmpeg version n4.4-19-g8d172d9409 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10-win32 (GCC) 20210408
name depth
u8 8
s16 16
s32 32
flt 32
dbl 64
u8p 8
s16p 16
s32p 32
fltp 32
dblp 64
s64 64
s64p 64
文章来源地址https://www.toymoban.com/news/detail-848029.html
到了这里,关于【FFmpeg】ffmpeg 命令行参数 ⑦ ( 使用 FFmpeg 提取 PCM 音频数据 | PCM 音频格式 | 提取 PCM 音频格式常用参数 | 查询文档方法 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!