【问题标题】:Fffmpeg drawtext filter creating large output file size and taking high cpu?Ffmpeg drawtext过滤器创建大输出文件并占用高cpu?
【发布时间】:2019-07-09 12:20:09
【问题描述】:

我有一个视频输入文件,我在其上绘制用户提供的文本。我可以使用 ffmpeg 的 drawtext 过滤器在视频文件上绘制文本并且它可以工作文件,但主要问题出现在 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的新手。

谢谢!

【问题讨论】:

    标签: video ffmpeg filtering


    【解决方案1】:

    您正在比较不同的格式、不同的编码器实现以及处理生成损失。

    输出视频文件大小大于输入文件大小。
    输出视频文件的视频质量比输入视频文件差。

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

    您还对有损输入中存在的压缩伪影进行了重新编码,这可能会进一步损害可压缩性。这称为generation loss

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

    cpu 非常高。

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

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2017-12-13
      • 1970-01-01
      相关资源
      最近更新 更多