video - 叠加层中的ffmpeg延迟视频
问题描述
我正在尝试覆盖 2 个视频,其中一个(“底部”上的那个),我想延迟开始(比如说 2 秒)。
因此,要么在延迟期间保持第一帧,要么在延迟期间保持黑色帧。我对哪个没有偏好。
这是我基于这个类似问题所尝试的:https ://superuser.com/questions/734234/delayed-video-overlay-using-ffmpeg
ffmpeg
-i video_top
-i video_bottom
-filter_complex
"[0:v]trim=start='00\:04\:17.8':end='00\:04\:32.8',setpts=PTS-STARTPTS, scale=-1:'ih-ih*.5':eval=frame[v0];
[0:a]atrim=start='00\:04\:17.8':end='00\:04\:32.8',asetpts=PTS-STARTPTS[a0];
[1:v]setpts=PTS-STARTPTS+2/TB, format=yuva420p[v1];
[v1][v0]overlay=y=(main_h-overlay_h)*.074:format=yuv444:shortest=0:alpha='straight',format=yuv420p[out]"
-map [out] -map [a0] -vcodec libx264 testing_14.mp4
但是,这样做的结果是两个视频都会在延迟的持续时间内(在这种情况下为 2 秒)冻结第一帧。我尝试了很多替代选项,包括
- 仅在其中一个视频流上设置 PTS,而不是同时在两个视频流上设置
- 使用
-itsoffset
而不是 PTS
似乎没有任何效果。
解决方案
使用tpad 过滤器。在延迟期间,您可以克隆第一帧或显示纯色。简化示例:
克隆第一帧:
ffmpeg -i background.mp4 -i front.mp4 -filter_complex "[0]tpad=start_duration=2:start_mode=clone[bg];[bg][1]overlay" output.mp4
显示纯色:
ffmpeg -i background.mp4 -i front.mp4 -filter_complex "[0]tpad=start_duration=2:start_mode=add:color=black[bg];[bg][1]overlay" output.mp4
推荐阅读
- docker - 如何在使用 docker compose 时在后台运行容器
- database - 从网站存储文件然后推送到 CRM 的最佳方法
- java - 弹出菜单出现在左下角
- java - 如何处理 Java 8 比较器中的空值和重复值?
- python - 从字节元组创建浮点数
- java - Android - 找不到 com.android.tools.build:aapt2:3.2.1-4818971。在以下位置搜索:
- wpf - WPF、MVVM:在 OnPropertyChanged 被触发和 UI 刷新之间的延迟
- c# - linq中的算术运算使用实体框架mvc C#
- haskell - 第 n 个素数和素数因数
- vue.js - 无法进入 vue.js 中的下一页