FFMPEG:如何为视频添加水印?

FFMPEG:如何为视频添加水印?

我的平台:Ubuntu 10.10 + FFMPEG 0.5.3(我从源代码安装了 ffmpeg)

我尝试使用 FFMPEG 0.5.3 为 .MOV 视频添加水印imlib2.so(请注意 FFMPEG 0.6+ 不支持imlib2.so,因此我使用 ffmpeg 0.5.3)

这是我的代码:

ffmpeg -sameq -i example.mov -vhook '/usr/local/lib/vhook/imlib2.so -x 0 -y 0 -i /var/www/files/watermark.png' newexample.mov

输出如下:

FFmpeg version 0.5.3, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-avfilter --enable-filter=movie --enable-avfilter-lavf
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  built on Jul  3 2011 12:05:08, gcc: 4.4.5

Seems stream 1 codec frame rate differs from container frame rate: 59.94 (5994/100) -> 29.97 (30000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'example.mov':
  Duration: 00:03:14.06, start: 0.000000, bitrate: 3350 kb/s
    Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, s16
    Stream #0.1(eng): Video: h264, yuv420p, 1150x647, 29.97 tbr, 29.97 tbn, 59.94 tbc
Output #0, mov, to 'newexample.mov':
    Stream #0.0(eng): Video: mpeg4, yuv420p, 1150x647, q=2-31, 200 kb/s, 90k tbn, 29.97 tbc
    Stream #0.1(eng): Audio: 0x0000, 48000 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Unsupported codec for output stream #0.1

可能存在什么问题?是不支持 AAC 还是 H264?

我安装了 libavcodec-extra-52、linfaac、libfaad 等,但错误是一样的。

我必须按照此说明进行安装吗?如何安装并使用最新的 FFmpeg 和 x264或者有更简单的解决方案?

答案1

使用最新的 ffmpeg 执行此操作的正确方法是使用覆盖滤镜。以下命令将放置watermark.png在水印的顶部input.mp4,水印的左上角位于主视频左上角右侧十五个像素处,下方十个像素处:

ffmpeg -i input.mp4 -i watermark.png -filter_complex \
'[0:v][1:v]overlay=15:10[outv]' -map [outv] -map [0:a] \
-c:a copy -c:v libx264 -crf 22 -preset veryfast output.mp4

显然,将 15 或 10 更改为您想要的任何值。

如果您要在具有不同分辨率的多个视频上添加水印,您可能还会发现一些有用的常量:

  • W 和 H 分别是主视频的宽度和高度(input.mp4
  • w 和 h 分别是叠加视频的宽度和高度(watermark.png

这些可以派上用场。例如,要将水印置于视频的中心,您可以使用:

'[0:v][1:v]overlay=(W-w)/2:(H-h)/2[outv]'

类似地,要将水印置于视频左上角六分之一处的中央:

'[0:v][1:v]overlay=(W-w)/6:(H-h)/6[outv]'

对于视频左下角的六分之一:

'[0:v][1:v]overlay=(W-w)/6:(H-h)/(6/5)[outv]'

你几乎可以做任何你需要做的事情。

查看覆盖过滤器文档以获取更多信息。

相关内容