gpt4 book ai didi

ffmpeg - 如何使用 ffmpeg 在视频中的任意位置显示大量字幕?

转载 作者:行者123 更新时间:2023-12-04 23:10:41 29 4
gpt4 key购买 nike

我正在尝试编写字幕并将其显示在视频中任意位置的多个位置。我有一长串时间和位置来显示视频中的文本,但我不知道如何将这些时间和位置编码到字幕文件中。网上的很多例子只展示了如何显示单个字幕,或者没有解释字幕文件的语法。
我找不到如何做到这一点的简单答案,所以我不得不把很多方法放在一起,我要回答我自己的问题。

最佳答案

这样做的主要选项是:

  • 使用 GUI/独立程序(@llogan 提到 aegisub )
  • ffmpeg 中的“drawtext”过滤器
  • 带有 SRT 文件的字幕过滤器
  • 带有 SSA 文件的字幕过滤器
  • 带有 ASS 文件的字幕过滤器

  • 我想在文本文件中编写自己的字幕(使其可编写脚本),而不是使用独立的 GUI。一些方法不允许任意定位(字幕总是在底部居中)。其他人不允许从文件中加载一长串字幕,即您必须将它们全部编码到 ffmpeg 命令字符串中,这很笨拙。
    这是 documentation在字幕过滤器上,但它实际上并没有解释随附文件的语法。事实上,我发现很难找到任何字幕文件选项的清晰文档。我选择了 ASS,因为它似乎可以工作,并且我在互联网上发现了足够多的模板,我能够通过反复试验找出最重要的功能。
    首先,创建一个名为 desc.ass 的文本文件。看起来像这样:
    [Script Info]
    PlayResY: 600
    WrapStyle: 1

    [V4+ Styles]
    Format: Name, Fontname, Fontsize, PrimaryColour, Alignment, MarginL, MarginV
    Style: N,Arial,60,&H00FFFF,1,425,550
    Style: NE,Arial,60,&H00FFFF,1,650,480
    Style: E,Arial,60,&H00FFFF,1,700,250
    Style: SE,Arial,60,&H00FFFF,1,600,50
    Style: S,Arial,60,&H00FFFF,1,400,0
    Style: SW,Arial,60,&H00FFFF,1,150,50
    Style: W,Arial,60,&H00FFFF,1,100,250
    Style: NW,Arial,60,&H00FFFF,1,150,500

    [Events]
    Format: Start, End, Style, Text
    Dialogue: 00:00:01.00, 00:00:05.00, E, Text to display with the E style
    Dialogue: 00:00:05.00, 00:00:05.50, N, Text to display with the N style
    实际文件在此之后还有更多“对话”行,但为了便于阅读,我截断了。
    我不太明白 Script Info节呢。 :( V4+ Styles部分允许您指定任意数量的“样式”,它们定义颜色、位置、字体和许多其他内容。每个实际的字幕都将使用其中一种样式。
    如果每个字幕将显示在少量位置,我认为为每个位置定义样式会更容易。因为我想在 8 个位置之一显示字幕,所以我定义了 8 种样式。但是您可以覆盖任何给定字幕的位置(见下文)。所以另一种选择是对所有内容使用单一样式,并根据需要定义每个字幕的位置。 PrimaryColour是一个十六进制颜色参数(尽管由于某种原因它似乎是倒退的,所以黄色给你青色,反之亦然)。 Alignment refers to the numerical keypad ,所以 1 表示左下,5 表示中间。 MarginLMarginV允许您将水平和垂直偏移应用到默认对齐方式。
    您只需在 Format 中添加元素即可在此处指定更多属性。行,然后在每个 Style 上指定它们线。 This page is the most comprehensive documentation I could find .
    互联网上的每个人都复制/粘贴相同的示例文本,并指定了许多格式(例如, here)。 This是另一个更简单的例子。如果有人可以发布有关这些属性的含义的清晰文档,那就太好了! [Events]部分定义了各个字幕。在这里,我只指定基础知识:开始时间、结束时间、样式名称和文本。
    您可以 override the position任何给定的 Dialogue元素通过添加字符串 {\pos(400,570)}Text 的开头那条线上的元素。 (显然将 400、570 替换为您想要的位置。)
    您可以预览将这些字幕应用到名为 video.mkv 的视频的结果。与 ffplay像这样: ffplay -i video.mkv -vf "subtitles=desc.ass"有些人称之为软字幕,因为视频本身没有被改变,字幕只是显示在它上面。
    如果您想将字幕永久刻录到视频中(有时称为硬字幕),您可以像这样重新编码: ffmpeg -i video.mkv -vf "subtitles=desc.ass" video_with_subtitles.mkv Ref for burning subtitles

    关于ffmpeg - 如何使用 ffmpeg 在视频中的任意位置显示大量字幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69327432/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com