音视频ffmpeg——ffmpeg 滤镜(添加水印)
ffmpeg 滤镜
概念
所谓的滤镜其实就是在原始的视频或者图像上增加filter
按照处理数据的类型,通常多媒体的 filter 分为:
⚫ 音频 filter
⚫ 视频 filter
⚫ 字幕 filter
另一种按照处于编解码器的位置划分:
⚫ prefilters: used before encoding
⚫ intrafilters: used while encoding (and are thus an integral part of a video codec)
⚫ postfilters: used after decoding
FFmpeg 中 filter 分为:
⚫ source filter (只有输出)
⚫ audio filter
⚫ video filter
⚫ Multimedia filter
⚫ sink filter (只有输入)
除了 source 和 sink filter,其他 filter 都至少有一个输入、至少一个输出。
视频裁剪
将输入视频帧的宽度和高度从 x 和 y 值表示的位置裁剪到指定的宽度和高度;
x 和 y 是输出的左上角坐标,协调系统的中心是输入视频帧的左上角。
如果使用了可选的 keep_aspect 参数,将会改变输出 SAR(样本宽比)以补偿新的 DAR(显示长宽比)
语法:crop=ow[:oh[:x[:y[:keep_aspect]]]]
常见操作
(1)裁剪 100x100 的区域,起点为(12,34).
crop=100:100:12:34
相同效果:
crop=w=100:h=100:x=12:y=34
(2)裁剪中心区域,大小为 100x100
crop=100:100
(3)裁剪中心区域,大小为输入视频的 2/3
crop=2/3*in_w:2/3*in_h
(4)裁剪中心区域的正方形,高度为输入视频的高
crop=out_w=in_h
crop=in_h
(5)裁剪偏移左上角 100 像素
crop=in_w-100:in_h-100:100:100
(6)裁剪掉左右 10 像素,上下 20 像素
crop=in_w-2*10:in_h-2*20
(7)裁剪右下角区域
crop=in_w/2:in_h/2:in_w/2:in_h/2
添加水印
文字水印
(1)将文字的水印加在视频的左上角:
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20"
将字体的颜色设置为绿色:
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green"
如果想调整文字水印显示的位置,调整 x 与 y 参数的数值即可。
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello
world':fontcolor=green:x=400:y=200"
修改透明度
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello
world':fontcolor=green:x=400:y=200:alpha=0.5"
(2)文字水印还可以增加一个框,然后给框加上背景颜色:
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello
world':fontcolor=green:box=1:boxcolor=yellow"
Version:0.9 StartHTML:0000000105 EndHTML:0000002877 StartFragment:0000000141 EndFragment:0000002837
(3)文字水印以本地时间作为水印内容:
可以在 drawtext 滤镜中配合一些特殊用法来 完成,在 text 中显示本地当前时间,格式为年月日时分秒的方式,
ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow"
在使用 ffmpeg 转码存储到文件时需要加上-re,否则时间不对。
ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" out.mp4
Version:0.9 StartHTML:0000000105 EndHTML:0000003366 StartFragment:0000000141 EndFragment:0000003326
(4)在个别场景中,需要定时显示水印,定时不显示水印,这种方式同样可以配合 drawtext 滤镜进
行处理,使用 drawtext 与 enable 配合即可,例如每 3 秒钟显示一次文字水印:
ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:boxcolor=yellow:enable=lt( mod(t\,3)\,1)"
在使用 ffmpeg 转码存储到文件时需要加上-re,否则时间不对。
Version:0.9 StartHTML:0000000105 EndHTML:0000002917 StartFragment:0000000141 EndFragment:0000002877
(5)跑马灯效果
ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=abs(sin(t))*h*0.7"
修改字体透明度,修改字体颜色
ffplay -i input.mp4 -vf "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='liaoqingfu':x=mod(50*t\,w):y=abs(sin(t))*h*0.7:alpha= 0.5:fontcolor=white:enable=lt(mod(t\,3)\,1)"
图片水印
FFmpeg 除了可以向视频添加文字水印之外,还可以向视频添加图片水印、视频跑马灯等
样例:
ffmpeg -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]"
output.mp4
➢ 原始视频文件路径:input.mp4
➢ 水印图片路径:logo.png
➢ 水印位置:(x,y)=(10,10)<=(left,top)距离左侧、顶部各 10 像素;
➢ 输出文件路径:output.mp4
(1)图片 logo.png 将会打入到 input.mp4 视频中,显示在 x 坐标 50、y 坐标 20 的位置
ffplay -i input.mp4 -vf "movie=logo.png[logo];[in][logo]overlay=50:10[out]"
由于 logo.png 图片的背景色是白色,所以显示起来比较生硬,如果水印图片是透明背景的,效果会更好,
下面找一张透明背景色的图片试一下:
ffplay -i input.mp4 -vf "movie=logo2.png[watermark];[in][watermark]overlay=50:10[out]"
(2)显示位置
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=10:10[out]"
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:10[out]"
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=10:main_h-overlay_h 10[out]"
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:main_hoverlay_h-10[out]"
(3)跑马灯效果
ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*h*0.7[out]"
音视频ffmpeg——ffmpeg 滤镜(添加水印)相关推荐
- 音视频篇 - FFmpeg 的介绍和使用
本文章是阅读<音视频开发进阶指南基于android与ios平台的实践>一书的学习笔记. 目录: FFmpeg 的介绍 FFmpeg Android 编译库 FFmpeg 的结构 FFmpe ...
- 音视频开发-ffmpeg介绍-系列一
目录 一.简介 FFmpeg框架的基本组成包含: 二. FFmpeg框架梳理音视频的流程编辑 基本概念: 三.ffmpeg.ffplay.ffprobe区别 4.1 ffmpeg是用于转码的应用程序 ...
- Android音视频开发--FFmpeg
音视频的基础知识 视频 静止的画面叫图像(picture): 连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理,人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果,这样的 ...
- 【音视频】FFmpeg
FFmpeg 学习 FFmpeg FFmpeg简介 FFmpeg的基本组成 FFmpeg的可执行文件 ffmpeg 常用命令 FFmpeg转码 MP4格式 MP4概述 音视频文件音视频流抽取 H.26 ...
- 音视频之——FFmpeg教程(二)——Windows10下搭建nginx-rtmp流媒体服务器
前言 前一篇我们知道了如何配置FFmpeg开发环境,接下来,就开始简单的推流吧.说到推流前,我们要知道常用的几个直播推流协议. 直播推流协议 在搭建服务之前先了解下目前主流的几个直播协议: RTMP: ...
- 音视频同步-ffmpeg
音视频同步肯定是需要使用时间戳进行同步的,音频和视频的时间戳进行对比,哪个小就写入哪个包,基本上可以实现音视频同步. 但是这个时间戳从哪里来呢? 使用rtp头中携带的时间戳是最正确的方法,因为音视频流 ...
- 音视频处理 ffmpeg初级开发 命令行工具-实用命令
参考链接 ffmpeg Documentation 作者:smallest_one 链接:FFmpeg命令行工具-实用命令 - 简书 目录 1,help命令使用 1.1 ffmpeg命令的语法结构 ...
- php音视频同步,FFMPEG转码音视频不同步情况总结
[导读]使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同步,下面我们就来根据问题出现的原因,对所遇到的音视频不同步做一个分类. 使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同 ...
- 音视频同步 ffmpeg 推流
音视频同步原理及实现 可参考: https://blog.csdn.net/myvest/article/details/97416415 https://www.jianshu.com/p/3578 ...
- 音视频开发-FFmpeg详解
音视频开发是个非常复杂的,庞大的开发话题,初涉其中,先看一下结合 OEIP(开源项目) 新增例子. 可以打开flv,mp4类型文件,以及rtmp协议音视频数据,声音的播放使用SDL. 把采集的麦/声卡 ...
最新文章
- 笔记本建立wifi热点!(主要针对XP)【直播】
- 记一次validator jar冲突导致的启动异常
- 【web安全】Spring Boot eureka xstream 反序列化
- Android中多媒体处理【转】
- MVP Community Camp 社区大课堂
- python坐标轴刻度设置_学习python中matplotlib绘图设置坐标轴刻度、文本
- [Redux/Mobx] redux-saga和redux-thunk有什么本质的区别?
- 吴恩达机器学习作业Python实现(八):异常检测和推荐系统
- Cgroup 资源配置方法----------Control Groups------Docker通过 Cgroup 来控制容器使用的资源配额
- FileUpload上传过大文件异常
- 楼市泡沫雪崩为何十倍“猛于”A股大跌
- 深入浅出SQLITE3
- 七年级计算机上册知识题,Word综合应用复习七年级信息技术上册教案
- RK3288开发板GPIO介绍
- CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout
- 人工智能知识全面讲解:机器学习的类型
- ajax 获取数据
- 【转】独行巨蟹:BTS2.0那些事儿
- 五十岁:人生的另一种透彻
- MySQL之DML操作