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

Den*_*ens 3 android ffmpeg custom-font android-ffmpeg

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

Android资产文件夹在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()};
Run Code Online (Sandbox Code Playgroud)

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

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

先感谢您。

Vin*_*han 6

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

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

ffmpeg -i input.mp4 -filter_complex "drawtext=text=Vinesh Chauhan:fontcolor=#000000:fontsize=14:x=43:y=103:fontfile=FACEBOLF.OTF" -y output.mp4
Run Code Online (Sandbox Code Playgroud)

这里

text=您想在视频/图像上绘制为文本的内容

fontcolor = 字体颜色

fontsize = 文本的字体大小

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

fontfile= 传递给你字体样式文件(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()};
Run Code Online (Sandbox Code Playgroud)

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

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()};
Run Code Online (Sandbox Code Playgroud)