返回首页

{A}简介
有一天,我碰到,因为它已经提供了一些静态的裁剪功能。所有我需要做的是动态的,如作为时间的函数定义裁剪区域的位置,。我决定,使其尽可能地灵活,所以人们可以编辑,保存放大器;恢复的动态裁剪设置,并设计为一个可扩展的功能。设计
",工作horsequot的解决方案是一个新IVDDynClippingStorage的接口中ClippingControl.h定义:

class VDINTERFACE IVDDynClippingStorage : public vdrefcounted<IVDRefCount> {

public:

	// Initialize clipping map

	virtual void Init(int sourceW, int sourceH) = 0;

	// Get source width

	virtual int GetWidth() = 0;

	// Get source height

	virtual int GetHeight() = 0;

	// Load clipping map from a file

	virtual VDStringW Load(wchar_t *filename, HWND parent) = 0;

	// Save clipping map to a file

	virtual VDStringW Dump(wchar_t *filename, HWND parent) = 0;

	// Display configuration interface

	virtual void Configure(HWND parent) = 0;

	// Set clipping bounds for position

	virtual int SetClipBounds(sint64 pos, const vdrect32& r) = 0;

	// Get clipping bounds for position

	virtual int GetClipBounds(sint64 pos, vdrect32& r) = 0;

	// Get position for clipping map index

	virtual sint64 GetClipPos(int idx) = 0;

	// Get clipping map size

	virtual int GetTotalClipPos() = 0;

	// Get the resulted crop size

	virtual void GetCrop(vdrect32& r) = 0;

	// Delete clipping map entry by index

	virtual void DelClipBounds(int idx) = 0;

	// Crop pixmap for given position

	virtual bool DoCrop(VDPixmap& dst, sint64 pos, vdrect32& crop_area) = 0;

	// Add/drop range to/from clipping map

	virtual void ChangeTimeline(sint64 pos, sint64 nframes, bool add) = 0;

};

它定义了一套方法来管理裁剪图,来执行实际的动态种植。 VDDynClippingStorage类中ClippingControl.cpp定义是实现该接口。每FilterInstance(然而,需要有一个以上的动态裁剪过滤器在过滤器链是非常令人怀疑)可以创建类的一个实例。
下图显示了解决方案的组成部分之间的关​​系:{C}
有种植控制的基本功能,以及一些变化。他们不是严格相关的动态种植,但都非常方便:从现在起,您将不仅能够舒展其两侧和角落,用鼠标左键拖动裁剪区域,但也将完整的裁剪区域,用鼠标右键!试试吧,你会看到动态种植是多么有用时,你必须去帧帧调整裁剪区域安置。一个新的quot;锁定纵横ratioquot;复选框允许裁剪区域的原始视频的宽高比。这是建议经常检查它与启用动态种植。
以下的VirtualDub组件与补丁的影响:裁剪控制(ClippingControl.h / .cpp,FiltDlg.cpp,资源)过滤器类的实例(FilterInstance.h / .cpp)保存(Job.cpp)和装载(Script.cpp处理设置)
下面的项目文件被修改:SRC \ VirtualDub中\ H \ clippingcontrol.hSRC \ VirtualDub中\ H \ filterinstance.hSRC \ VirtualDub中\水库\ RESOURCE.HSRC \ VirtualDub中\水库\ virtualdub.rcSRC \ VirtualDub中\源\ clippingcontrol.cppSRC \ VirtualDub中\源\ filtdlg.cppSRC \ VirtualDub中\源\ filterinstance.cppSRC \ VirtualDub中\源\ job.cppSRC \ VirtualDub中\源\ script.cpp大厦
你应该修补的VirtualDub的源代码树,并重新构建它。
有两种方法修补源代码树。您可以:解压缩到归档的VirtualDub 1.9.9源文件覆盖它的树的根,或使用提供的dyncropping.patch文件包含差异信息与。与Win32版本的补丁的VirtualDub如下源代码树的根,它运行:
C:\VirtualDub-1.9.9-src> patch -p1 -i dyncropping.patch

