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

Pra*_*man 15 linux audio mp3 packages

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

有没有可以做我需要的包裹?

qub*_*dup 16

使用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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要创建更简单/更漂亮的东西,请使用以下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'
Run Code Online (Sandbox Code Playgroud)

然后运行:

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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

基于对类似问题的答案,该问题在文件格式方面更为一般,但在使用的软件方面较不通用.


Cir*_*四事件 8

FFmpegshowwavespic

FFmpeg 可以像往常一样通过单个命令完成此操作:

命令示例:

sudo apt install ffmpeg
ffmpeg -i in.flac -filter_complex "showwavespic=s=640x320:colors=black" \
  -frames:v 1 out.png
Run Code Online (Sandbox Code Playgroud)

您还可以设置colorsRGB colors=0x0088FF使用十六进制颜色与 ffmpeg 的 showwaves

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

wget -O in.flac https://raw.githubusercontent.com/cirosantilli/media/d6e9e8d0b01bccef4958eb8b976c3b0a34870cd3/Hello_my_name_is_Ciro_Santilli.flac
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

背景颜色

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

所以我们得出:

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
Run Code Online (Sandbox Code Playgroud)

现已添加到 Wiki ;-)

对于新手来说,该 CLI 创建了一个处理图:

black background (1:v) ------------------------> overlay ----> out.png
                                                   ^
                                                   |
in.flac (0:a) ----> showwavespic ----> (fg) -------+
Run Code Online (Sandbox Code Playgroud)

其中,例如overlay过滤器采用两个图像输入并产生所需的输出,并且fg只是分配给中间节点的名称。

在此输入图像描述

分割通道

本教程还涵盖其他选项,例如使用以下命令分割通道-filter_complex "showwavespic=s=640x480:colors=black:split_channels=1"

在此输入图像描述

带轴的 gnuplot 图

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

ffmpeg -i in.flac -ac 1 -filter:a aresample=8000 -map 0:a -c:a pcm_s16le -f data - | \
  gnuplot -p -e "set terminal png size 640,360; set output 'out.png'; plot '<cat' binary filetype=bin format='%int16' endian=little array=1:0 with lines;"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

视频展示

请参阅: 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 上测试。


Lif*_*ard 3

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

  • 我真诚地试图提供帮助(令人惊讶的大胆可以打印出来)。另外,这个:http://forum.audacityteam.org/viewtopic.php?f=15&amp;t=38341 (5认同)