39

ffmpeg 踩坑实录(二)

 5 years ago
source link: http://www.cnblogs.com/iceworld520/p/9783579.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、背景介绍

最近领导要求做一个视频录制的相关项目。其中,需要对视频文件进行添加 实时时间水印。于是,我想到了使用之前的ffmpeg来做。

二、ffmpeg实际操作

首先把需要添加水印的视频文件,上传到服务器指定位置 比如 “/usr/local/1.mp4”,这样的地方。其次,我们需要了解如何去给视频添加水印。

这里提供两种方式,一种是静态的,一种是动态的。(相关安装请参考 《ffmpeg 踩坑实录(一)》)

静态水印:

ffmpeg -i /usr/local/test/448da411-05cb-4ff2-a108-1721014e8e52.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='1q1q1'"  1.mp4

动态水印:

 ffmpeg -i /usr/local/test/448da411-05cb-4ff2-a108-1721014e8e52.mp4 -vf drawtext="expansion=strftime:basetime=$(date +%s -d '2018-10-13 14:10:50'):fontfile=arial.ttf:x=w-tw:fontcolor=red:fontsize=30:text='%Y-%m-%d  %H\\:%M\\: %S"  1.mp4

以上两种,均在我本机实现过。前一种就是在视频文件全程右上角 贴上了1q1q1q字样的水印。

后一种就是在视频文件的右上角贴上了以“2018-10-13 14:10:50”为起始时间的动态时间水印。

eQBJBzv.png!web

三、命令相关内容详解

静态水印中  -i 表示的是 输入文件

-vf 表示的是  视频滤镜,使用了drawtext滤镜,basetime是视频时间戳的初始值,text是显示时间的格式,fontsize后面一串是关于水印的颜色、字体、背景等设置

动态水印中 采取了 “expansion=strftime”的形式通过表达时,指定水印数值。

更多的内容,可以参考官方的文档,其中给出了不少实际的案例。

四、存在的问题和待改进的地方

1.静态水印不满足要求,验证完成之后便没有对其进行深入尝试;

2.动态水印,有两个问题,第一个 是录制完成之后才对其进行水印的添加,这样打在视频文件上的水印会跟实际录制的时间有一定的误差,如果不在意的仍可以使用该方法实现

第二个 目前文中所列出来的命令,是指定了起始时间的。这样来说,其实是不对的,因为服务器的时间在流逝。但可以采用java拼接命令行,在这个时候把当时的服务器时间插入进去。这样完成了以当时服务器时间作为起始时间的 动态时间水印。

3.效率问题,这次添加水印的视频文件 是大约3分钟时长的MP4文件,两种处理加水印的方式 时间均在十秒左右,比较耗费时间。后期如果采用该方法,需要提升相关效率。

五、参考文献

【1】《 ffmpeg为视频添加时间戳 - 手动编译ffmpeg

【2】 《 官方


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK