ffmpeg 获取音频文件PCM切片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg 获取音频文件PCM切片相关的知识,希望对你有一定的参考价值。
参考技术A 背景:为测试听歌识曲的sdk是否准确,获取一批测试音频(MP3格式) 的pcm 数据首先去ffmpeg 官网上获取相应工具
https://ffmpeg.zeranoe.com/builds/
一共有三种类型可供选择,在这里只需要选择 static builds(选择相应系统)
解压后,从bin目录下可以看到有三个可执行文件。大概功能为:
ffmpeg.exe 也是这里的主角,可以负责音频格式的转换。
ffplay.exe 一个播放器
ffprobe.exe 集多媒体文件或流的信息,并以人和机器可读的方式输出
通过调用命令行
ffmpeg -ss 4 -t 16 -i input.mp3 -f s16le -acodec pcm_s16le -b:a 16 -ar 8000 - ac 1 output.raw
相应配置项的解释:
这一段获取的output 文件为 input.mp3 从4s 开始到20s 的数据 ,转存为 采样率8000khz,声道为单声道,位深为16bit 的pcm 原始数据
测试:
结果:
这点之前也不知道,后来查看到工具 Adobe Audition
使用该软件打开raw文件,选择相应的编码格式。
就可以直接播放该PCM数据了
这里从github 找到了个能获取mp3 时长的库:
https://github.com/devsnd/tinytag
脚本存到在:
如何使用 FFmpeg (C/C++) 将原始 pcm_f32le 音频编码为 AAC 编码音频?
【中文标题】如何使用 FFmpeg (C/C++) 将原始 pcm_f32le 音频编码为 AAC 编码音频?【英文标题】:How do you encode raw pcm_f32le audio to AAC encoded audio with FFmpeg (C/C++)? 【发布时间】:2020-01-17 02:12:23 【问题描述】:我正在尝试将原始音频 (pcm_f32le) 编码为 AAC 编码音频。我注意到的一件事是我可以通过 CLI 工具完成此操作:
ffmpeg -f f32le -ar 48000 -ac 2 -c:a pcm_f32le -i out.raw out.m4a -y
这玩得很好,解码也很好。
我采取的步骤:
当我使用 C 示例代码时:https://ffmpeg.org/doxygen/3.4/encode_audio_8c-example.html 并将编码器切换到 codec = avcodec_find_encoder(AV_CODEC_ID_AAC);
输出与AAC相关的各种样本格式,它只提供FLTP。这采用平面/交错格式。
这个page 似乎为每个编解码器提供了各种支持的输入格式。
这很令人困惑,因为我不认为我捕获的原始音频是交错的。我当然尝试过通过它,但它没有按预期工作。
在调用avcodec_receive_packet
后,它将无限期地停留在此 ret 代码中:
AVERROR(EAGAIN): output is not available in the current state - user must try to send input
问题:
如何修改 FFmpeg 中的示例代码以将 pcm_f32le 原始音频转换为 AAC 编码音频?
为什么 CLI 工具能够做到?
我正在使用 libsoundio 从 Linux 的虚拟输出中捕获原始音频。我想知道如何通过平面格式来获取 AAC 编码的音频。
如果无法使用 AAC,是否可以使用 MP3?
【问题讨论】:
我学到的一件事是您必须将 FLT 重新采样为 FLTP。此链接可以提供帮助:github.com/FFmpeg/FFmpeg/blob/master/libavresample/… 【参考方案1】:查找here 一个如何使用 ffmpeg 将原始 pcm_f32le 编码为 aac 的工作示例
【讨论】:
以上是关于ffmpeg 获取音频文件PCM切片的主要内容,如果未能解决你的问题,请参考以下文章