Fffmpeg 绘图文本过滤器创建大输出文件大小并占用高 CPU?



我有一个视频输入文件,我正在上面绘制用户伪造的文本。我能够使用 ffmpeg 的绘制文本过滤器在视频文件上绘制文本,它可以工作文件,但主要问题是 ffmpeg 命令出现。

那是当我运行我的 ffmpeg 命令时,会发生三件事:- 1.输出视频文件大小大于输入文件大小。 2.输出视频文件比输入视频文件失去视频质量。 3. CPU 非常高。

我正在使用的 ffmpeg 命令是-

ffmpeg -i input1.asf -vf drawtext="fontfile=/path/to/font.ttf: text='Stack Overflow': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=10: y=10" -codec:a copy IndVsNZ.asf

为了避免视频质量下降,我使用了这个参数"-C:V libx264 -crf 20"。

我想要实现的是我可以在我的视频文件上绘制文本而不会降低质量,输出文件大小与输入文件相同,CPU 低(因为它挂起了我的系统)。

我已经在互联网上尝试了各种解决方案,但找不到问题。如果与此相关的任何链接,请分享。我是FFMPEG的新手。

谢谢!

您正在比较不同的格式、不同的编码器实现,并处理生成损耗。

输出视频文件大小大于输入文件大小。
输出视频文件比输入视频文件失去视频质量。

您的输入视频流可能是现代、高效的格式,例如 H.264。但是,使用ffmpeg输出.asf的默认编码器是 msmpeg4v3,它输出视频格式 MPEG-4 第 2 部分Microsoft变体版本 3。这是一个旧的,相对低效的编码器,具有蹩脚的默认设置。由于效率较低,因此需要更多位才能获得相同的质量。这就是为什么添加-c:v libx264 -crf 20可以提高每比特质量的原因,因为这可以实现更好的编码器和更现代的格式 (H.264)。

您还将重新编码有损输入中存在的压缩项目,这些项目可能会进一步损坏可压缩性。这称为发电损耗。

如果您想要H.264视频,那么您可以做的是调整CRF值。赋予它提供可接受的质量的最高价值。尝试 18-26 左右的范围。使用您耐心等待的最慢-preset。请参阅 FFmpeg Wiki: H.264 了解更多信息。

CPU 非常高。

这是意料之中的。视频编码的计算成本很高。您可以使用-threads选项减少编码线程数和/或使用单独的工具来限制 CPU 使用率,例如 Linux 上的nice。但这会使编码需要更长的时间。

最新更新