ffmpeg - FFMPEG 保存多个帧并用作电影
问题描述
我有一个视频,我正试图从中创建跳投。例如,我希望我的命令输出显示原始剪辑的第 5 帧 30 帧,以及 OG 剪辑的第 25 帧显示 30 帧。
假设 OG 剪辑是 30 FPS
ffmpeg -t 1 -i og_clip.mp4 -filter_complex "
[0]select=eq(n\,5)[H1];[0][H1]overlay[O1];
[0]select=eq(n\,25)[H2];[0][H2]overlay[O2];
[O1][O2]concat=n=2[Merge]" -map "[Merge]" out.mp4
以上不正确。
到目前为止,我一直在做的是一个两部分的命令:
ffmpeg -i og_clip.mp4 -vf "select=eq(n\,5)" -vframes 1 -y out_0.png
ffmpeg -i og_clip.mp4 -vf "select=eq(n\,25)" -vframes 1 -y out_1.png
ffmpeg -t 1 -i og_clip.mp4 -i out_0.png -i out_1.png -filter_complex "
[0][1]overlay[H1];[0][2]overlay[H2];
[H1][H2]concat=n=2[Merge]" -map "[Merge]" out.mp4
这一直为我工作。唯一的问题是,对于我要使用的每一帧,首先转换为 png 的过程需要太长时间。我正在尝试将其全部压缩为一个命令。我认为 png 的编码需要这么长时间。
任何帮助将非常感激!
解决方案
利用
ffmpeg -t 1 -i og_clip.mp4 -filter_complex "[0]select=eq(n\,5)+eq(n\,25),settb=1/30,setpts=N*30,fps=30" -an out.mp4
选择帧后,将时间戳调整为相隔 30 帧。然后 fps 过滤器将用克隆的帧填补这些空白。
推荐阅读
- react-native - 关于反应原生的 podfile 问题
- android - 如何确保为每个设备创建一个房间,而不是每次启动应用程序时创建一个新实例
- python - 聚合函数的分组和过滤
- mysql - 如何使用python访问位于不同位置(非本地)的另一台机器上的MySQL数据库
- angular - 使用 ngx-translate/core 进行角度翻译
- excel - 如何在多列中的公式中查找特定文本(基于列标题名称)并替换为不同的文本
- c# - 如何从一组源文件为多个框架编译 C# 代码
- php - 将 foreach 中的值连接到输入值属性中
- r - glmnet 和制作矩阵有问题吗?
- angular - 具有多个条件的Angular 4数据过滤器