当前位置:   article > 正文

【FFmpeg】ffmpeg 命令行参数 ⑦ ( 使用 FFmpeg 提取 PCM 音频数据 | PCM 音频格式 | 提取 PCM 音频格式常用参数 | 查询文档方法 )_ffmpeg pcm

ffmpeg pcm





一、使用 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
  • 1

命令 , 从 input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ;

  • -ar 48000 参数 设置 输出文件的采样率是 48000 Hz ;
  • -ac 2 参数 设置 输出文件 是 双通道 立体声 ;
  • -f s16le 参数 设置 输出文件 是 16 位小端模式 的 采样 ;

在这里插入图片描述

执行

ffplay -ar 48000 -ac 2 -f s16le output.pcm
  • 1

命令 , 播放上述 output.pcm 音频数据 ;

PCM 数据是 纯 音频裸数据 , 没有该音频的 格式信息 , 需要在命令行中额外指定 采样率 , 采样位数 , 通道数 , 如果 指定错了参数 , 播放出来的就是随机噪音 ;

在这里插入图片描述


4、提取 PCM 音频数据 - 使用 -sample_fmt 参数


执行

ffmpeg -i input.mp4 -ar 48000 -ac 2 -sample_fmt s16 output.wav
  • 1

命令 , 从 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
  • 1

命令 , 播放上述 提取的 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
  • 1

命令 , 从 input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ;

  • -ar 48000 参数 设置 输出文件的采样率是 48000 Hz ;
  • -ac 2 参数 设置 输出文件 是 双通道 立体声 ;
  • -codec:a pcm_s16le 参数 设置 输出文件 是 16 位 小端模式 的 采样 ;

在这里插入图片描述

由于 WAV 文件自带文件头 , 上述输出文件 , 也可以通过执行

ffplay output.wav
  • 1

命令 , 进行播放 , 不需要设置 PCM 的播放参数 ;

在这里插入图片描述





二、查询文档方法




1、PCM 采样位数查询


上面播放 PCM 格式的音频文件 , 涉及到了设置 PCM 采样位数 , 可以通过如下的命令进行查询 ;

执行

ffmpeg -muxers | findstr PCM
  • 1

命令 , 可以获取 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在这里插入图片描述


2、-sample_fmts 参数值 查询


执行

ffmpeg -sample_fmts
  • 1

命令 , 可以查询 -sample_fmts 参数可以设置的值 ;

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/909416
推荐阅读
相关标签
  

闽ICP备14008679号