MedacoderNT 转码系统最近加入遮标(Delogo)功能,遮标功能是为了去掉原有影片上的水印等标志,相信有不少人有这样的转码需求。NT转码系统的前端解码采用了Mencoder/Mplayer及AviSynth等,来解码不同格式的影片,由于遮标滤镜要放到其他滤镜之前,所以这个滤镜的实现要放到解码器里,Mencoder/Mplayer自带了一个简单的遮标滤镜,其原理是用水印周围的像素颜色插值模糊来替换水印,遮标效果还凑合。

Mencoder解码时直接用自带滤镜即可,而AviSynth就需要模拟一个类似Mencoder的遮标,由于对AviSynth不熟,在网上搜索良久才找到一段代码,修改调试后,达到了Mencoder类似的效果(在搜索时也发现AviSynth有几个Delogo滤镜,但都需要提供用于遮标的图片,比较麻烦,跟Mencoder不统一,遂不予采用),现记录于此:

function Delogo(clip c, int x, int y, int width, int height) { top = c.crop(x, y-2, width, 2) bottom = c.crop(x, y+height, width, 2) mask = StackVertical(top,bottom).Blur(0.5,1.38).BilinearResize(width,height) c = c.Layer(mask, "add", 255, x, y) return c }

该代码解释:参数c是指滤镜应用的电影片段,后面几个参数指出了源水印的位置及大小,主要功能就是用水印周围的像素颜色构建出一个模糊的色块来遮住源水印。

进一步考虑,有的影片的水印是动态变化的,比如前10分钟水印在左上角,接下来10分钟在右上角。此时就需要给遮标滤镜增加时间间隔控制。对于Mencoder/Mplayer,可以通过patch代码,增加时间控制即可,而AviSynth就有点麻烦了,由于滤镜的执行在不同的时间段里执行的位置不同,需要通过运行时函数及ConditionalReader来达到这个要求。通过摸索,下面这段代码可以工作。

DirectShowSource("G:/resource/video/Godsend_720.wmv") ConvertToRGB32() ScriptClip("Delogo(last, delogox, delogoy, delogow,delogoh)") ConditionalReader("x.txt", "delogox", false) ConditionalReader("y.txt", "delogoy", false) ConditionalReader("w.txt", "delogow", false) ConditionalReader("h.txt", "delogoh", false) ConvertToYV12()

这段代码通过ConditionalReader读取水印的位置参数的配置文件,位置参数是随时间间隔的不同而变化的,这样就达到遮住动态水印的效果。代码中之所以用ScriptClip函数来执行遮标滤镜,因为该函数对每帧执行时都会重新取得各参数的值,参数随时间的变化才可以起作用。参数配置文件 "x.txt"示例如下,其他参数与此类似。

Type int Default 0 R 100 400 260 R 401 1000 320 R 1001 6000 400

该配置文件指定了100帧~400帧 时x的值为260,及其他帧间隔的值。 外面传进的参数是时间间隔,这里需要帧间隔,可通过影片帧率来转换。

AviSynth 模拟Mplayer的遮标滤镜(Delogo)相关推荐

  1. 《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式...

    本节书摘来自异步社区<点睛:ActionScript3.0游戏互动编程>一书中的第2章,第2.3节,作者:游志德 , 彭文波 更多章节内容可以访问云栖社区"异步社区"公 ...

  2. ffmpeg mplayer x264 代码重点详解 详细分析

    ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((a+b+1)>>1) #define avg4 ...

  3. mplayer 使用手册(中文)

    MPlayer 名称 概要 说明 一般注记 播放选项 ( 仅用于 MPLAYER) 分路器 / 媒体流选项 OSD/ 字幕选项 音频输出选项 ( 仅用于 MPLAYER) 视频输出选项 ( 仅用于 M ...

  4. mplayer参数说明

    MPlayer 名称 概要 说明 一般注记 播放选项 ( 仅用于 MPLAYER) 分路器 / 媒体流选项 OSD/ 字幕选项 音频输出选项 ( 仅用于 MPLAYER) 视频输出选项 ( 仅用于 M ...

  5. ubuntu下mplayer 使用(3)-使用手册(中文)

    MPlayer 名称 概要 说明 一般注记 播放选项 ( 仅用于 MPLAYER) 分路器 / 媒体流选项 OSD/ 字幕选项 音频输出选项 ( 仅用于 MPLAYER) 视频输出选项 ( 仅用于 M ...

  6. 浅谈Javascript事件模拟

    事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行 交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的.这就 ...

  7. mplayer - Linux下的电影播放器

    概要 mplayer [选项] [ 文件 | URL | 播放列表 | - ] mplayer [全局选项] 文件1 [特定选项] [文件2] [特定选项] mplayer [全局选项] {一组文件和 ...

  8. x264 代码重点详解 详细分析

    eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...

  9. 使用Julia进行图像处理--用于扩充训练集的图像增强

    使用Julia进行图像处理--用于扩充训练集的图像增强 前言 "访问"像素 将像素转换成数字数组 将数字数组转换为色彩 改变色彩饱和度 将图像转化为灰度图像 创建自定义滤镜 填充图 ...

  10. 前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)

    整合篇一 前言 整合CRUD 前后端对接流程 添加路由 点击路由显示页面 在api文件夹创建js文件,定义接口地址和参数 创建vue页面引入js文件,调用方法实现功能 多条件查询 删除功能 增加功能 ...

最新文章

  1. 今天参加面试 上机题,整理一下
  2. 向linux kernel中添加cmdline的四种方式
  3. Docker cpu memory quota使用说明
  4. android实现资源嗅探器手机版,OPPO Reno尝鲜Android Q教程来了
  5. opencapwap简要分析
  6. Lua的自我学习之路-语法学习9
  7. mysql触发器更新自己表_mysql 触发器更新自己表|单表操作 阿星小栈
  8. Kali 如何放大字体与图标
  9. Chrome、Edge等浏览器多线程下载功能开启
  10. 计网读书笔记day1
  11. jmeter-连接数据库循环使用数据
  12. 记一次使用Cobar踩到的坑
  13. office 2016安装包下载
  14. 计算机网络安装调试费用,计算机网络实验 网络设备及其安装调试new
  15. vue表格显示图片,采用element ui实现
  16. css3的一些动画(代码及演示)
  17. cookie、session及其HTTP缓存的关系
  18. 在线软件-管理软件 收银管理软件 连锁管理软件 餐饮管理软件 足浴管理软件 会员管理软件...
  19. Hive中4个By的区别
  20. 动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇

热门文章

  1. FairGuard游戏加固兼容摸摸鱼和TAPTAP云玩
  2. 追忆那似水流年的产品梦
  3. vue中你真的理解v-modle基础理解和使用吗?
  4. open用法 vba_open方法读写文件
  5. 玩转亚马逊 AWS IoT(3): SpringBoot 2.7 集成 AWS IoT 服务
  6. playwright 组件超时问题
  7. AI编辑文字时会出现“滚滚长江东逝水”解决方法
  8. oracle order siblings by,sql中ORDER SIBLINGS BY排序的含义
  9. 洛谷 U19159 采摘毒瘤
  10. git commit