【发布时间】:2017-01-27 20:05:40
【问题描述】:
使用 avconv(甚至是 ffmpeg,因此我可以用作参考),如何通过仅从另一个视频中获取锚点/参考帧来创建延时视频?我找到的大多数信息是关于如何通过组合图像来创建延时视频,我想通过从视频中提取帧来做到这一点。比如说,如果一个视频在 30 FPS 时长 30 秒,我想从这 900 帧中取出 60 帧(900/60 = 每 15 秒)来制作一个 2 秒的视频。
【问题讨论】:
使用 avconv(甚至是 ffmpeg,因此我可以用作参考),如何通过仅从另一个视频中获取锚点/参考帧来创建延时视频?我找到的大多数信息是关于如何通过组合图像来创建延时视频,我想通过从视频中提取帧来做到这一点。比如说,如果一个视频在 30 FPS 时长 30 秒,我想从这 900 帧中取出 60 帧(900/60 = 每 15 秒)来制作一个 2 秒的视频。
【问题讨论】:
要每 15 帧拍摄一次,请使用
ffmpeg -i in.mp4 -vf select='not(mod(n,15))',setpts=N/FRAME_RATE/TB out.mp4
另一种方法是使用framestep过滤器
ffmpeg -i in.mp4 -vf framestep=15,setpts=N/FRAME_RATE/TB out.mp4
【讨论】:
n\,15 和第二个,重新检查命令字符串。如果您使用的是非常旧的 ffmpeg(在添加 framestep 过滤器之前),它会抱怨 no such filter 但您会收到 option 错误,这表明命令格式错误。您是在外壳还是包装器中使用它?确切的字符串是什么?
-vf framestep=15,setpts=N/60/TB,fps=60
-vf framestep=15,setpts=N/60/TB,fps=60,我得到了合适的播放速度。但视频保持其原始长度,仅显示剩余部分的最后一帧。如何将输出修剪为仅在给定 fps 的可用帧?
我有一个来自相机的 H264 视频,经过多次尝试后,我发现以下命令可以产生 16 倍速度的视频,效果良好,60 FPS(选项 -r),适合 YouTube 延时拍摄
ffmpeg -i video.avi -r 60 -filter:v "setpts=0.0625*PTS" -vcodec libx264 -an timelapse.avi
你可以在这里查看结果https://www.youtube.com/watch?v=azhRqKQ7kCU
由于您要求 1/15 帧,它将是 1/15 ~= 0.06667 和 30 FPS 结果视频,您将需要命令
ffmpeg -i video.avi -r 30 -filter:v "setpts=0.06667*PTS" -vcodec libx264 -an timelapse.avi
【讨论】: