网上大部分关于ffmpeg加视频水印的方法还是使用vhook,在现在的ffmpeg中已经不推荐使用,但是也能编译,也能使用,至于效果,一会再说。现在的ffmpeg推荐使用的是libavfilter,但是libavfilter的开发度较低,一直没有得到广泛应用。

先从官方网站下载了最新的FFmpeg 0.5.1版,./configure --help查看编译参数,很开心还有一项“--disable-vhook”存在,说明默认是有vhook的,怎想按如此方式编译完成之后测试结果令人失望。

在0.5.1版的ffmpeg下使用vhook方式为视频添加水印,按照网上常见的命令及参数,即 ffmpeg -i input.flv -vhook '/usr/lib/vhook/watermark.so -f watermark.png -t 222222 -m 1' output.flv ,执行完成之后画面效果相当差,似乎是锐化非常过度的那种感觉。以为是没加 -b 参数设置视频比特率的原因,结果设一个较高的比特率之后仍然没有改善,如此相比使用旧版本的vhook添加的水印实在差的不是一定半点了,结论是,在最新版ffmpeg中官方已经不推荐的vhook确实是没法使用了。

网上有种往libavfilter里加vf_logo.c的方法,试了一下,没搞出来,可能libavfilter的版本不同了吧。google后发现最新版的libavfilter里有一个vf_overlay.c用来添加水印,还支持透明水印,下面就开始svn版的ffmpeg + libavfilter之旅。

使用svn checkout出libavfilter,地址是svn://svn.ffmpeg.org/soc/libavfilter,进入libavfilter目录,执行./checkout.sh,svn版的ffmpeg将被checkout下来,并且该脚本执行的最后会将libavfilter下的svn源码复制到ffmpeg下相应目录,并且对checkout出的ffmpeg打上相应补丁Patch。

本人使用如下参数进行configure,而后便是 make && make install,想必无需赘述了。
    ./configure --prefix=/usr --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --enable-libvorbis --enable-libx264 --enable-libxvid --disable-ffplay --enable-shared --enable-libmp3lame --enable-gpl --enable-libfaad --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libx264 --enable-libtheora --enable-swscale --enable-libdc1394 --enable-nonfree --enable-avfilter --enable-libdirac --enable-libschroedinger --disable-mmx --enable-avfilter-lavf

要启用libavfilter,--enable-avfilter和--enable-avfilter-lavf这两项最为重要。./configure --help查看已经不见vhook相关参数的踪影了。而编译过程中报告找不到的各种库,要么通过apt源直接apt-get install安装,要么去sourceforge.net下载来默认编译安装,装全了就好。

本人使用的完整命令行如下,ffmpeg -y -i input.flv -acodec copy -b 300k -vfilters "movie=0:png:watermark.png [wm];[in][wm] overlay=5:5:1 [out]" output.flv
    -y 表示有同名的output.flv存在时不提示,直接覆盖
    -i input.flv 表示要进行水印添加处理的视频
    -acodec copy 表示保持音频不变
    -b 300k 表示处理视频的比特率,用-vcodec copy时报错,使用其他工具获取到原始视频比特率后加到这里,保持比特率基本不变,不然默认为200k,视频有损。
    output.flv 处理后的视频
    -vfilters "..." 中间便是水印处理参数,重要的是overlay=后面的部分,第一个参数表示水印距离视频左边的距离,第二个参数表示水印距离视频上边的距离,第三个参数为1,表示支持透明水印。使用透明的png图片进行视频编码后,成功获得带透明水印的视频,并且画质也比较好。

有一篇-vfilters参数使用的文章可供参考,其中还例举了如何同时加入2个水印到画面不同位置,http://www.techenigma.com/2010/05/ffmpeg-watermark-video-without-vhook-solution/。

待解问题:H264/x264编码的flv经过上述ffmpeg加水印处理后变成了H263编码,即普通的flv编码,可能处理参数加的不对或是不全,或者就应该对普通flv和H264/x264编码的视频分别处理,后续再进一步测试想办法解决。

http://tuzwu.iteye.com/blog/1025337

