使用 FFMPEG 向视频内视觉进度条添加背景?
Adding a background to an in-video visual progress bar with FFMPEG?
使用
的答案
我想给进度条本身一个背景,例如进度条会变成白色,随着时间的推移会被红色进度条覆盖。
我的第一个决定是应用抽屉式滤镜,因此出于我的目的,视频的宽度为 1280 像素,持续时间为 6.027 秒。我试过了
ffmpeg -i uuid_nordvpn.mp4 -vf "color=c=red:s=1280x30[bar];[0][bar]overlay=-w+(w/6.072733)*t:H-h:shortest=1, drawbox=x=0:y=720-30:width=1280:height=30:thickness=fill:color=white" out.mp4
但我得到的只是绘制在彩色滤镜上方的白色抽屉式滤镜。
显而易见的解决方案是交换颜色和绘图框过滤器,但是 returns 一个错误 Too many inputs specified for the "color" filter
,我猜这意味着你只能在开始时使用颜色过滤器。
我也试过应用2个滤色器,另一个滤色器而不是填充正在下降,但是你不能应用2个滤色器,再次给出原因Too many inputs specified for the "color" filter.
此时我完全迷失了,我该如何为这个过滤器提供背景?
您可以使用多个 color
过滤器。但是 color
过滤器是一个源过滤器,所以它不能出现在你的过滤器链的中间(这就是错误消息所说的)。它必须是链中的第一个过滤器。这应该适合你:
编辑:您使用 overlay
滑动的方法比我原来的 scale
方法更快。我已经以观察到的速度添加了所有 4 个实现:
1. 2xcolor
+2xoverlay
: x14.1
ffmpeg -i uuid_nordvpn.mp4 \
-vf 'color=c=white:s=1280x30[L0]; \
color=c=red:s=1280x30[L1]; \
[L0][L1]overlay=(t/6.072733-1)*w:0:eval=frame[L2]; \
[in][L2]overlay=0:690:shortest=1[out]' \
out.mp4
2。 drawbox
+ color
+ overlay
: 13.4x
ffmpeg -i uuid_nordvpn.mp4 \
-vf '[in]drawbox=0:690:1280:30:white:fill[L0]; \
color=c=red:s=1280x30[L1]; \
[L0][L1]overlay=(t/6.072733-1)*w:690:eval=frame:shortest=1[out]' \
out.mp4
3。 2xcolor
+scale
+2xoverlay
: 5.09x
ffmpeg -i uuid_nordvpn.mp4 \
-vf 'color=c=white:s=1280x30[L0]; \
color=c=red:s=1280x30,scale=max(t/6.072733*in_w\,1):in_h:eval=frame[L1]; \
[L0][L1]overlay=0:0[L2]; \
[in][L2]overlay=0:690:shortest=1[out]' \
out.mp4
4。 drawbox
+ color
+ scale
+ overlay
: 5.03x
ffmpeg -i uuid_nordvpn.mp4 \
-vf '[in]drawbox=0:690:1280:30:white:fill[L0]; \
color=c=red:s=1280x30,scale=max(t/6.072733*in_w\,1):in_h:eval=frame[L1]; \
[L0][L1]overlay=0:690:shortest=1[out]' \
out.mp4
使用
的答案
我想给进度条本身一个背景,例如进度条会变成白色,随着时间的推移会被红色进度条覆盖。
我的第一个决定是应用抽屉式滤镜,因此出于我的目的,视频的宽度为 1280 像素,持续时间为 6.027 秒。我试过了
ffmpeg -i uuid_nordvpn.mp4 -vf "color=c=red:s=1280x30[bar];[0][bar]overlay=-w+(w/6.072733)*t:H-h:shortest=1, drawbox=x=0:y=720-30:width=1280:height=30:thickness=fill:color=white" out.mp4
但我得到的只是绘制在彩色滤镜上方的白色抽屉式滤镜。
显而易见的解决方案是交换颜色和绘图框过滤器,但是 returns 一个错误 Too many inputs specified for the "color" filter
,我猜这意味着你只能在开始时使用颜色过滤器。
我也试过应用2个滤色器,另一个滤色器而不是填充正在下降,但是你不能应用2个滤色器,再次给出原因Too many inputs specified for the "color" filter.
此时我完全迷失了,我该如何为这个过滤器提供背景?
您可以使用多个 color
过滤器。但是 color
过滤器是一个源过滤器,所以它不能出现在你的过滤器链的中间(这就是错误消息所说的)。它必须是链中的第一个过滤器。这应该适合你:
编辑:您使用 overlay
滑动的方法比我原来的 scale
方法更快。我已经以观察到的速度添加了所有 4 个实现:
1. 2xcolor
+2xoverlay
: x14.1
ffmpeg -i uuid_nordvpn.mp4 \
-vf 'color=c=white:s=1280x30[L0]; \
color=c=red:s=1280x30[L1]; \
[L0][L1]overlay=(t/6.072733-1)*w:0:eval=frame[L2]; \
[in][L2]overlay=0:690:shortest=1[out]' \
out.mp4
2。 drawbox
+ color
+ overlay
: 13.4x
ffmpeg -i uuid_nordvpn.mp4 \
-vf '[in]drawbox=0:690:1280:30:white:fill[L0]; \
color=c=red:s=1280x30[L1]; \
[L0][L1]overlay=(t/6.072733-1)*w:690:eval=frame:shortest=1[out]' \
out.mp4
3。 2xcolor
+scale
+2xoverlay
: 5.09x
ffmpeg -i uuid_nordvpn.mp4 \
-vf 'color=c=white:s=1280x30[L0]; \
color=c=red:s=1280x30,scale=max(t/6.072733*in_w\,1):in_h:eval=frame[L1]; \
[L0][L1]overlay=0:0[L2]; \
[in][L2]overlay=0:690:shortest=1[out]' \
out.mp4
4。 drawbox
+ color
+ scale
+ overlay
: 5.03x
ffmpeg -i uuid_nordvpn.mp4 \
-vf '[in]drawbox=0:690:1280:30:white:fill[L0]; \
color=c=red:s=1280x30,scale=max(t/6.072733*in_w\,1):in_h:eval=frame[L1]; \
[L0][L1]overlay=0:690:shortest=1[out]' \
out.mp4