我用 GoPro 录制了一段 60fps 1080p 视频,在 mpv(和其他媒体播放器)上播放时非常不流畅。我该如何让 mpv 每隔一帧就丢帧,以获得更流畅的视频?
或者,有没有什么快速的方法将视频转换为 30fps?
答案1
回答问题的这部分:“或者,有没有快速的方法将视频转换为 30fps”。
经过这个答案在视频处理中应该可以“无损地”丢弃一些 B 帧和 P 帧,而无需缓慢地重新编码。最初在这里提出执行如下:
ffmpeg -discard noref -i input.mp4 -c copy -vsync 0 reduced.mp4
第二个链接声称它支持 h264。由于 h265 支持正在逐个功能地集成到 ffmpeg 中,我手头的 ffmpeg 4.2.4 暂时无法为 h265 实现此功能。
更新:实际上,mpv 可以直接传递此 lavc 选项。它甚至适用于 h265 文件:
mpv --vd-lavc-skipframe=[nonref|bidir|nonkey]
- “--vd-lavc-skipframe=nonref”似乎没有跳过大量的帧
- “--vd-lavc-skipframe=bidir”跳过所有 B 帧,每秒仅留下几帧
- “--vd-lavc-skipframe=nonref”仅保留 I 帧,将视频变成幻灯片
摘要:它无法达到 30 FPS,但它允许在较旧的硬件上观看低动作 h265@60 视频。
答案2
尝试mpv --framedrop=vo <video>
。这应该能满足您的要求。如果您查看 mpv 手册并搜索framedrop
,您还会看到还有一些其他选项(“不推荐”)。我可以想象这--framedrop=decoder
可能会有所帮助,例如,如果您的 PC 解码视频的速度太慢。