我有一个 PNG (alpha) 文件和一个视频文件。我想创建一个视频,其中第一个轨道是图像,第二个轨道是视频(PNG 覆盖视频)。问题是 PNG 不保留透明度。
我需要在视频轨道上使用 ffmpeg 在单独的轨道中创建水印(PNG)。
ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov
答案1
添加水印的语法略有不同。您需要视频过滤器,这些过滤器已与 FFmpeg 捆绑在一起。
我不确定您是否可以将透明水印添加到单独的轨道。原因是图像本身(PNG“流”)需要转换为实际的视频轨道(例如使用 x264)——并且由于视频编码器目前不支持透明度,因此您不会获得透明图像。
以下内容将添加logo.png
到base.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 给视频添加水印. 它涉及定位细节。