gpt4 book ai didi

ffmpeg - 为小视频渲染像素完美字幕

转载 作者:行者123 更新时间:2023-12-04 22:45:34 25 4
gpt4 key购买 nike

我想在小尺寸视频上刻录字体尽可能小(但可读)的字幕,如第一张图片所示。 FFmpeg 使尝试过的任何字体大小的字体都变得模糊(第二张图片)。

ffmpeg -i in.jpg -vf "scale=160x128,subtitles=in.srt:force_style='OutlineColour=&H80000000,BorderStyle=3,Fontsize=15,Fontname=Silkscreen'" out.png

有什么方法可以使用 FFmpeg 或其他现成的命令行工具实现像素完美的小字体字幕? (我发现的最小字体是 Silkscreen ,尽管它只是 ASCII!)

enter image description here enter image description here

最佳答案

在 libass 中启用字体提示可以获得更好的结果,但它 appears FFmpeg 目前不支持设置这个选项。用 mpv 试试这个:

mpv in.jpg --vf=scale=160:128 --sub-file=in.srt --sub-ass-hinting=light --sub-font=Silkscreen --sub-font-size=54 --sub-back-color=0/0/0/0.5 --sub-color=1/1/1 --o=out.png

(还有 --sub-ass-force-style=FontName=Silkscreen,etc. 如果您需要它或者只是更喜欢直接使用 ASS 语法。)

使用 --sub-ass-hinting=normal--sub-ass-hinting=native 可能运气更好,但值 light 为您的问题中的图像提供了最佳结果。

这是我得到的:

Output from mpv using the image from the question. Output from mpv using the image from the question and keeping the original source image’s aspect ratio.

(我在网上找到的源图是3:2的宽高比,但是你的例子是4:3,左边我只好用--vf=scale=160:120,dsize =160:120 以匹配您的尺寸和纵横比。在右侧,我使用 --vf=scale=180:120 来匹配您的图像高度,但保持原始纵横比。 )

为了获得更好的结果,您可能需要调整字体大小,因为据我所知,所讨论的字体已针对特定大小进行了优化。 ASS“字体大小”不是以磅为单位的传统字体大小(而是以像素为单位的上升高度和下降高度的总和),因此这并非完全微不足道,但一些实验可能会让你到达那里。

与您的旧方法相比,这还为您提供了一个更清晰的字幕周围/后面的框。当使用 BorderStyle=3 和像您现在这样的半透明 OutlineColour 时,每行文本都有一个单独的框,并且这些框会稍微重叠;因此,您可以在每两行文本之间看到一个颜色较深/颜色较深的薄区域。这在您的尺码下可能不是很明显,但如果您仔细观察就会发现。作为 ASS 格式的扩展,libass 支持自定义 BorderStyle=4,它会在整个文本周围生成一个框。在mpv中设置--sub-back-color时,会自动选择这个。 (如果多段文字同时出现,每段仍然会有自己的框,框可能会重叠。但根据我非常简短的搜索,这种情况似乎在 SRT 文件中很少见。)是否要恢复到 BorderStyle=3,我想你需要添加 --sub-ass-force-style=BorderStyle=3 并替换 --sub-back-color--sub-border-color

关于ffmpeg - 为小视频渲染像素完美字幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904104/

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