如何在Linux中创建MP3的波形图像?

时间:2010-12-17 06:06:46

标签: linux audio mp3 packages

鉴于MP3,我想将文件中的波形提取为图像(.png)

是否有可以满足我需要的包裹?

7 个答案:

答案 0 :(得分:15)

使用soxgnuplot可以创建基本波形图像:

sox audio.mp3 audio.dat #create plaintext file of amplitude values
tail -n+3 audio.dat > audio_only.dat #remove comments

# write script file for gnuplot
echo set term png size 320,180 > audio.gpi #set output format
echo set output \"audio.png\" >> audio.gpi #set output file
echo plot \"audio_only.dat\" with lines >> audio.gpi #plot data

gnuplot audio.gpi #run script

enter image description here

要创建更简单/更漂亮的内容,请使用以下GNU Plot文件作为模板(将其另存为 audio.gpi ):

#set output format and size
set term png size 320,180

#set output file
set output "audio.png"

# set y range
set yr [-1:1]

# we want just the data
unset key
unset tics
unset border
set lmargin 0             
set rmargin 0
set tmargin 0
set bmargin 0

# draw rectangle to change background color
set obj 1 rectangle behind from screen 0,0 to screen 1,1
set obj 1 fillstyle solid 1.0 fillcolor rgbcolor "#222222"

# draw data with foreground color
plot "audio_only.dat" with lines lt rgb 'white'

然后运行:

sox audio.mp3 audio.dat #create plaintext file of amplitude values
tail -n+3 audio.dat > audio_only.dat #remove comments

gnuplot audio.gpi #run script

enter image description here

基于this answer基于类似的问题,该问题在文件格式方面更为一般,但在使用的软件方面较为笼统。

答案 1 :(得分:2)

如果您有GUI环境,可以使用audacity音频编辑器加载mp3,然后使用print命令生成波形的pdf。然后将pdf转换为png。

答案 2 :(得分:2)

我会做这样的事情:

  • 找到一个将mp3转换为PCM的工具,即具有8位或16位值的二进制数据 每个样本。我想mplayer可以做到这一点

  • 将结果传递给将二进制数据转换为ascii的实用程序 用十进制格式表示数字

  • 使用gnuplot将此值列表转换为png图。

并且,unix工具之间的管道功能。现在,如果gnuplot能够从二进制格式读取数据,则此列表中的步骤2可能是可选的。

答案 3 :(得分:1)

这是SoX的标准功能(声音,Windows和Linux的命令行工具) 检查http://sox.sourceforge.net/sox.html

上的“频谱图”功能

“频谱图以便携式网络图形(PNG)文件呈现,并显示X轴的时间,Y轴的频率和Z轴的音频信号幅度。表示Z轴值通过XY平面中像素的颜色(或可选择的强度)。如果音频信号包含多个通道,则从通道1(这是立体声音频的左声道)开始从上到下显示这些通道。“

答案 4 :(得分:1)

您可能需要考虑来自BBC的audiowaveform。

  

audiowaveform是一个C ++命令行应用程序,可以从MP3,WAV或FLAC格式的音频文件生成波形数据。波形数据可用于生成音频的视觉呈现,外观与音频编辑应用程序类似。

     

波形数据文件以二进制格式(.dat)或JSON(.json)保存。给定输入波形数据文件,audiowaveform还可以在给定的时间偏移和缩放级别将音频波形渲染为PNG图像。

     

通过首先组合左右声道以产生单声道信号,从输入立体声音频信号产生波形数据。下一阶段是计算N个输入样本组的最小和最大样本值(其中N由--zoom命令行选项控制),这样每个N个输入样本产生一对最小和最大点。输出

https://github.com/bbcrd/audiowaveform

答案 5 :(得分:0)

FFmpeg Could not build module 'Firebase'

FFmpeg可以像往常一样在单个命令中做到这一点:

示例命令:

showwavespic

您还可以在RGB sudo apt install ffmpeg ffmpeg -i in.flac -filter_complex "showwavespic=s=640x320:colors=black" \ -frames:v 1 out.png 中设置colorsUsing hex colors with ffmpeg's showwaves

我用两个相同的立体声通道说“你好,我叫Ciro Santilli”的测试数据:

colors=0x0088FF

输出:

enter image description here

背景色

默认情况下背景是透明的,但是:

所以我们达到了:

wget -O in.flac https://raw.githubusercontent.com/cirosantilli/media/d6e9e8d0b01bccef4958eb8b976c3b0a34870cd3/Hello_my_name_is_Ciro_Santilli.flac

立即添加到Wiki;-)

对于未启动的用户,该CLI创建一个处理图:

ffmpeg -i in.flac -f lavfi -i color=c=black:s=640x320 -filter_complex \
  "[0:a]showwavespic=s=640x320:colors=white[fg];[1:v][fg]overlay=format=auto" \
  -frames:v 1 out.png

其中black background (1:v) ------------------------> overlay ----> out.png ^ | in.flac (0:a) ----> showwavespic ----> (fg) -------+ 过滤器接受两个图像输入并产生所需的输出,overlay只是分配给中间节点的名称。

enter image description here

拆分频道

本教程还介绍了其他选项,例如使用fg分割频道:

enter image description here

带有轴的gnuplot图

好的,我承认,FFmpeg不能单独做到这一点(至今!)。但是Wiki已经为gnuplot提供了一种有效的数据导出方法:

-filter_complex "showwavespic=s=640x480:colors=black:split_channels=1"

enter image description here

视频表示形式

请参阅:https://superuser.com/questions/843774/create-a-video-file-from-an-audio-file-and-add-visualizations-from-audio

在Ubuntu 20.04,FFmpeg 4.2.4上进行了测试。

答案 6 :(得分:0)

以qubodup的答案为基础

# install stuff
apt install gnuplot
apt install sox
apt install libsox-fmt-mp3

#create plaintext file of amplitude values
sox sound.mp3 sound.dat

# run script saved on audio.gpi file
gnuplot audio.gpi

您还可以在配置文件中注释“ set output ...”行,然后执行

gnuplot audio.gpi > my_sound.png

在这种情况下,配置文件为audio.gpi,并且在内部具有

#!/usr/bin/env gnuplot

set datafile commentschars ";"

set terminal png #size 800,400
set output "sound.png"

unset border
unset xtics
unset ytics

set key off

plot "sound.dat" with lines

会产生如下图像

enter image description here

我想要没有轴,没有图例,png(比svg小得多)。