我正在尝试使用ffmpeg为输入视频添加叠加层,该视频会在视频开始后的某个时间出现。
添加叠加层的基本方法是:
ffmpeg -i in.avi -vf "movie=overlay.avi [ovl]; [in][ovl] overlay" out.avi
但是,这会从输入视频的开头添加叠加视频(或图像),直到其中一个视频结束。
我知道如何使用movie=overlay.avi:seek_point=1.4
来覆盖叠加视频,但是输入视频的偏移怎么办?
我总是可以将视频剪辑到所需的点,在第二个剪辑上添加叠加,然后缝合两个,但这不是很有效。
答案 0 :(得分:10)
展开arttronics' insightful, but speculative answer,视频确实很容易使用-itsoffset
标记覆盖偏移。
-itsoffset
标志的作用如下:
-itsoffset offset (输入)
以秒为单位设置输入时间偏移。 [ - ] hh:mm:也支持ss [.xxx]语法。偏移量将添加到输入文件的时间戳中。指定正偏移意味着相应的流延迟偏移秒。
(注意:尽管短语“输入文件 s ”,但该标志实际上仅适用于紧随其后的输入。另请注意this bug关于不适用于音频流的偏移。 / T attronics。)
所以用偏移覆盖就像这样简单:
ffmpeg -i bg.avi -itsoffset 2 -i over.avi -filter_complex overlay out.avi
无论容器类型如何,这都有效。
答案 1 :(得分:6)
根据有限的FFmpeg overlay documentation,该流程预计两个视频具有相同的timestamp
(例如,0:00:00:00)值以保持同步, 警告 ,如果没有完成,则avi.out
将有来自{{>> 不需要的偏移 {1}}使用的视频文件。
但是,您可以利用这一事实并利用它!
然后可以想象,如果overlay.avi
视频的起始overlay.avi
的 所需偏移量 必需在timestamp
输入视频上,in.avi
视频将针对相同的overlay.avi
(由timestamp
提供)触发,以创建预期结果对于in.avi
视频。
唯一的坏消息是out.avi
容器没有时间戳,与.avi
或.mp4
文件格式不同。您必须切换为支持.mkv
的文件格式,才能使其生效(例如,*timestamps*
或overlay.mp4
)以创建最终的 输出视频文件 必需。