从其他视频创建时间流逝视频

Orl*_*ndo 11 ffmpeg avconv

使用avconv(甚至ffmpeg,所以我可以用作参考),如何通过仅从另一个视频中获取锚点/参考帧来创建时间推移视频?我发现的大部分信息都是关于如何通过组合图像来创建时间推移视频,我想通过从视频中提取帧来实现.比方说,如果一个视频在30 FPS下长达30秒,我想从900帧(900/60 =每15秒)中取出60帧来产生2秒的视频.

Gya*_*yan 18

要采用每15帧,请使用

ffmpeg -i in.mp4 -vf select='not(mod(n,15))',setpts=N/FRAME_RATE/TB out.mp4
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用帧步滤波器

ffmpeg -i in.mp4 -vf framestep=15,setpts=N/FRAME_RATE/TB out.mp4
Run Code Online (Sandbox Code Playgroud)

  • 对于第一个错误,您可能需要转义逗号,所以`n \,15`和第二个错误,重新检查命令字符串.如果您使用的是非常旧的ffmpeg(在添加了framestep过滤器之前),它会抱怨`没有这样的过滤器',但是你得到一个'option`错误,这表示命令格式错误.你在shell或包装器中使用它吗?什么是确切的字符串? (4认同)
  • 是的,它将重置帧速率。为了避免这种情况,`-vf framestep = 15,setpts = N / 60 / TB,fps = 60` (4认同)
  • 使用 `-vf framestep=15,setpts=N/60/TB,fps=60`,我得到了适当的播放速度。但视频保持其原始长度,仅显示剩余部分的最后一帧。如何将输出修剪为仅给定 fps 下的可用帧? (3认同)
  • 运行这两个命令时出现不同的错误:“缺少 ')' 或 'mod(n'” 中的参数太多”和“未找到选项 'framestep'” (2认同)
  • @AdamAL 使用 `-an` 对我来说还不够,我必须使用 `-vf framestep=15,setpts=N/60/TB -r 60`。实际上,将 fps 设置从“-vf”移动到“-r”。完整命令为“ffmpeg -an -i in.mp4 -vf framestep=15,setpts=N/60/TB -r 60 out.mp4”。 (2认同)

小智 13

我有一个来自摄像机的 H264 视频,经过多次尝试,发现以下命令可以生成速度快 16 倍的视频,效果良好,帧速率为 60 FPS(选项 -r),这对于 YouTube 延时拍摄很有帮助

ffmpeg -i video.avi -r 60 -filter:v "setpts=0.0625*PTS" -vcodec libx264 -an timelapse.avi
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看结果https://www.youtube.com/watch?v=azhRqKQ7kCU

由于您要求 1/15 帧,因此 30 FPS 结果视频将是 1/15 ~= 0.06667,您将需要命令

ffmpeg -i video.avi -r 30 -filter:v "setpts=0.06667*PTS" -vcodec libx264 -an timelapse.avi
Run Code Online (Sandbox Code Playgroud)