使用着色器在MPC中编辑视频

有一个任务:在播放过程中“即时”更改视频-交换左右部分。 不要反映,即改变,即 将图片分成两部分并交换。 当然,您可以使用诸如AviSynth之类的帧服务器来做到这一点,但是它不再是“即时”的-您需要为每个视频文件编写脚本。 我想快速而又不会紧张。

在无花果上? 使来自Yandex的机器学习讲座课程更加方便观看。 讲师指向现场演示的要点,您必须不断用眼睛跳过屏幕以了解其含义:

图片

解决方案


我们使用Media Player Classic中可用的着色器工具。 在标准套件中,有几种现成的用于编辑图像的着色器-“ Emboss”,“ Grayscale”,“ 16-235至0-255”等。 我们在那里不需要它,因此我们创建了一个新的着色器( HLSL中的一个小程序):

sampler s0 : register(s0); float4 main(float2 tex : TEXCOORD0) : COLOR { // swapLine 0.5 = in the middle float swapLine = 1082.0 / 1920.0; tex.x = (tex.x + swapLine) % 1.0; float4 c0 = tex2D(s0, tex); return c0; } 

我们将其保存在媒体播放器的\ Shaders文件夹中(例如C:\ Program Files \ MPC-HC \ Shaders),名称为Shift.hlsl 。 接下来,转到“ Media Player经典”设置(“ 选项” /“播放” /“着色器” ),然后将新的“着色器”着色器添加到“ 激活的预调整大小”着色器列表中。

这种视频处理方法不会加载CPU,因为在任何情况下,所有工作都是由图形卡完成的,如果它是真实的而不是被仿真的。

什么事巴里摩尔


这是一个像素着色器,应根据通过tex参数传递的坐标来输出点的颜色。 变量s0包含具有视频当前帧的纹理。

计算新的水平坐标为当前坐标与swapLine移位之和的除法模1的余数。 因此,当点超出尺寸范围时,我们会将其移到右侧,然后将其重新排列到左侧。

最后, tex2D(s0,tex)命令从原始帧返回具有所需坐标的点的颜色。

聚苯乙烯


Source: https://habr.com/ru/post/zh-CN434856/


All Articles