应用场景
在做短视频应用开发的过程中,我们希望在app端本地上传的视频在下载的时候能够添加上水印。实现的手段有两种:1.在app端添加。2.在服务端添加。我尝试在服务端实现这个添加水印的方式。
什么是ffmpeg
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的”FF”代表”Fast Forward”。
多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
在c#中调用ffmpeg添加水印
写一个ffmpeg调用处理类ffmpeg.cs
相关代码如下
其实整个调用的代码很简单,并没有什么难度,只要找到正确的方法就可以实现了。所有核心的操作都被包含在ffmpeg.exe了
实际的调用代码(这里只是写上简单的代码,实际应用场景可能要复杂点)
|
|
从上面代码可以看到一个复杂的param字符串 这个就是ffmpeg的执行命令行
转换格式的命令参数:-i orignal.flv -y -b 1024k -acodec copy -f mp4 newFile.mp4
添加水印的命令参数:-i orignal.flv -i water.png -filter_complex \”overlay=10:10\” newFile.flv
命令行参数实现细节
|
|
以上命令行是执行ffmpeg的命令行方式
注意事项
在以上代码中如果按照我的调用方式是可以实现添加水印的,但是有没有注意到在ffmpeg.cs这个类中我注释掉了proc.WaitForExit();和proc.Close();
因为放开注释执行代码 ffmpeg执行生成一个1kb的视频文件 而且一直执行着窗体程序不结束。但是注释掉这个代码就可以执行添加水印成功。(具体原因未知)
建议ffmpeg.exe文件去官网下载否则有可能代码一直执行不成功,