在不损失质量的情况下准确剪辑视频到指定时间

3
我正在使用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

请查看此答案。 https://dev59.com/9mMl5IYBdhLWcg3wZGLo - bdutta74
1个回答

3

这是不可能的。你必须重新编码视频或者包含其他参考帧所需的关键帧。

如果你不想失去质量,可以输出到无损文件(例如 YUV、HuffYUV、FFV1 等),或者继续进行视觉上的无损处理(例如 ProRes、DNxHD、高质量的 H.264 / H.265 等)。


感谢slhck,我想你是对的,至少需要重新编码成无损YUV文件。我希望在给定时间准确地剪切YUV文件不会成为问题。虽然编码和解码需要太多时间,但这并不是一个坏主意,因为没有其他选择。 - mdasari
1
仅仅使用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
2
即使在理论上也是不可能的。当你“将帧设为关键帧”时,你必须重新编码它。唯一不会损失质量的方法是使用无损编解码器。-crf 0 应该可以工作,并且在任何方面都不应该看起来更糟。如果你在这方面有问题,请在 [SU] 上发布一个新问题。请注意,有一种方法可以在输出中包含所需的帧而不显示它们,但并非所有播放器都支持此功能。 - slhck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接