gpt4 book ai didi

FFMPEG : Fill/Change (part of) audio waveform color as per actual progress with respect to time progress

转载 作者:行者123 更新时间:2023-12-04 22:59:28 32 4
gpt4 key购买 nike

我正在尝试制作从 mp3 文件生成波形并显示在背景图像上并播放音频的命令。
与此一起,我想根据整个视频时间的流逝从左到右更改波形颜色(类似于进度条)。

我创建了以下命令,该命令使用 drawbox 根据当前时间位置显示进度条来填充框颜色。

ffmpeg -y -loop 1 -threads 0 -i sample_background.png -i input.mp3 -filter_complex "color=red@0.5:s=1280x100[Color];[0:v]drawbox=0:155:1280:100: gray@1:t=fill[baserect];[1:a]aformat=channel_layouts=mono,showwaves=s=1280x100:rate=7:mode=cline:scale=sqrt:colors=0xffffff[waveform];[baserect] [波形] 叠加=0:155 [v1];[v1][颜色] 叠加=x='if(gte(t,0), -W+(t)*64, NAN)':y=155:format= yuv444[v2]"-map "[v2]"-map 1:a -c:v libx264 -crf 35 -ss 0 -t 20 -c:a copy -shortest -pix_fmt yuv420p -threads 0 output_withwave_and_progresbar.mp4

enter image description here

但我想在生成的音频波形中显示进度,而不是使用 drawbox 制作/填充矩形。

因此,我尝试制作 2 个不同颜色的 2 个波形并相互叠加,我想展示这样一种方式,即顶部波形应仅显示从 x 位置(左)到当前时间的部分。

ffmpeg -y -loop 1 -threads 0 -i sample_background.png -i input.mp3 -filter_complex "[0:v]drawbox=0:155:1280:100:gray@1:t=fill[baserect];[1 :a]aformat=channel_layouts=mono,showwaves=s=1280x100:rate=7:mode=cline:scale=sqrt:colors=0xff0000[波形];[1:a]aformat=channel_layouts=mono,showwaves=s=1280x100 :rate=7:mode=cline:scale=sqrt:colors=0xffffff[waveform2];[baserect][waveform] overlay=0:155 [v1];[v1][waveform2] overlay=x='if(gte( t,0), -W+(t)*64, NAN)':y=155:format=yuv444[v2]"-map "[v2]"-map 1:a -c:v libx264 -crf 35 -ss 0 -t 20 -c:复制 -shortest -pix_fmt yuv420p -threads 0 test.mp4

但我无法找到从左到右进行删除效果的方法,目前它正在滑动(因为我正在更改覆盖的 x)
可以使用 alpha 合并并将所有其他像素设置为透明并仅显示小于 x pos 的像素来完成。
但我无法找到如何做到这一点。

背景图片:
enter image description here

我们可以使用任何 mp3 文件文件,目前我设置了 20 秒的持续时间。

有人可以指导我们如何做到这一点吗?

谢谢。

最佳答案

使用混合过滤器,即
ffmpeg -y -loop 1 -threads 0 -i sample_background.png -i input.mp3 -filter_complex "[0:v]drawbox=0:155:1280:100:gray@1:t=fill[baserect];[1:a]aformat=channel_layouts=mono,asplit[red][white];[red]showwaves=s=1280x100:rate=7:mode=cline:scale=sqrt:colors=0xff0000[red];[white]showwaves=s=1280x100:rate=7:mode=cline:scale=sqrt:colors=0xffffff[white];[red][white]blend=all_expr='if(lte(X/W,T/64),A,B)'[waveform];[baserect][waveform]overlay=0:155:format=yuv444[v]" -map "[v]" -map 1:a -c:v libx264 -crf 35 -ss 0 -t 20 -c:a copy -shortest -pix_fmt yuv420p -threads 0 test.mp4
在哪里 64是音频的总持续时间。

关于FFMPEG : Fill/Change (part of) audio waveform color as per actual progress with respect to time progress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51792396/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com