FFmpeg 水印

FFmpeg 水印
ffmpeg –i test.mkv -vf "movie=watermark.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.mkv

我只是想给视频添加水印,以便开始使用 ffmpeg 进行测试。但是,虽然我没有看到任何错误,但它根本不起作用。

我也试过

ffmpeg -i test.mkv -i watermark.png -filter_complex 'overlay=10:main_h-overlay_h-10' output.mkv

但也没有成功。

输出:

ffmpeg version 1.1.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jan 20 2013 23:05:28 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, matroska,webm, from 'test.mkv':
  Metadata:
    creation_time   : 2012-11-01 02:35:10
  Duration: 00:00:59.74, start: 0.000000, bitrate: 5821 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
    Stream #0:1: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s (default)
Input #1, image2, from 'watermark.png':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #1:0: Video: png, rgba, 1600x200, 25 tbr, 25 tbn, 25 tbc
[Parsed_overlay_0 @ 00328000] Overlay area (10,510)<->(1610,710) not within the main area (0,0)<->(1280,720) or zero-sized
[auto-inserted scaler 0 @ 03da0f60] Failed to configure input pad on Parsed_overlay_0

答案1

您的水印似乎比主视频大。由于您已经使用了滤镜,因此最干净的解决方法是使用scale筛选.scale=25:20会将其缩放为 25x20 像素的正方形。如果您要使用scale=25:-1它,会将视频(本例中为水印)的宽度缩放为 25,并缩小高度以使纵横比保持不变(您也可以使用scale=-1:20)。

以下是一个使用示例:

ffmpeg -i test.mkv -i watermark.png -filter_complex \
"[1:v]scale=25:20[wat];[0:v][wat]overlay=10:main_h-overlay_h-10[outv]" \
-map "[outv]" -map 0:a output.mkv

对于复杂的滤镜图,我个人总是会标记输入和输出,以提高可读性。如果您没有任何音频,或者不想从 test.mkv 中获取任何音频,请剪掉-map 0:a

在滤镜图中,[1:v]指的是“输入 1 的视频”(本例中为 watermark.png,因为 ffmpeg 从 0 开始计数)。您也可以同样使用[1:0]表示“输入 1 的第零个流”,或者只是[1],因为在本例中仅有的输入中的一个流。请参阅流说明符文档了解更多信息。

缩放过滤器末尾[wat]的 仅允许过滤器图的其余部分引用缩放过滤器的输出 - 类似于在脚本中设置变量。[outv]过滤器图的最末尾具有类似的功能,但在这里我也在过滤器图之外使用它(全部类似地,在 filtergraph 中设置的标签也可以在 filtergraph 外部通过选项进行访问-map

为了获得质量不错的视频,你需要设置其他几个选项;请查看这个通用编码入门或查看更深入的指南FFmpeg 维基

相关内容