这可能工作以及与版本1.9.9太以外的VirtualDub中。
之后,像往常一样运行的建设进程。运行
加载视频,添加任何视频过滤器,选择quot;裁剪... quot;和检查quot;动态croppingquot;在quot复选框;过滤器输入croppingquot;控制。检查也quot;锁定纵横ratioquot;更好的效果。{S0}
步行种植控制的视频帧框架内,并相应调整裁剪区域的大小和位置,您的需求。所有的位置和大小的变化将被保存在渲染图。如果你倒带的视频的开头和再去帧一帧,你会发现裁剪区域是如何转移到按照你的调整!你可以点击"选项...",然后选择所需的设置。
完成后,单击"OKquot;关闭quot;过滤输入croppingquot,并再次quot; OKquot;关闭quot; Filtersquot;运行quot;预览过滤... quot;和手表什么是对的左边和右边的UI面板的情况。使用"另存为AVI ... quot;保存最终渲染。
处理与旧的视频软件。结论
在一般情况下,此功能可手动quot有用的议案后compensationquo​​t;稳定在下列情况下:没有硬件运动补偿的摄像机的旧视频影片在复杂的运动情况(车,船,运行)孩子或受损的人?"Noisyquot;,黑暗,低对比度的视频自动算法通常失败或产生不好的结果
此外,它可以方便一些特殊的视频效果(数码变焦,伸缩变形等)。
这是很基本的,但它是做什么是应该做的。这里有更多的事情,我想分享的情侣。
目前只有裁剪图的顶点之间的线性插值实施。可以尝试实施基于三次样条插值,看它是否提高了渲染的结果,并减少晃动。此外,可以尝试以实现真正的运动补偿算法里面
IVDDynClippingStorage:DoCrop将缓存和分析帧。
也是一个quot;没有interpolationquo​​t;模式可以使用包含在静态种植需要的场景集影片 - 这可以避免切割/裁剪/胶合件件。
使用线性插值法,你通常两熟调整传递实现最好的结果。
重采样选择有三种设置:原来的帧尺寸,最大裁切尺寸和定制。在任何情况下,其结果将是重采样的圆角的大小与压缩算法的一般兼容性被16整除。企图迫使非整除16或大于源值的自定义尺寸将导致错误。
有两个内置到VirtualDub中的重采样算法 - "bilinearquot;和"nearestquot。 quot; bicubicquot;在VirtualDub中的核心,但没有实现,而不是作为一个插件,因此不支持。
这似乎是有用的,有格线,选择裁剪区域中,当你用鼠标右键(也许它可以出现当您按下并按住鼠标右键,然后左一)幻灯片。它将使裁剪区域的位置更精确。我并没有实现,但作为一个为别人的想法。
IVDDynClippingStorage:ChangeTimeline方法是定义和实施VDDynClippingStorage,但它不被任何使用 - 它可以是一个未来的扩展,以防万一。
所有的裁剪图的顶点索引是基于1的。也就是说,索引接口上看到的是你在地图的。

回答

评论会员:Astyan 时间:2012/01/26
我想要做同样的...
所以,我很高兴找到您的工作{S2}
感谢{S2}

但我发现了一些问题:

1)当我键入handly crope价值(左侧,顶部,底部或右),
光标移动所有的时间!
例如,如果我选择一个值(这样的文字被选中)
"123",我得到了"3210"!!

但是,它的确定,我可以处理这个..

2)主要的问题是,当我处理一个视频,
我追踪的对象是不是在视频了...
它似乎转移约250像素...这种"转移"
不是常数:/
因此,我认为有一些错误。在编辑器中的对象以及跟踪。 所以我有一些意愿{S4}:

- 你这个插件集成到虚拟配音

或任何想法关于什么文件,我可以复制粘贴在另一个virtuadub? 怎样创造另一个"空变换"过滤器与您的种植呢?
因为这个版本我不能编辑MKV。

- 你的方式{S5},提高种植插件的时间表
? 如果我想只有5分钟的视频,裁剪窗口显示所有的电影...


我想我会自己编译的VirtualDub,看看会发生什么源。

感谢

PS:对不起我的英语
评论会员:谢尔盖Strakhov 时间:2012/01/26
,Astyan
Astyan写道:1)当我键入handly crope价值(左侧,顶部,底部或右),

光标移动所有的时间!

例如,如果我选择一个值(这样的文字被选中)

"123",我得到了"3210"!!



但是,它的确定,我可以处理这个..
欢迎来修复它。 Astyan写道:2)主要的问题是,当我处理一个视频,

我追踪的对象是不是在视频了...

它似乎转移约250像素...这种"转向"

是不是常数:/

因此,我认为有一些错误。
样在编辑器中的对象以及跟踪。
我有一个修复,发表于性病论坛 -



看来,下载网站是现在,我会在别处以后,让你知道。
Astyan写道: - 你可以做这个插件没有集成虚拟配音

迟早{S2}
Astyan写道:?或者任何想法什么样的文件,我可以复制粘贴在另一个virtuadub

尝试申请dyncropping.patch VirtualDub的源代码树的最新补丁。关于如何将它应用于的说明提供的文章,并在归档文件本身。


Astyan写道:什么创造另一种"空转变"过滤您的种植

为什么不,它应该工作
评论会员:。谢尔盖Strakhov 时间:2012/01/26
我固定的"重大问题",你可以下载更新的档案,并尝试

关于插件,你可以尝试写自己的,基于此代码。它应该是相对比较简单。修改,8月14日(星期日),2011下午02:06
评论会员:会员4657773 时间:2012/01/26
花他对我们的时间... ...