使用 FFmpeg 在单独的轨道中创建水印

使用 FFmpeg 在单独的轨道中创建水印

我有一个 PNG (alpha) 文件和一个视频文件。我想创建一个视频,其中第一个轨道是图像,第二个轨道是视频(PNG 覆盖视频)。问题是 PNG 不保留透明度。

我需要在视频轨道上使用 ffmpeg 在单独的轨道中创建水印(PNG)。

ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov

答案1

添加水印的语法略有不同。您需要视频过滤器,这些过滤器已与 FFmpeg 捆绑在一起。

我不确定您是否可以将透明水印添加到单独的轨道。原因是图像本身(PNG“流”)需要转换为实际的视频轨道(例如使用 x264)——并且由于视频编码器目前不支持透明度,因此您不会获得透明图像。


以下内容将添加logo.pngbase.mov右上角。您可以使用以下参数来确定位置 - 在我的示例中,我只是将其放置在距离边框 10 个像素的位置:

  • main_w(主视频宽度)
  • main_h(主视频高度)
  • overlay_w(覆盖视频宽度)
  • overlay_h (叠加视频高度)

过滤命令如下:

movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]

将其转换为完整的 FFmpeg 命令:

ffmpeg -i base.mov -vf "movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libx264 -crf 20 out.mov

这些-c:v libx264 -crf 20参数决定了输出视频编解码器及其质量(其中 CRF 可能是 19 到 24,具体取决于您想要的质量;越低越好)。

这里有一篇关于这个主题的相当不错的博客文章:如何使用 FFmpeg 给视频添加水印. 它涉及定位细节。

相关内容