ffmpeg drawtext 添加文本水印

该博客演示了如何利用FFmpeg的drawtext过滤器在YUV420P10LE格式的视频帧上添加多个文本,包括设置字体颜色、阴影、位置和大小,并提供了具体的命令行示例。
  • API 参考:http://ffmpeg.org/ffmpeg-all.html#drawtext-1 参考 drawtext 的功能实现设置相关的值就可以

  • demo1 :实现添加
    ffmpeg -pix_fmt yuv420p10le -s 3840x4320 -i 0_all_3840x4320_yuv420p10le.yuv -vf “drawtext=text=V1:fontcolor=White:shadowcolor=Blue:shadowx=4:shadowy=4:expansion=normal:x=3840/4:y=2160/4:fontsize=200:fontfile=/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf,drawtext=text=V2:fontcolor=White:shadowcolor=Blue:shadowx=4:shadowy=4:expansion=normal:x=3840/43:y=2160/4:fontsize=200:fontfile=/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf,drawtext=text=V1:fontcolor=White:shadowcolor=Blue:shadowx=4:shadowy=4:expansion=normal:x=3840/4:y=2160/43:fontsize=200:fontfile=/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf,drawtext=text=V2:fontcolor=White:shadowcolor=Blue:shadowx=4:shadowy=4:expansion=normal:x=3840/43:y=2160/43:fontsize=200:fontfile=/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf”

### 使用 Java 和 FFmpeg 给视频添加文字水印 为了在Java中利用FFmpeg为视频添加文字水印,可以通过执行FFmpeg命令行指令的方式完成此操作。由于FFmpeg本身并不提供直接的Java API接口,因此一般通过调用系统的命令行来间接使用其功能。 #### 构建带有drawtext过滤器的文字水印命令 FFmpeg中的`drawtext`过滤器允许向视频帧上绘制动态或静态文本[^3]。构建用于添加文字水印的具体FFmpeg命令如下: ```bash ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Sample Text':x=(w-text_w)/2:y=h-line_h-(text_h/2):fontsize=70:fontcolor=white@0.8" -codec:a copy output.mp4 ``` 上述命令解释: - `-i input.mp4`: 输入文件名为input.mp4。 - `-vf "..."`: 应用了video filter即视频滤镜,在这里是`drawtext`用来创建文字水印效果。 - `drawtext=...`: 设置了具体的绘图属性,包括字体位置、大小、颜色透明度等。 - `-codec:a copy`: 表明音频流不做任何改变直接复制到新文件中。 - `output.mp4`: 输出文件名设定为output.mp4。 #### 编写Java代码调用FFmpeg命令 下面是一段简单的Java代码片段,展示了如何通过Runtime类执行上述FFmpeg命令以实现给定视频添加文字水印的效果。 ```java public class AddTextWatermark { public static void addTextWatermark(String inputFile, String outputFile, String text) throws Exception { ProcessBuilder pb = new ProcessBuilder( "ffmpeg", "-y", "-i", inputFile, "-vf", "drawtext=fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:" + "text='" + text + "':" + "x=(w-tw)/2:y=h-th-10:fontsize=50:fontcolor=yellow@0.9", "-c:v", "libx264", "-crf", "23", "-preset", "veryfast", "-c:a", "copy", outputFile); try { Process process = pb.start(); int exitCode = process.waitFor(); System.out.println("Process exited with code " + exitCode); // 可选:读取标准输出和错误流进行日志记录或其他处理 } catch (Exception e) { throw new RuntimeException(e.getMessage(), e.getCause()); } } public static void main(String[] args){ try{ addTextWatermark("/path/to/input.mp4","/path/to/output.mp4","Hello World"); }catch(Exception ex){ ex.printStackTrace(); } } } ``` 这段代码定义了一个名为`AddTextWatermark`的公共类,并在其内部实现了两个方法——一个是负责实际逻辑的`addTextWatermark()`函数;另一个则是测试用途的入口点`main()`函数。前者接收三个字符串类型的参数作为输入(源视频路径、目标保存路径以及要显示的文字),并通过构造一个包含所需FFmpeg选项的过程对象(`Process`)来进行外部进程控制。后者则简单地调用了该方法并传入相应的参数值以便于快速验证整个流程是否正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值