赞
踩
PCM 全称 " Pulse Code Modulation " , 脉冲编码调制 , 该 音频数据 是未经压缩的 采样裸数据 , 只有 知道该数据的 采样率 / 采样位数 / 通道数 才能将该音频数据播放出来 ;
PCM 数据是 最原始的音频数据 , 音频内容完全无损 , 但是 PCM 数据体积庞大 , 对 PCM 音频数据压缩 分为 无损压缩 和 有损压缩 :
将 PCM 数据 单纯的添加一个 文件头 , 注明该文件的 采样率 / 采样数 / 通道数 等核心数据 , 就是 WAV 文件 , 该格式的文件体积很大 ;
在 提取 PCM 音频格式常用参数 时 , 需要设置 PCM 数据的 采样率 , 通道数 , 采样位数 ;
-ar
参数 , 设置采样率 ; 取值 48000 或 44100 ;-ac
参数 , 设置 PCM 通道数 ; 取值 1 单声道 , 2 立体声 ;-f
参数 , 可取值如下 :
-sample_fmt
参数 , 可取值如下 :
-codec:a
参数 , 可取值如下 :
执行
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 数据是 纯 音频裸数据 , 没有该音频的 格式信息 , 需要在命令行中额外指定 采样率 , 采样位数 , 通道数 , 如果 指定错了参数 , 播放出来的就是随机噪音 ;
执行
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 文件多一个文件头 , 其它数据内容基本一致 ;
执行
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 的播放参数 ;
上面播放 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>
执行
ffmpeg -sample_fmts
命令 , 可以查询 -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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。