如何在 FFmpeg 创建的水印上应用自定义字体

How can I apply custom font on watermark that created by FFmpeg

我正在使用 FFmpeg 库制作视频。我想从 Android 资产文件夹访问字体并作为水印覆盖在我的视频上。

Android assets 文件夹在 FFmpeg 上访问和应用自定义字体的路径是什么? 我可以在视频上叠加水印,但是当我尝试在其上应用自定义字体时,它会给出与不存在等相关的错误。

到目前为止我发现了什么:

我找到的替代解决方案是创建一个图像文件并在其上写入文本,然后在视频上叠加图像。问题是文本和图像被拉伸输出。我需要一个解决方案。

String[] execute = {"-y",  "-i",  videoPath, "-i", image, "-filter_complex",
             "[1:v]scale=" + width + ":" + height + "[ovrl],[0:v][ovrl]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2"
             ,"-strict" , "experimental", "-vcodec", "libx264" , "-preset",  "ultrafast" , "-crf",  "20", "-acodec",  "aac",  "-ar",
             "44100",  "-ac",  "2",  "-b:v",  "36000k",   outputPath.getPath()};

我认为 itz 输出会很好,但它拉伸了我的文本和图像。

我想要一些完美的解决方案来在 FFmpeg 上应用资产字体。

提前致谢。

Assets Directry 不能通过 FFMPEG 直接访问,你必须将其复制到内部存储中,然后你可以将 t 传递给 ffmpeg,否则 ffmpeg 槽错误 ffmpeg 是用于 vdeo 编辑的本机库,因此它可以获取资产数据

您可以使用 drawtext 属性在图像/视频上绘制文本。 Drawtext 有它自己的 fontstyle 参数这里是一个简单的示例代码如何使用自定义 fontstyel 和颜色

在 video/image 上绘制文本
ffmpeg -i input.mp4 -filter_complex "drawtext=text=Vinesh Chauhan:fontcolor=#000000:fontsize=14:x=43:y=103:fontfile=FACEBOLF.OTF" -y output.mp4

这里

text=您想在 video/image

上绘制的文字

fontcolor = 字体颜色

fontsize = 文本的字体大小

xy 用于在指定坐标上绘制文本

fontfile=传给你fontsyle文件(TTF)文件路径

如果您希望在视频中添加图像作为水印,请不要缩放 tahat 图像,否则会改变图像的纵横比

使用下面的代码不改变图像的宽度高度

String[] execute = {"-y",  "-i",  videoPath, "-i", image, "-filter_complex",
             "[1:v]scale=iw:-2[ovrl],[0:v][ovrl]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2"
             ,"-strict" , "experimental", "-vcodec", "libx264" , "-preset",  "ultrafast" , "-crf",  "20", "-acodec",  "aac",  "-ar",
             "44100",  "-ac",  "2",  "-b:v",  "36000k",   outputPath.getPath()};

或者您的应用具有自定义高度宽度功能,因此请使用以下代码来保持您的纵横比

String[] execute = {"-y",  "-i",  videoPath, "-i", image, "-filter_complex",
             "[1:v]scale=" + width + ":-2[ovrl],[0:v][ovrl]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2"
             ,"-strict" , "experimental", "-vcodec", "libx264" , "-preset",  "ultrafast" , "-crf",  "20", "-acodec",  "aac",  "-ar",
             "44100",  "-ac",  "2",  "-b:v",  "36000k",   outputPath.getPath()};