GStreamer - 从 MP4 文件生成音频波形
Posted
技术标签:
【中文标题】GStreamer - 从 MP4 文件生成音频波形【英文标题】:GStreamer - Generate audio waveform from MP4 file 【发布时间】:2018-10-01 13:16:43 【问题描述】:我有一个两部分的问题,
1) 我有一个 MP4 文件,想生成它的音频波形。
2) 我有另一个 MP4 文件,它在通道 [0] 和通道 [1] 有音频,还有一个视频轨道,我想为两个通道生成波形作为单独的图像。
如何使用 GSteamer 实现以上两个目标?
【问题讨论】:
这些都是陈述:)。另外,请定义“样本点”的含义 @szatmary 其实想生成波形 您想要波形图像,还是原始 PCM 数据? @szatmary 我想从 MP4 文件的音频中生成波形。 @VC.One 来自 ffmpeg,我需要使用 Gstreamer 的相同 【参考方案1】:原始音频是 16 位还是 32 位格式?采样率(44100 赫兹)是多少,持续时间是多少?
无论如何假设 44.1khz 持续时间为 10 秒...因为您不能将 44000 个样本绘制为像素宽度,所以选择最终显示尺寸(例如:宽度 = 800 像素和高度 = 600 像素)并进行数学运算:
//# is (samplerate / duration) / width...
(44100 / 10) / 800 = 551;
在读取前 2 个值后,您将向前跳转 551 个字节并重复直到总共 (.
所以在你从pos = 0;
开始的原始数据中...
1) 检查这个和下一个样本,然后将它们的值相乘 (sample[pos] x sample[pos+1]
)。
2) 将结果除以 65335(最大值为 16 位或 2 个字节)。这是您的第一个样本或点的最终值。
3) 根据图像高度画一条线(eg: 600px)所以如果sample = 0.83
那么:
line_height = (600 x 0.83); //# gives 498 as line height
line_count += 1; //# add plus 1 to line count (stop when it reaches 800)
4) 从位置 [pos]
向前跳过 +551 个字节并重复步骤 (1) 直到 line_count == 800;
【讨论】:
以上是关于GStreamer - 从 MP4 文件生成音频波形的主要内容,如果未能解决你的问题,请参考以下文章
在 mp4 中使用 gstreamer h264 + aac 录制只会产生部分可播放的文件
如何使用 Gstreamer 从 PNG 图像创建 mp4 视频文件