我正在尝试在带有ffmpeg的视频的前30秒内添加徽标。我有一个视频d1.mp4
和一个徽标logo.png
。
视频开始播放时,水印应位于视频的左上角或右上角,并在30秒后消失。
您能告诉我如何添加吗?
ffmpeg -i d1.mp4 -i logo.png
呢?请输入该命令,然后向我们显示输出。当询问有关的问题时ffmpeg
,您应该始终包括尽可能多的详细信息,包括所拥有的视频/音频材料,已尝试的内容以及已尝试的所有内容的完整命令行输出。
我正在尝试在带有ffmpeg的视频的前30秒内添加徽标。我有一个视频d1.mp4
和一个徽标logo.png
。
视频开始播放时,水印应位于视频的左上角或右上角,并在30秒后消失。
您能告诉我如何添加吗?
ffmpeg -i d1.mp4 -i logo.png
呢?请输入该命令,然后向我们显示输出。当询问有关的问题时ffmpeg
,您应该始终包括尽可能多的详细信息,包括所拥有的视频/音频材料,已尝试的内容以及已尝试的所有内容的完整命令行输出。
Answers:
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
"[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
-map 0:a -c:v libx264 -c:a copy -shortest out.mp4
假定徽标是具有alpha通道的单个静止图像,并且您要将其覆盖在帧率为30000/1001(NTSC速率)的视频上。-framerate
如果输入的视频与其他视频不同,请更改。如果您的徽标是视频,请省略-framerate 30000/1001 -loop 1
。如果徽标没有Alpha通道,请format=yuva420p,
在之前紧接插入一个,以添加一个fade
。
这将在10,10的x,y位置显示徽标30秒钟,然后淡出1秒钟。
framerate
和loop
在这种情况下,而不是为没有褪色过滤器的简单叠加需要?
-framerate
和-loop
的静止图像的原因是淡出将起作用。如果只有一帧,则无法在1秒的间隔内淡出。理想情况下,它应与视频具有相同的帧频,以使淡入淡出尽可能平滑。
overlay
视频过滤器向视频添加徽标:ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4
要了解此命令,您需要了解什么是流说明符,阅读FFmpeg过滤简介将有所帮助。[0:v]
指的是第一输入(video.mp4
)[1:v]
的视频流,指的是第二输入(logo.mp4
)的视频流。这是您可以分辨overlay
使用哪些输入的方法。您可以省略[0:v][1:v]
,并且overlay
仍然可以使用,但是建议您明确使用,不要依赖未知的默认值。
默认情况下,徽标将位于左上方。
使用-codec:a copy
将流式复制音频。这只是重新混合音频,而不是重新编码。可以将其视为音频的“复制和粘贴”。
本示例将徽标向右移动10个像素,向下移动10个像素:
ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4
本示例将徽标从右侧移动10个像素,并向下移动10个像素:
ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4
main_w
指“主要”输入的宽度(背景或[0:v]
),overlay_w
指“叠加”输入的宽度(徽标或[1:v]
)。因此,在示例中,可以将其转换为overlay=320-90-10:10
或overlay=220:10
。
某些过滤器可以处理时间轴编辑,从而允许您使用算术表达式来确定何时应应用过滤器。请参阅以ffmpeg -filters
查看哪些过滤器支持时间轴编辑。
本示例将徽标显示到30秒:
ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4
如果要淡出徽标,请参考mark4o的答案。
enable=not(between'(t,30,50)')
。这将始终显示叠加层,但不会持续30-60秒。
overlay
所有内容,但我还是这样做了,因为左上角的默认位置是我想要的。(所以最后我的旗帜简直就是filter_complex overlay
。)