ffmpeg showwaves-更改图像顶部的波形颜色

时间:2020-04-08 23:23:40

标签: ffmpeg

我需要ffmpeg的帮助。

我写了这段代码:

@echo off  
for %%F in (*.opus *.ogg) do 
(  
  ffmpeg -y -i "%%F" -loop 1 -i "default.jpg" -filter_complex " 
 [0:a]showwaves=s=2560x1440:mode=cline:r=30,colorkey=0x000000:0.01:0.1,format=yuva420p[v];
[1:v][v]overlay[outv]" -map "[outv]" -pix_fmt yuv420p -map 0:a -vcodec libvpx-vp9 -lossless 1 -speed 8 -acodec copy -shortest "%%~nF.webm" 
)

它的作用是,对于每个.opus或.ogg音频文件,它将输出带有default.jpg背景图像(完全为白色)和其顶部波形的视频,并播放音频。 问题是,我会将波形的颜色更改为黑色,但是即使在阅读了文档之后,我也不了解colorkey的工作原理。

基本上,我想获得类似的东西(但波形为黑色):https://www.youtube.com/watch?v=k9arneFijG8

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以在showwaves过滤器中使用colors选项:

ffmpeg -i input.opus -loop 1 -framerate 30 -i default.jpg -filter_complex "[0:a]aformat=channel_layouts=mono,showwaves=s=2560x1440:mode=cline:r=30:colors=black[v];[1:v][v]overlay=format=auto:x=(W-w)/2:y=(H-h)/2,format=yuv420p[outv]" -map "[outv]" -map 0:a -c:v libvpx-vp9 -c:a copy -shortest output.webm

或者,由于您说default.jpg是完全白色的,因此您可以使用color源过滤器使ffmpeg生成白色背景,

ffmpeg -y -i input.opus -f lavfi -i color=size=2560x1440:rate=30:color=white -filter_complex "[0:a]aformat=channel_layouts=mono,showwaves=size=2560x1440:mode=cline:rate=30:colors=black[v];[1:v][v]overlay=format=auto:x=(W-w)/2:y=(H-h)/2,format=yuv420p[outv]" -map "[outv]" -map 0:a -c:v libvpx-vp9 -c:a copy -shortest output.webm
  • color=size=2560x1440:rate=30:color=white将白色背景设为2560x1440,帧频为30。

  • aformat=channel_layouts=mono使用aformat滤波器使音频单声道,然后再将其提供给showwaves,因此每个通道只有一个组合波形,而不是一个波形。这不会影响输出文件中的音频。

  • [1:v][v]overlay=format=auto:x=(W-w)/2:y=(H-h)/2overlay过滤器。它将使用-i color[1:v])作为背景,前景是aformat + showwaves filterchain (通过逗号连接的线性过滤器集合的总称)的输出,命名为[v]。如果您不喜欢[v],则可以命名。 format覆盖选项将选择最佳外观的色彩空间,x=(W-w)/2以x轴为中心,y=(H-h)/2以y轴为中心。

  • format=yuv420pformat过滤器,用于生成 filtergraph 的输出(所有过滤器的统称)出于播放兼容性原因,请使用yuv420p像素格式。尽管它具有相同的名称,但这是一个过滤器,并且与覆盖过滤器中的format 选项不同。

  • [outv]是我为所有过滤器提供的最终输出的任意名称。

  • -map "[outv]" -map 0:a告诉ffmpeg仅将过滤器输出和来自input.opus的音频包括到输出文件中。