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
。