[FFMPEG]2.命令使用:图片水印叠加

1.研究可行性:

<1>针对实时流;
<2>可实现图片水印的控制显示;

2.参考

http://ffmpeg.org/ffmpeg-all.html#overlay-1

   ffmpeg提供了overlay滤镜来支持图层覆盖,且第一个输入为"main"视频,第二输入覆盖层。

3.参数:

eof_action
  设置当覆盖层读取完毕时,所采取的处理措施,可能值:
    repeat
      重复最后一帧(默认)
    endall
      停止
    pass
      透传"main"视频
eval
  设置x,y表达式的运用规则,默认值"frame",可能值如下:
    init
      只在执行命令时,求值一次;
    frame
      针对每一个帧,重新求值
shortest
  若设置为1,当最短输入终止时,强制输出终止,默认值0
format
  设置输出视频格式,默认值yuv420,可能值:
    yuv420
    yuv422
    yuv444
    rgb
    gbrp
rgb (不推荐使用)
  若设置为1,强制filter从RGB色彩空间接收数据,默认0.建议使用format选项替代该选项
repeatlast
  若设置为1,在流结束前,强制绘制覆盖帧的最后一帧到main视频。默认值1

x
y
  设置覆盖层相对"main"视频的坐标,默认值0.如果表达式无效,将会被设置为一个很大的值,此时覆盖层不会被显示到可见区域。可用于计算它们的值如下:
    main_w, W
    main_h, H
      main视频的宽度和高度
    overlay_w, w
    overlay_h, h
      覆盖输入的宽度和高度
    x
    y
      已经计算好的x和y值。
    hsub
    vsub
      输出格式的垂直和水平色度采样值。如yuv422p的hsub和vsub分别为2和1。
    n
      帧数量,从0开始
    pos
      输入帧文件的位置。若未知,值为NAN
    t
      时间戳,单位s。若未知,值为NAN

注意: n, pos, t只有每帧都进行计算时才有效,当eval设置为’init’它们的值为NAN

"movie='/root/mscore/extern/source/logo/test.png' [logo];[in][logo] overlay=10:10 [out]"

视频转GIF:

ffmpeg -ss 25 -t 10 -i udp://224.2.2.2:8882 -s 320x240 -f gif -r 1 b.gif

ffmpeg -ss 25 -t 10 -i udp://224.2.2.2:8882 -r 1 -s 320x240 -f image2 foo-%03d.jpeg
ffmpeg -f image2 -framerate 5 -i foo-%03d.jpeg c.gif

叠加GIF

ffmpeg -i udp://224.2.2.2:8882 -ignore_loop 0 -i /etc/mscore/mscore_cctv13.gif -filter_complex '[0:0]scale=iw:ih[a];[1:0]scale=iw/4:-1[wm];[a][wm]overlay=x=0:0:shortest=1' -f mpegts udp://224.2.2.2:2000
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用FFmpeg给视频加图片水印,需要先安装FFmpeg并设置环境变量。然后,可以使用Java调用FFmpeg命令行工具来实现添加图片水印的功能。以下是一个示例代码: ```java public class VideoUtils { /** * 给视频添加图片水印 * @param videoPath 视频文件路径 * @param imagePath 水印图片路径 * @param outputPath 输出文件路径 * @throws Exception */ public static void addImageWatermark(String videoPath, String imagePath, String outputPath) throws Exception { // 构造FFmpeg命令 List<String> command = new ArrayList<>(); command.add("ffmpeg"); command.add("-i"); command.add(videoPath); command.add("-i"); command.add(imagePath); command.add("-filter_complex"); command.add("[0:v][1:v]overlay=10:10"); command.add("-codec:a"); command.add("copy"); command.add(outputPath); // 执行FFmpeg命令 ProcessBuilder builder = new ProcessBuilder(command); Process process = builder.start(); process.waitFor(); } } ``` 在上面的代码中,我们使用FFmpeg的overlay过滤器来实现将水印图片叠加在视频上的功能。其中,`[0:v]`表示第一个输入文件的视频流,`[1:v]`表示第二个输入文件的视频流,`overlay=10:10`表示在视频的左上角叠加水印图片,并且水印图片的左上角坐标为(10, 10)。如果要调整水印图片的位置,可以修改`overlay`参数的值。 使用时,可以调用`VideoUtils.addImageWatermark()`方法来给视频添加水印,例如: ```java try { VideoUtils.addImageWatermark("input.mp4", "watermark.png", "output.mp4"); } catch (Exception e) { e.printStackTrace(); } ``` 其中,`input.mp4`是要添加水印的视频文件,`watermark.png`是水印图片文件,`output.mp4`是输出文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷咪哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值