我需要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
谢谢。
答案 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)/2
是overlay过滤器。它将使用-i color
([1:v]
)作为背景,前景是aformat + showwaves filterchain (通过逗号连接的线性过滤器集合的总称)的输出,命名为[v]
。如果您不喜欢[v]
,则可以命名。 format
覆盖选项将选择最佳外观的色彩空间,x=(W-w)/2
以x轴为中心,y=(H-h)/2
以y轴为中心。
format=yuv420p
是format过滤器,用于生成 filtergraph 的输出(所有过滤器的统称)出于播放兼容性原因,请使用yuv420p像素格式。尽管它具有相同的名称,但这是一个过滤器,并且与覆盖过滤器中的format
选项不同。
[outv]
是我为所有过滤器提供的最终输出的任意名称。
-map "[outv]" -map 0:a
告诉ffmpeg仅将过滤器输出和来自input.opus
的音频包括到输出文件中。