ffmpeg真的是超级强大,无论是添加字幕或者是添加水印图片都不在话下。那么如何同时添加水印图片和字幕呢?

ffmpeg添加水印

当你系统中已经安装了ffmpeg,则添加水印是非常简单的一行命令行:

ffmpeg -i birds.mp4 -i watermark.png -filter_complex "overlay=10:10" birds1.mp4

实际上,我们传入了一个birds.mp4视频文件和一个watermark.png水印图片,然后利用复杂滤镜合成并且保存输出文件为birds1.mp4

命令行"overlay=10:10"指的是指定水印具体的位置。在这个例子中指的是让输入的水印文件距离左边10个像素,距离顶部10个像素,也就是固定在了左上角的位置。

在一些例子中,你并不会知道确切的分辨率,所以这里有一些变量,你可以更好的添加水印到你想要的任何位置:

  • main_h – 传入的视频的高度
  • main_w – 传入的视频的宽度
  • overlay_h – 传入的覆盖水印的高度
  • overlay_w – 传入的覆盖水印的宽度

利用这些变量,我们可以灵活的添加水印:

ffmpeg -i birds.mp4 -i watermark.png \
-filter_complex "overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2" birds2.mp4

这条命令将会添加覆盖水印到视频的中间位置

你如果想添加水印到视频以外的位置,例如不想让水印覆盖在视频之上,而是新增加一个位置在视频以外,则你可以利用pad filter这个滤镜:

ffmpeg -i birds.mp4 -i watermark2.png \
-filter_complex "pad=height=ih+40:color=#71cbf4,overlay=(main_w-overlay_w)/2:main_h-overlay_h" \
birds3.mp4

这个添加的效果如下:
-----2018-06-29---11.02.21

如果你非常熟悉滤镜的操作,那么你甚至可以制作一个跑马灯水印效果:

ffmpeg -i birds.mp4 -i watermark.png \
-filter_complex "overlay='if(gte(t,1), -w+(t-1)*200, NAN)':(main_h-overlay_h)/2" birds4.mp4

这个添加的效果是在视频中间有一个从左往右的跑马灯水印。

ffmpeg 添加字幕

添加srt格式的字幕

ffmpeg添加字幕就相对简单了:

ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi

从现有mkv视频中抽离字幕并且烧录进新的视频中:

ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi

添加ass格式的字幕

ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi

或者你可以先将srt转换成ass格式

ffmpeg -i subtitle.srt subtitle.ass

添加idx/sub格式的字幕

ffmpeg -i 1.mp4 -i 1.sub -i 1.idx -filter_complex "[0:v][2:s]overlay=0:H-h" -c:v libx264 out.mp4

这个会将图片类型的sub/idx格式字幕烧录进视频文件中。

同时添加字幕和水印图片

ffmpeg -i ganguan.mkv -c:v libx264 -vf "movie=logo.png[wm];[i][wm]overlay=0:0,subtitles=ganguan.srt[out]" ganguan.mp4

水印在左上角。

注意事项

ffmpeg烧录字幕的时候会查找字体配置文件,例如在linux系统中就会查找/etc/fonts中的fonts.conf,有些linux系统没有中文字体支持,可以下载一个ttf中文字体上传至/usr/share/fonts里边。

引用

https://www.ffmpeg.org/ffmpeg-filters.html#pad
http://ksloan.net/watermarking-videos-from-the-command-line-using-ffmpeg-filters/
https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo