前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【FFmpeg】ffmpeg 命令行参数 ⑦ ( 使用 FFmpeg 提取 PCM 音频数据 | PCM 音频格式 | 提取 PCM 音频格式常用参数 | 查询文档方法 )

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

作者头像
韩曙亮
发布2024-04-02 09:57:22
2920
发布2024-04-02 09:57:22
举报

一、使用 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 参数

执行

代码语言:javascript
复制
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 位小端模式 的 采样 ;

执行

代码语言:javascript
复制
ffplay -ar 48000 -ac 2 -f s16le output.pcm

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

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

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

执行

代码语言:javascript
复制
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 裸数据的基础上 增加了一个文件头 , 用于表明该文件的 采样率 / 采样位数 / 通道数 等音频信息 ;

执行

代码语言:javascript
复制
ffplay output.wav

命令 , 播放上述 提取的 output.wav 音频数据 ;

WAV 格式的文件可以直接使用 ffplay 播放 , 不需要设置 采样率 / 采样位数 / 通道数 等 额外参数 ;

将上述提取的 WAV 文件 与 PCM 文件进行对比 , 发现 WAV 文件 只比 PCM 文件多一个文件头 , 其它数据内容基本一致 ;

5、提取 PCM 音频数据 - 使用 -codec:a 参数

执行

代码语言:javascript
复制
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 文件自带文件头 , 上述输出文件 , 也可以通过执行

代码语言:javascript
复制
ffplay output.wav

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

二、查询文档方法


1、PCM 采样位数查询

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

执行

代码语言:javascript
复制
ffmpeg -muxers | findstr PCM

命令 , 可以获取 PCM 的 复用器 ;

  • -muxers 参数 作用是 尝试列出 ffmpeg 支持的所有复用器 ;
  • | 的作用是 用作管道符号 , 将一个命令的输出 作为 另一个命令的输入 ;
  • findstr PCM 的作用是 用于在文本中搜索字符串 " PCM " , findstr 是 Windows 命令提示符中的一个命令 其作用是 查找字符串 ;

可以在命令行中得到如下结果 , 这是 PCM 音频格式的采样位数 可设置的值 ;

代码语言:javascript
复制
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 参数值 查询

执行

代码语言:javascript
复制
ffmpeg -sample_fmts

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

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用 FFmpeg 提取 PCM 音频数据
    • 1、PCM 音频格式
      • 2、提取 PCM 音频格式常用参数
        • 3、提取 PCM 音频数据 - 使用 -f 参数
          • 4、提取 PCM 音频数据 - 使用 -sample_fmt 参数
            • 5、提取 PCM 音频数据 - 使用 -codec:a 参数
            • 二、查询文档方法
              • 1、PCM 采样位数查询
                • 2、-sample_fmts 参数值 查询
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档