在我的项目中,我使用ffmpeg来播放媒体。目前我正在尝试实现播放速度的改变。高速丢弃某些数据包是否正确,例如而不是关键帧?或者我应该只依赖于更改时间戳和持续时间,即使性能很低(例如4k视频(,因此速度的提高也不值得注意?
如果您的文件包含标准PTS参考信息,我认为更改回放速度的最佳方法是使用setpts
过滤器。
例如,要将视频加速x2,请尝试:
ffplay [INPUT] -vf setpts=0.5*PTS
该滤波器也适用于FFmpeg
。
ffplay [INPUT] -vf setpts=0.5*PTS
将丢弃帧以达到所需的速度。通过指定比输入更高的输出帧速率,可以避免丢弃帧。
为了保留所有帧,并将帧速率和速度提高4倍,执行:
ffmpeg -i input.mkv -r NEW_FPS -filter:v "setpts=0.25*PTS" output.mkv
其中NEW_FPS = old_fps * 4
检查帧速率:
ffprobe video_name
检查帧数:
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 video_name