ffmpeg 分割的小片段视频无法播放或播放时出现瑕疵

ffmpeg 分割的小片段视频无法播放或播放时出现瑕疵

我正在尝试将视频文件剪切成小部分(0.5-5 秒),并使用 ffmpeg 将这些部分编码为 h.264/aac。我使用以下命令:

ffmpeg -i 1.avi -ss 00:05:00 -t 00:00:01,50 -vcodec libx264 -threads 0 -vpre default -acodec libfaac out1.mp4

在 VLC 中,播放某些片段时没有视频,只有声音,其他片段则有如下视频伪影:

在此处输入图片描述

也许我错过了 ffmpeg 的一些必要参数?

答案1

我尝试使用 FFmpeg 版本 0.8.5,使用与您一样的 AVI 输入文件。

以下命令产生了正确的结果:

ffmpeg -i 1.avi -ss 00:00:05 -t 00:00:01.50 -vcodec libx264 -vpre default -acodec libfaac out1.mp4

以下是让它发挥作用的一些技巧:

更新到FFmpeg的最新版本。

对于 Ubuntu,请按照教程在这里。我自己也一直在用它们。

在 OS X 上,安装 FFmpeg使用 Homebrew,通过调用brew install ffmpeg

在 Windows 上,只需下载预编译版本

使用正确的长度格式。

请注意,持续时间格式使用小数点,而不是逗号,例如hh:mm:ss[.xxx]

删除该-threads 0选项。

但是启用它却-threads 0给我带来了错误“最终缓冲区太小”。我甚至不知道他们为什么在这里允许值为零,除非你有特殊原因,否则我只会忽略这个参数。理想情况下,它应该auto-threads在中启用libx264,但可能存在我不知道的错误。

不使用 B 帧进行编码。

根据输出视频的大小,我不知道是否libx264能够使用引用一个或多个帧内编码图片的 B 图片可靠地生成输出。这甚至可能会导致您描述的瑕疵。

您可以尝试使用 禁用 B 画面(或“B 帧”)-bf 0

相关内容