ffplay 中filter的使用
添加字幕:
ffplay -vf drawtext="fontfile=arial.ttf: text='Test Text': x=100: y=300: \
fontsize=48: fontcolor=red: box=1: boxcolor=white" /d/ts/music.ts
把x=100 改成 x=50*t 可以使文本向右滚动。
./ffplay -vf drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text': x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2" h.mp4
黑白漫画风格显示:
ffplay -vf edgedetect=low=0.1:high=0.4 /d/ts/music.ts
./ffplay -vf edgedetect=low=0.1:high=0.4 h.mp4
对比正常视频和deshake 过的视频:
-vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
堆叠视频/马赛克:
ffplay /d/ts/music.ts -vf 'scale=128:72,tile=4x4'
ffplay /d/ts/mis.ts -vf select='gt(scene\,0.4)',scale=160:120,tile
快进:
ffplay /d/ts/mis.ts -vf setpts=0.5*PTS
Audio Source:
生成440Hz正弦信号,设置采样率为8000Hz:
ffplay -nostats -f lavfi aevalsrc="sin(440*2*PI*t)::s=8000"
Video Source:
元包自动机:
ffplay -nostats -f lavfi cellauto
类似地,还有分形图案mandelbrot, 模拟life, 测试testsrc
todo:
how to use "nullsrc" <--the input content is to be ignored. for analysis/debugging?
synthesize a voice utterance using libflite
[0]=>Parsed_setpts_0
[1]=>ffplay_buffersink
[2]=>ffplay_crop
[3]=>ffplay_buffer
(gdb) p *filter->graph->filters[0]->inputs[0]->srcpad
$266 = {name = 0x8ee5a3d "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0, poll_frame = 0x8078c28 <poll_frame>,
request_frame = 0x8078ba5 <request_frame>, config_props = 0x8078b01 <config_props>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[1]->inputs[0]->srcpad
$267 = {name = 0x8eeef6c "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0, poll_frame = 0, request_frame = 0,
config_props = 0x808fc6e <config_output>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[2]->inputs[0]->srcpad
$268 = {name = 0x8ee8ccc "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0, poll_frame = 0, request_frame = 0, config_props = 0,
needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[0]->inputs[0]->dstpad
$270 = {name = 0x8ee8ccc "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0x8083a6b <filter_frame>, poll_frame = 0, request_frame = 0,
config_props = 0x80838c9 <config_input>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[1]->inputs[0]->dstpad
$271 = {name = 0x8ee4fec "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0x80768fe <filter_frame>, poll_frame = 0, request_frame = 0,
config_props = 0, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[2]->inputs[0]->dstpad
$272 = {name = 0x8eeef6c "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0x808fcb0 <filter_frame>, poll_frame = 0, request_frame = 0,
config_props = 0x808f4c2 <config_input>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[3]->inputs
Cannot access memory at address 0x0
(gdb) p *filter->graph->filters[0]->outputs[0]->srcpad
$275 = {name = 0x8ee8ccc "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0, poll_frame = 0, request_frame = 0, config_props = 0,
needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[1]->outputs[0]->srcpad
Cannot access memory at address 0x0
(gdb) p *filter->graph->filters[2]->outputs[0]->srcpad
$276 = {name = 0x8eeef6c "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0, poll_frame = 0, request_frame = 0,
config_props = 0x808fc6e <config_output>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[3]->outputs[0]->srcpad
$277 = {name = 0x8ee5a3d "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0, poll_frame = 0x8078c28 <poll_frame>,
request_frame = 0x8078ba5 <request_frame>, config_props = 0x8078b01 <config_props>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[0]->outputs[0]->dstpad
$278 = {name = 0x8eeef6c "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0x808fcb0 <filter_frame>, poll_frame = 0, request_frame = 0,
config_props = 0x808f4c2 <config_input>, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[1]->outputs[0]->dstpad
Cannot access memory at address 0x0
(gdb) p *filter->graph->filters[2]->outputs[0]->dstpad
$279 = {name = 0x8ee4fec "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0x80768fe <filter_frame>, poll_frame = 0, request_frame = 0,
config_props = 0, needs_fifo = 0, needs_writable = 0}
(gdb) p *filter->graph->filters[3]->outputs[0]->dstpad
$280 = {name = 0x8ee8ccc "default", type = AVMEDIA_TYPE_VIDEO, min_perms = 0, rej_perms = 0, start_frame = 0, get_video_buffer = 0,
get_audio_buffer = 0, end_frame = 0, draw_slice = 0, filter_frame = 0x8083a6b <filter_frame>, poll_frame = 0, request_frame = 0,
config_props = 0x80838c9 <config_input>, needs_fifo = 0, needs_writable = 0}
#0 ff_filter_frame (link=0xad333a20, frame=0xad334020) at libavfilter/avfilter.c:1163
#1 0x08090098 in filter_frame (link=0xad333f60, frame=0xad334020) at libavfilter/vf_crop.c:297
#2 0x080729c1 in ff_filter_frame_framed (link=0xad333f60, frame=0xad334020) at libavfilter/avfilter.c:1081
#3 0x08072d35 in ff_filter_frame (link=0xad333f60, frame=0xad334020) at libavfilter/avfilter.c:1161
#4 0x08084382 in filter_frame (inlink=0xad333940, frame=0xad334020) at libavfilter/setpts.c:210
#5 0x080729c1 in ff_filter_frame_framed (link=0xad333940, frame=0xad334020) at libavfilter/avfilter.c:1081
#6 0x08072d35 in ff_filter_frame (link=0xad333940, frame=0xad334020) at libavfilter/avfilter.c:1161
#7 0x08078c26 in request_frame (link=0xad333940) at libavfilter/buffersrc.c:500
#8 0x08070bcf in ff_request_frame (link=0xad333940) at libavfilter/avfilter.c:346
#9 0x08070bf4 in ff_request_frame (link=0xad333f60) at libavfilter/avfilter.c:348
#10 0x08070bf4 in ff_request_frame (link=0xad333a20) at libavfilter/avfilter.c:348
#11 0x08076a3b in av_buffersink_get_frame_flags (ctx=0xad3332a0, frame=0xad500480, flags=0) at libavfilter/buffersink.c:138
ffplay 中filter的使用的更多相关文章
- css中filter:alpha透明度使用
css中filter:alpha透明度使用 使用filter可以设置透明度,filter:alpha在IE下是没有问题的,要支持firefox就需要使用-moz-opacity,下面有个不错的示 ...
- python中filter、map、reduce的区别
python中有一些非常有趣的函数,今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,map,reduce为内 ...
- jquery中filter(fn)的使用研究
jquery中filter(fn)给出的官方说明是: 筛选出与指定函数返回值匹配的元素集合 这个函数内部将对每个对象计算一次 (正如 '$.each'). 如果调用的函数返回false则这个元素被删除 ...
- 024——VUE中filter的使用
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python中filter函数
python中filter()函数 filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断 ...
- 了解IE中filter属性的应用!
在设置不透明属性时,经常用opacity来增加层次感或者增加用户体验,但这个属性是css3属性,对于低级浏览器的兼容性来说就达不到预期的效果. 一般而言,我们都尽可能少用一些浏览私有属性-webkit ...
- Java中filter内处理重定向遇到的问题
这是在Java中filter内处理重定向遇到的问题.本意是写一个做URL rewrite 的filter,来重写URL,同时在处理登陆过程中要杀掉当前session,创建新session来代替. 1. ...
- vuex中filter的使用 && 快速判断一个数是否在一个数组中
vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr ...
- python2和python3中filter函数
在python2和python3中filter是不同的,其中在python2中filter返回的是一个list,可以直接使用 >>> a = [1,2,3,4,5,6,7] > ...
随机推荐
- Linux 文件与目录
文件描述符 在内核中,所有打开的文件都使用文件描述符(一个非负整数)标记.文件描述符的变化范围是0~OPEN_MAX – 1.早期的unix系统中,每个进程最多可以同时打开20个文件,就是说文件描述符 ...
- [转]理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...
- 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性
一解决方法: 问题的主要原因出在:跨程序集反射. 即我们需反射的A.dll的程序集引用B.dll程序集,而在反射工具项目中却不存在对B.dll程序集的引用.因此我们只需在反射工具项目中添加对B.dll ...
- 12.Warning (15714): Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings report for details
解释:对于一些管脚,缺少了部分描述,需要再添加一些设置,比如current strength,slew rate等: 措施:打开pin plannel界面,在current strength和slew ...
- DataTemplate和ControlTemplate联系与区别
---恢复内容开始--- 正如标题中的两个拼接的单词所说,DataTemplate就是数据显示的模板,而ControlTemplate是控件自身的模板.(个人理解,错误请指出,谢谢) 我们看这二者在两 ...
- ORA-12154:TNS:无法解析指定的连接标识符
ORA-12154:TNS:无法解析指定的连接标识符 1问题的描述 Oracle11g server 64bit服务器端安装在Windows Server2008 Enterprise上,安装Orac ...
- 20145103 《Java程序设计》第3周学习总结
20145103 <Java程序设计>第3周学习总结 教材学习内容总结 第四章我首先了解了CPU与内存的关系,栈与堆的关系.要产生对象必须先定义类,类是对象的设计图,对象是累的实例.以类名 ...
- 【CentOS】Eclipse中svn插件使用
目录: 1.安装 2.使用 3.错误 1.安装 svn插件地址: Subclipse 1.6.x Update Site - http://subclipse.tigris.org/update_1. ...
- ionic 运行过程中动态切换API服务器地址
ionic 运行过程中动态切换API服务器地址 keywords: ionic,phonegap,cordova,网络制式,动态切换,变更,API,服务器地址,$resource,localstora ...
- hdu 1533 Going Home 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1533 On a grid map there are n little men and n house ...