使用ffmpeg在视频前面添加图像叠加


31

我有很多视频,我需要在其前面放置一幅图像约5秒钟,但是手动添加并每次渲染都将花费很长时间,所以我问是否可以通过ffmpeg来做到这一点,以及您是否可以,请帮帮我,因为我没有ffmpeg的经验。我已经找到了一些命令,但是没有一个起作用。以这个为例。

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4

1
您只是复制了该命令还是根据您的需要编写了该命令?我问这是因为该命令涉及淡入淡出之类的问题以及您的问题中未涉及的所有其他内容。您是否只需要叠加图像还是需要更多?
PTS

我从某个地方复制了它,我只需要将图像放在视频前面即可。
Azthy

Answers:


44

您可以使用以下语法进行简单的图像叠加:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 表示我们要将图片从左上角(0:0)定位到右侧25px和向下25px。

enable='between(t,0,20)' 表示我们希望图片显示在第二个0到20之间。

[0:v][1:v]表示我们希望将导入的第一个视频文件-i(在我们的情况下为input.mp4或ffmpeg看到它的视频输入文件号为0)在视频输入文件1下(在我们的情况下为image.png)。:v只是意味着我们想要视频0和视频1。[0:a]这意味着我们想要第一个导入的音轨。这也将来自input.mp4,但指向mp4文件中的音频轨道而不是视频轨道。

如果您想要某种图像质量/设置,而不是ffmpeg选择的设置,请添加要使用的图像和/或音频编码选项。默认的视频编码器为x264。查看H.264编码指南以了解可能的设置。

-acodec copy/ -c:a copy你有你的命令FE只会从源文件重新使用的音频。尽管您当然不能在视频中做到这一点(在这种情况下),但是由于我们正在创建新的视频源,因此必须对其进行转码。

如果要对音频进行转码,请删除该-c:a copy部分。您可能必须明确指定编码器,例如-c:a aac -strict experimental。有关更多信息,请参见AAC编码指南


上面命令的以下迭代在Android上对我有效,因为原始命令给出了错误,例如aac是一个实验功能:ffmpeg -i input.mp4 strict -2 -i image.png -filter_complex [0:v] [1: v] overlay = 25:25:enable ='between(t,0,20)'output.mp4
muneikh 2015年

反正有什么位置不知道高度在底部?还是不知道宽度最右边?
chovy

当然,只需使用ffprobe分析视频并从输出中提取视频的尺寸即可。也许ffmpeg中集成了一个选项,但我不知道。
PTS

3
您的命令将替换原始视频文件的片段,但是用户可能希望在视频之前和/或之后添加(从而增加视频长度)图像。请对此提供帮助
-Porton

1
@laurent取决于您的源文件和/或输出。pix_fmt代表像素格式。有许多不同的像素格式可用于不同的编解码器,请指定一种以确保最终不会出现无法满足您需求的格式。当涉及到h264时,yuv420p是最受支持的像素格式,例如,也有yuv422p和yuv444p。
PTS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.