ffmpeg同时添加水印和字幕,详细教程
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
这个添加的效果如下:
如果你非常熟悉滤镜的操作,那么你甚至可以制作一个跑马灯水印效果:
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