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

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

我使用 ffmpeg 剪切视频文件。我使用的格式如下:

ffmpeg -i input.avi -ss 00:06:30 -to 00:07:15 -c copy output.avi

不幸的是,这会在输出视频的开头留下一些黑框,所以我丢失了视频的某些部分。在我尝试的一个视频中,这种情况持续了一秒钟,在另一个视频中,黑框持续了 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

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

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

ffmpeg -i input.avi -ss 00:06:30 -to 00:07:15 output.avi

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

答案1

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

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

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

  • 当您省略 时,ffmpeg 将使用所选输出格式(在您的例子中为 AVI 或 MP4)的默认编码器( 、 、...)-c copy重新编码视频。这些编码器可能具有默认质量或比特率设置,导致输出效果不佳。因此,在重新编码时,您应该知道要设置的目标质量。mpeg4libx264

如果使用流复制进行剪切对您不起作用,并且您必须重新编码视频,您也可以使用最新且高效的视频编解码器(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

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

欲了解更多信息,请阅读寻求指导在 FFmpeg Wiki 上。

答案2

-ss这是关于和的顺序-t,这是我得出的结论

# has black frames
ffmpeg -i input.MOV -ss 00:00:00 -to 00:00:30 -c copy output1.mp4

# works, no black frame
ffmpeg -ss 00:00:00 -to 00:00:30 -i input.MOV -c copy output2.mp4

可以找到原始答案这里

答案3

对于遇到同样问题的人,我最终设法用这个方法解决了它:

ffmpeg -i input.avi -qscale 0 -ss 00:10:45 -to 00:11:45 output.avi

相关内容