如何在使用ffmpeg的视频中的前30秒添加徽标?


9

我正在尝试在带有ffmpeg的视频的前30秒内添加徽标。我有一个视频d1.mp4和一个徽标logo.png

视频开始播放时,水印应位于视频的左上角或右上角,并在30秒后消失。

您能告诉我如何添加吗?


我的视频名称是d1.mp4,我的徽标名称是logo.png,谢谢..
iwocan 2013年

那说明什么ffmpeg -i d1.mp4 -i logo.png呢?请输入该命令,然后向我们显示输出。当询问有关的问题时ffmpeg,您应该始终包括尽可能多的详细信息,包括所拥有的视频/音频材料,已尝试的内容以及已尝试的所有内容的完整命令行输出。
slhck

这就是我在cmd屏幕上看到的内容。 pastebin.com/bPCnhXh2
iwocan 2013年

Answers:


13
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秒钟。


1
很有意思!你能解释为什么framerateloop在这种情况下,而不是为没有褪色过滤器的简单叠加需要?
拉吉卜

非常感谢mark40,但是当我编写此代码时,cmd屏幕不会停止..我不知道为什么,但是它对我没有用..
iwocan 2013年

嗨,LordNeckbeard,这是截图。.u1312.hizliresim.com
1j/

1
@iwocan我相信您可以从Windows提示符下复制内容。我以为您会搜索该怎么做,但请查看“从Windows命令提示符复制到剪贴板”
llogan 2013年

4
@Rajib:-framerate-loop的静止图像的原因是淡出将起作用。如果只有一帧,则无法在1秒的间隔内淡出。理想情况下,它应与视频具有相同的帧频,以使淡入淡出尽可能平滑。
mark4o

19

使用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:10overlay=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的答案


非常感谢你!:)我再次为英语破损表示歉意。此命令非常有效!:)
iwocan 2013年

终于可以理解了!我应该怎样使它出现在开头而不是结尾?
cikatomo,2015年

我的意思是出现在开头和结尾?两次 我已经尝试过enable = between(t \,0 \,30):enable = between(t \,50 \,60),但最后一个时间表才生效
cikatomo 2015年

@cikatomo enable=not(between'(t,30,50)')。这将始终显示叠加层,但不会持续30-60秒。
llogan 2015年

完美,谢谢。尽管警告您不要单独使用overlay所有内容,但我还是这样做了,因为左上角的默认位置是我想要的。(所以最后我的旗帜简直就是filter_complex overlay。)
跟随
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.