AlphaPlayer
AlphaPlayer copied to clipboard
原始视频左右调换后,需要修改什么参数?
原始视频左右调换后,需要修改什么参数?
即:原始視頻在左側,透明通道在右側的情況,謝謝。
应该是修改.metal文件,搞懂README里面那个合成原理图就很容易修改了
实在不会改代码还可以改原视频,使用ffmpeg对mp4做水平翻转~。
hflip 水平翻转
ffmpeg -i input.mp4 -vf "hflip" -vframes 1 output.png -y
我试了试,主要改两个地方。 1 frag.sh, 修改成从左边取色,右边取透明度
#extension GL_OES_EGL_image_external : require
precision mediump float;
varying vec2 vTextureCoord;
uniform samplerExternalOES sTexture;
void main() {
vec4 color = texture2D(sTexture, vTextureCoord);
vec4 color2Map = vec4(1.0, 1.0, 1.0, 1.0);
if (vTextureCoord.x < 0.5) {
color2Map = texture2D(sTexture, vec2(vTextureCoord.x + 0.5, vTextureCoord.y));
gl_FragColor = vec4(color.r, color.g, color.b, color2Map.g);
} else {
gl_FragColor = vec4(color.r, color.g, color.b, color.a);
}
}
2 render的uv坐标,贴纹理的左半部分
private var halfRightVerticeData = floatArrayOf(
// X, Y, Z, U, V
-1.0f, -1.0f, 0f, 0f, 0f,
1.0f, -1.0f, 0f, 0.5f, 0f,
-1.0f, 1.0f, 0f, 0f, 1f,
1.0f, 1.0f, 0f, 0.5f, 1f
)
private static float[] getZoomData(float leftZoomRatio, float topZoomRatio, float rightZoomRatio, float bottomZoomRatio) {
return new float[] {
// X, Y, Z, U, V
-1.0f + leftZoomRatio * 2, -1.0f + bottomZoomRatio * 2, 0, 0.f, 0.f,
1.0f - rightZoomRatio * 2, -1.0f + bottomZoomRatio * 2, 0, 0.5f, 0.f,
-1.0f + leftZoomRatio * 2, 1.0f - topZoomRatio * 2, 0, 0f, 1.f,
1.0f - rightZoomRatio * 2, 1.0f - topZoomRatio * 2, 0, 0.5f, 1.f,
};
}
private static float[] getCropData(float leftCropRatio, float topCropRatio, float rightCropRatio, float bottomCropRatio) {
return new float[] {
// X, Y, Z, U, V
-1.0f, -1.0f, 0, 0f + leftCropRatio / 2, 0.f + bottomCropRatio,
1.0f, -1.0f, 0, 0.5f - rightCropRatio / 2, 0.f + bottomCropRatio,
-1.0f, 1.0f, 0, 0.f + leftCropRatio / 2, 1.f - topCropRatio,
1.0f, 1.0f, 0, 0.5f - rightCropRatio / 2, 1.f - topCropRatio,
};
}
这么改就可以了吧 void main() { vec4 color = texture2D(sTexture, vec2(vTextureCoord.x - 0.5, vTextureCoord.y)); vec4 color2Map = vec4(1.0, 1.0, 1.0, 1.0); color2Map = texture2D(sTexture, vec2(vTextureCoord.x, vTextureCoord.y)); gl_FragColor = vec4(color.r, color.g, color.b, color2Map.g); }
我试了试,主要改两个地方。 1 frag.sh, 修改成从左边取色,右边取透明度
#extension GL_OES_EGL_image_external : require precision mediump float; varying vec2 vTextureCoord; uniform samplerExternalOES sTexture; void main() { vec4 color = texture2D(sTexture, vTextureCoord); vec4 color2Map = vec4(1.0, 1.0, 1.0, 1.0); if (vTextureCoord.x < 0.5) { color2Map = texture2D(sTexture, vec2(vTextureCoord.x + 0.5, vTextureCoord.y)); gl_FragColor = vec4(color.r, color.g, color.b, color2Map.g); } else { gl_FragColor = vec4(color.r, color.g, color.b, color.a); } }
2 render的uv坐标,贴纹理的左半部分
private var halfRightVerticeData = floatArrayOf( // X, Y, Z, U, V -1.0f, -1.0f, 0f, 0f, 0f, 1.0f, -1.0f, 0f, 0.5f, 0f, -1.0f, 1.0f, 0f, 0f, 1f, 1.0f, 1.0f, 0f, 0.5f, 1f )
private static float[] getZoomData(float leftZoomRatio, float topZoomRatio, float rightZoomRatio, float bottomZoomRatio) { return new float[] { // X, Y, Z, U, V -1.0f + leftZoomRatio * 2, -1.0f + bottomZoomRatio * 2, 0, 0.f, 0.f, 1.0f - rightZoomRatio * 2, -1.0f + bottomZoomRatio * 2, 0, 0.5f, 0.f, -1.0f + leftZoomRatio * 2, 1.0f - topZoomRatio * 2, 0, 0f, 1.f, 1.0f - rightZoomRatio * 2, 1.0f - topZoomRatio * 2, 0, 0.5f, 1.f, }; } private static float[] getCropData(float leftCropRatio, float topCropRatio, float rightCropRatio, float bottomCropRatio) { return new float[] { // X, Y, Z, U, V -1.0f, -1.0f, 0, 0f + leftCropRatio / 2, 0.f + bottomCropRatio, 1.0f, -1.0f, 0, 0.5f - rightCropRatio / 2, 0.f + bottomCropRatio, -1.0f, 1.0f, 0, 0.f + leftCropRatio / 2, 1.f - topCropRatio, 1.0f, 1.0f, 0, 0.5f - rightCropRatio / 2, 1.f - topCropRatio, }; }
您好,试了一下您的方法,没有成功,您成功了吗
我试了试,主要改两个地方。 1 frag.sh, 修改成从左边取色,右边取透明度
#extension GL_OES_EGL_image_external : require precision mediump float; varying vec2 vTextureCoord; uniform samplerExternalOES sTexture; void main() { vec4 color = texture2D(sTexture, vTextureCoord); vec4 color2Map = vec4(1.0, 1.0, 1.0, 1.0); if (vTextureCoord.x < 0.5) { color2Map = texture2D(sTexture, vec2(vTextureCoord.x + 0.5, vTextureCoord.y)); gl_FragColor = vec4(color.r, color.g, color.b, color2Map.g); } else { gl_FragColor = vec4(color.r, color.g, color.b, color.a); } }
2 render的uv坐标,贴纹理的左半部分
private var halfRightVerticeData = floatArrayOf( // X, Y, Z, U, V -1.0f, -1.0f, 0f, 0f, 0f, 1.0f, -1.0f, 0f, 0.5f, 0f, -1.0f, 1.0f, 0f, 0f, 1f, 1.0f, 1.0f, 0f, 0.5f, 1f )
private static float[] getZoomData(float leftZoomRatio, float topZoomRatio, float rightZoomRatio, float bottomZoomRatio) { return new float[] { // X, Y, Z, U, V -1.0f + leftZoomRatio * 2, -1.0f + bottomZoomRatio * 2, 0, 0.f, 0.f, 1.0f - rightZoomRatio * 2, -1.0f + bottomZoomRatio * 2, 0, 0.5f, 0.f, -1.0f + leftZoomRatio * 2, 1.0f - topZoomRatio * 2, 0, 0f, 1.f, 1.0f - rightZoomRatio * 2, 1.0f - topZoomRatio * 2, 0, 0.5f, 1.f, }; } private static float[] getCropData(float leftCropRatio, float topCropRatio, float rightCropRatio, float bottomCropRatio) { return new float[] { // X, Y, Z, U, V -1.0f, -1.0f, 0, 0f + leftCropRatio / 2, 0.f + bottomCropRatio, 1.0f, -1.0f, 0, 0.5f - rightCropRatio / 2, 0.f + bottomCropRatio, -1.0f, 1.0f, 0, 0.f + leftCropRatio / 2, 1.f - topCropRatio, 1.0f, 1.0f, 0, 0.5f - rightCropRatio / 2, 1.f - topCropRatio, }; }
您好,试了一下您的方法,没有成功,您成功了吗
成功的,上面代码就是从我改造的里面拷贝出来的。你再好好检查检查。
您好,试了一下您的方法,没有成功,您成功了吗
成功的,上面代码就是从我改造的里面拷贝出来的。你再好好检查检查。
您好,您的测试代码能发我一下吗http://qn.aiyashequ.cn/test/0000V.mp4,或者如果您有时间,这个能帮我调试一下吗,非常感谢
您好,试了一下您的方法,没有成功,您成功了吗
成功的,上面代码就是从我改造的里面拷贝出来的。你再好好检查检查。
您好,您的测试代码能发我一下吗http://qn.aiyashequ.cn/test/0000V.mp4,或者如果您有时间,这个能帮我调试一下吗,非常感谢
你如果运行的是这个项目的工程,需要注意把App的build.gradle里面依赖由maven改成libraries,它默认用的是maven库的版本。
您好,试了一下您的方法,没有成功,您成功了吗
成功的,上面代码就是从我改造的里面拷贝出来的。你再好好检查检查。
您好,您的测试代码能发我一下吗http://qn.aiyashequ.cn/test/0000V.mp4,或者如果您有时间,这个能帮我调试一下吗,非常感谢
您好,试了一下您的方法,没有成功,您成功了吗
成功的,上面代码就是从我改造的里面拷贝出来的。你再好好检查检查。
您好,您的测试代码能发我一下吗http://qn.aiyashequ.cn/test/0000V.mp4,或者如果您有时间,这个能帮我调试一下吗,非常感谢
对调透明区域和颜色区域你可以参考下,随便写的,只是验证下。
这么改就可以了吧 void main() { vec4 color = texture2D(sTexture, vec2(vTextureCoord.x - 0.5, vTextureCoord.y)); vec4 color2Map = vec4(1.0, 1.0, 1.0, 1.0); color2Map = texture2D(sTexture, vec2(vTextureCoord.x, vTextureCoord.y)); gl_FragColor = vec4(color.r, color.g, color.b, color2Map.g); }
我用了这段代码可以正常展示
您好,试了一下您的方法,没有成功,您成功了吗
成功的,上面代码就是从我改造的里面拷贝出来的。你再好好检查检查。
您好,您的测试代码能发我一下吗http://qn.aiyashequ.cn/test/0000V.mp4,或者如果您有时间,这个能帮我调试一下吗,非常感谢
对调透明区域和颜色区域你可以参考下,随便写的,只是验证下。
非常感谢您的指导