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 heightline_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 仅播放视频

如何使用 Gstreamer 从 PNG 图像创建 mp4 视频文件

如何在gstreamer中录制音频和视频

ffmpeg:如何将音频波文件循环到没有任何音频通道的视频中

如何通过gstreamer将pcap转换为带有视频和音频的avi文件?