我有超过 100 多个视频,我需要在每个视频的顶层粘贴一个 5 秒的 avi 视频(例如水印或动画徽标)。它可以用 Adobe Premiere 执行,但它太长而且太笨了。我在哪里可以找到很好的框架来处理视频来执行这个(任何语言)?或者任何其他方法来做到这一点?也许'ffmpeg'可以提供帮助?任何帮助、链接、文档都会很棒。
2 回答
不是很清楚你所说的顶层 5 秒 avi 视频是什么意思。我猜你的水印是 5 秒长,100 多个视频是任意长度,你想把第一个放在第二个的某个位置
ffmpeg 有一个覆盖过滤器。:这是文档
将一个视频叠加在另一个视频之上。
它需要两个输入和一个输出,第一个输入是覆盖第二个输入的“主”视频。
它接受参数:x:y[:options]。
x 是主视频上叠加视频的 x 坐标,y 是 y 坐标。x 和 y 是包含以下参数的表达式:
'main_w, main_h'</p>
main input width and height
'W,H'</p>
same as main_w and main_h
'overlay_w,overlay_h'</p>
overlay input width and height
'w,h'</p>
same as overlay_w and overlay_h
options 是 key=value 对的可选列表,以“:”分隔。
接受选项的描述如下。
'RGB'</p>
If set to 1, force the filter to accept inputs in the RGB color space. Default value is 0.
请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好将两个输入通过 setpts=PTS-STARTPTS 过滤器让它们以相同的零时间戳开始,就像电影过滤器的例子一样。
遵循一些示例:
# draw the overlay at 10 pixels from the bottom right
# corner of the main video.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
这个对我有用: ffmpeg -i ./external/bb_high.mp4 -i external/small.mp4 -strict -2 -filter_complex 'overlay=10:10' output.mp4
但是 5 秒结束时,我认为最后一帧仍保留在叠加层中。
这是 gstreamer 选项更好的地方。有一个 videomixer 元素可以用来做这种事情。
不使用 ffmpeg,但使用 Expression Encoder,您可以在视频顶部叠加图像或“移动图像”,或者您可以轻松地将两个视频拼接在一起。