http://blog.clzg.cn/?39357 ,由 www.k686.com

ffmpeg添加水印的方法举例 (砖)的更多相关文章

  1. js调用php和php调用js的方法举例

    js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...

  2. [C#]List的Sort()、Find()、FindAll()、Exist()的使用方法举例

    [C#基础]List的Sort().Find().FindAll().Exist()的使用方法举例 List函数用得还是比较多的,正好用到其中的向个方法,做了一个例程,再总结一下: 先建一个学生类: ...

  3. python之if使用方法举例

    if使用方法举例: import random #随机生成1-100的整数 n = random.randint(1, 100) if n > 50: print(n, "> 5 ...

  4. 转: ffmpeg循环推流方法

    from:  https://blog.csdn.net/weiyuefei/article/details/64125208 ffmpeg循环推流方法 You should be able to u ...

  5. Android中的关于MDM中的几个方法举例

    Android中的关于MDM中的几个方法举例 首先介绍一下MDM是什么的缩写,MDM是什么? MDM 是 (Mobile Device Management )的缩写,中文翻译过来就是移动设备管理.随 ...

  6. [Python3 填坑] 014 类的常用魔术方法举例

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...

  7. Linux下编译带x264的ffmpeg的配置方法,包含SDL2

    一.环境准备 ffmpeg下载:http://www.ffmpeg.org/download.html x264下载:http://download.videolan.org/x264/snapsho ...

  8. ffmpeg —— 添加水印

    1.添加水印——movie过滤器: ffmpeg -i inputfile -vf  "movie=masklogo,scale= 60: 30[watermask]; [in] [wate ...

  9. java十五个常用类学习及方法举例

    <code class="language-java">import java.util.Scanner; import java.util.Properties; i ...

随机推荐

  1. java文件读写常用方法

    // TODO Auto-generated method stub //File file = new File("D:\\Android\\workspace\\Practice1\\s ...

  2. 特殊字符处理(WPF)

    WPF XAML 特殊字符(小于号.大于号.引号.&符号) - Andrew.Wangxu 时间 2013-09-07 18:14:00  博客园-所有随笔区原文  http://www.cn ...

  3. poj2942 点-双联通+二分图染色

    题意:有一群骑士要坐在一个圆形的桌子上,他们之间有些人相互讨厌,所以不能挨着,要求算出一次也不能坐在桌子上的人,每次会议桌子必须奇数个人,一个人不能开会 题解:可以先建一个补图,要满足题目条件我们只要 ...

  4. JAX-RS介绍——Java API forRESTful WebServices,JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目标则是Web应用开发

    JAX-RS Java API forRESTful WebServices旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架.是一个J ...

  5. 【WPF】推荐一款拖拉缩放控件的DEMO

    引言 在CodeProject上有个实现了控件拖拉缩放的DEMO,界面很漂亮,里面对Thumb和Adorner运用得很精彩.我觉得,使用WPF的开发者都可以去学习一下.下面放出链接. WPF Diag ...

  6. 使用zip()并行迭代

  7. 用VMware vSphere搭建虚拟化平台

    核心组件 vSphere是一款可以独立安装和运行在祼机上的系统,因此与其他我们以往见过的VMware Workstation 软件不同的是它不再依存于宿主操作系统之上.在ESXi安装好以后,我们可以通 ...

  8. MySQL安装后默认自带数据库的作用

    大家在学习MySQL时,安装后都会发现里边已经自带了几个默认的数据库,我装的MySQL5.5里边自带六个数据库 网上查了一些资料对这几个数据库的功能做一下学习. 1.information_schem ...

  9. Count On A Tree II.

    $n$ 个点的树,数一条链上有多少不同的点 sol: 树上莫队 首先,王室联邦分块 记 $(cu,cv)$ 为当前的链,$(qu,qv)$ 为当前询问的链,维护一个 $vis$ 数组表示“当前点在/不 ...

  10. CodeForces - 803F: Coprime Subsequences(莫比乌斯&容斥)

    Let's call a non-empty sequence of positive integers a1, a2... ak coprime if the greatest common div ...