You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GStreamer命令行制作倍速视频(延时摄影)并缩减时长?

实现GStreamer通过丢弃帧缩短视频时长(6倍速)

你的问题出在仅用videorate修改帧率但未调整帧的时间戳——播放器会根据帧的时间戳计算总时长,哪怕丢了帧,时间戳还是沿用原视频的,所以时长不会变。要同时实现丢弃帧、缩短时长和减小体积,需要结合时间戳调整和帧率过滤,以下是两种可行方案:

方案一:结合setpts滤镜调整时间戳+videorate丢弃冗余帧

这种方法先把视频时间轴压缩6倍(对应6倍速),再让videorate按目标帧率自动丢弃多余帧,刚好实现每6帧丢5帧的效果。假设原视频帧率为30fps,命令如下:

gst-launch-1.0 filesrc location=in.mp4 ! qtdemux name=demux demux.video_0 \
! queue ! h264parse ! avdec_h264 ! videoconvert \
! avfilter name=filter setpts='PTS/6' \
! videorate ! video/x-raw,framerate=30/1 \
! x264enc ! mp4mux ! filesink location=output.mp4
  • setpts='PTS/6':将每帧的时间戳除以6,直接把视频时长压缩为原有的1/6(60秒变10秒)。
  • videorate ! video/x-raw,framerate=30/1:让滤镜只保留每秒30帧,对应每6帧丢弃5帧(原6秒180帧,压缩后1秒只留30帧)。
  • 如果原视频帧率不是30fps,把framerate=30/1替换为原视频的帧率即可。

方案二:直接用videorate设置低帧率+调整时间戳

如果你明确要丢弃每6帧中的5帧,也可以直接将输出帧率设为原帧率的1/6,再配合时间戳调整确保时长正确。比如原视频30fps,输出设为5fps:

gst-launch-1.0 filesrc location=in.mp4 ! qtdemux name=demux demux.video_0 \
! queue ! h264parse ! avdec_h264 ! videoconvert \
! videorate ! video/x-raw,framerate=5/1 \
! avfilter name=filter setpts='PTS/6' \
! x264enc ! mp4mux ! filesink location=output.mp4

这种方式下,videorate会直接每6帧保留1帧,setpts确保时间轴同步压缩,最终时长为10秒,体积也会大幅减小。

验证效果

执行命令后,可以用ffprobe查看输出视频的时长和帧率:

ffprobe output.mp4

确认输出视频的时长为10秒左右,帧率符合设置值,就说明实现了预期效果。

内容的提问来源于stack exchange,提问作者Nathaniel Bubis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:05:56