文件剪切时视频文件开头出现黑框

use*_*421 5 audio video ffmpeg cut

我使用 ffmpeg 来剪切视频文件。我使用的格式是这样的:

ffmpeg -i input.avi -ss 00:06:30 -to 00:07:15 -c copy output.avi
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会在我的输出视频的开头留下一些黑框,所以我丢失了视频的某些部分。在我尝试的一个视频中,这持续了一秒钟,在另一个视频中,黑框持续了 4 秒。

有趣的是,当我使用相同的命令时,同一视频存在完全相同数量的黑框。意思是,无论我为第二个视频做了多少次,在所有输出中,输出视频在前 4 秒都是空白的!

不过声音效果很好!

以下是我尝试过但不起作用的其他一些命令格式:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4
Run Code Online (Sandbox Code Playgroud)

我用我使用的命令找到了我的解决方案,但后来出现了这个问题

编辑:我发现如果我不使用-c copy 标志,那么我就没有黑框:

ffmpeg -i input.avi -ss 00:06:30 -to 00:07:15 output.avi
Run Code Online (Sandbox Code Playgroud)

但是,使用这种方法,我的输出视频的质量明显低于输入视频,或以前方法的输出视频。所以我回到了第一广场。

slh*_*hck 6

例如,通过下载静态构建,确保您使用的是最新版本的 ffmpeg 。前一段时间发生了一些重大变化,影响了流切割的工作方式。

以下是您运行的命令之间的重要区别:

  • 指定 时-c copy,ffmpeg 将在不修改实际比特流的情况下剪切视频。换句话说,它将按原样获取帧并将它们复制到输出文件中。在某些情况下(简单地说,当开始时间不对应于I-frame 时),ffmpeg 需要包含更多的帧,这些帧需要正确解码要显示的第一帧。那些将获得负时间戳,因此不应显示它们。

  • 当您省略 时-c copy,ffmpeg 将使用任何编码器(mpeg4, libx264, ...)为所选输出格式(在您的情况下为 AVI 或 MP4)的默认编码器重新编码视频。这些编码器可能具有默认质量或比特率设置,使输出看起来很糟糕。因此,在重新编码时,您应该知道要设置的目标质量。

如果使用流复制剪切对您不起作用,并且您必须重新编码视频,您不妨使用最新且高效的视频编解码器(H.264)和容器(MP4),并复制音频流:

ffmpeg -ss 00:10:45 -i input.avi -c:v libx264 -crf 18 -to 00:11:45 -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

在这里,CRF 选项控制输出质量。18 到 28 之间的值是“正常的”,值越低越好。该-ss选项可以是一个输入选项(即出现在 之前的选项-i),它使一切变得更快。

有关更多信息,请阅读FFmpeg Wiki 上的搜索指南

  • @Grimeire 不容易做到。您必须完全匹配以前的编码设置并在帧内找到拼接点,然后将比特流粘贴在一起。我建议不要这样做,只是以缓慢的速度对其进行编码。 (2认同)