在特定时间准确剪切视频而不会降低质量

Posted

技术标签:

【中文标题】在特定时间准确剪切视频而不会降低质量【英文标题】:Cutting a video accurately at a specific time without losing quality 【发布时间】:2017-11-10 21:07:40 【问题描述】:

我正在使用 ffmpeg 在给定时间准确地将视频剪切到另一个时间。我知道,我们可以简单地重新编码它,但会失去质量。此外,由于关键帧问题(即视频不会被准确剪切),我不想使用复制选项。这些是我使用的命令。

ffmpeg -ss 55 -i input.mp4 -t 00:03:06 -vcodec copy -acodec copy out.mp4 
ffmpeg -ss 55 -i input.mp4 -t 00:03:06 out.avi

【问题讨论】:

请改为查看此答案。 ***.com/questions/18444194/… 【参考方案1】:

这是不可能的。您要么必须重新编码视频,要么包含引用它们的其他帧所需的关键帧。

如果您不想损失质量,您可以输出到无损文件(例如,YUV、HuffYUV、FFV1,...)或继续无损地进行视觉工作(例如,ProRes、DNxHD、高质量 H.264 / H .265, ...)。

【讨论】:

谢谢 slhck,我猜你是对的,至少对无损文件 YUV 需要重新编码。我希望在给定时间准确剪切 YUV 文件不会成为问题。虽然,编码和解码需要花费太多时间,但也不错,因为别无选择。 ffmpeg 是不可能的还是理论上也是不可能的?我会认为,通过使每一帧都成为关键帧,您不应该失去质量,并且仍然可以准确地剪切到您想要的位置。你能告诉我这是否属实,至少在理论上是这样吗?唉,当我尝试使用“ffmpeg -i video.MP4 -to 00:00:20.000 -g 1 cutVideo.MP4”时,质量似乎更差,至少在 VLC 中是这样。我也试过“ffmpeg -i video.MP4 -ss 00:00:15.440 -to 00:00:30.440 -crf 0 losslessVideo.MP4”,但看起来更糟。 @user1323995 即使在理论上也是不可能的。当您“使帧成为关键帧”时,您必须对其进行重新编码。在不损失质量的情况下做到这一点的唯一方法是使用无损编解码器。 -crf 0 应该可以工作,而且它不应该以任何方式看起来更糟。如果您有问题,请在Super User 上发布新问题。请注意,有一种方法可以在输出中包含所需的帧而不显示它们,但并非所有玩家都支持这一点。

以上是关于在特定时间准确剪切视频而不会降低质量的主要内容,如果未能解决你的问题,请参考以下文章

Camera 2 API 会降低拍摄后的质量

sh 将大型视频文件转换为优化的480p视频,而不会失去大量的质量

Bitmap图片压缩

使用 CIImage 进行实时过滤时降低视频质量以获得更高的 FPS

改变质量 webRTC

c#:以 100% 质量保存 JPEG 时降低图像质量