ffmpeg再编译使用ffmpeg-gl-transition完整_第1页
ffmpeg再编译使用ffmpeg-gl-transition完整_第2页
ffmpeg再编译使用ffmpeg-gl-transition完整_第3页
ffmpeg再编译使用ffmpeg-gl-transition完整_第4页
ffmpeg再编译使用ffmpeg-gl-transition完整_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ffmpeg再编译使⽤ffmpeg-gl-transition本地虚拟机部署成功路线虚拟环境:Ubuntu7.3.0主要按照此⽂档中:的「LinuxwithoutEGL」路线(原因见问题6),安装GLEW、glfw、xvfb等,重新编译ffmpeg使⽤了配置参数:./configure./configure--enable-nonfree--enable-libass--enable-gpl--enable-libx264--enable-librsvg--enable-libvpx--enable-opengl\--enable-libfdk-aac--enable-libfreetype--enable-libmp3lame--enable-libtheora\--enable-libvorbis--enable-libx265\--enable-libopus--enable-libxvid\--enable-filter=gltransition--extra-libs='-lGLEW-lglfw-lSOIL'glfw安装 需要⽤cmakeglfw使⽤包管理⼯具安装glfw:#Centos#Centosyuminstallglfwglfw-devel#Ubuntusudoapt-getinstalllibglfw3libglfw3-dev#找不到lglfw时,排查与尝试解决:#ldconfig-p|grepglfw#sudoln-s**.so/usr/local/ffmpeg/ffmpeg_build/lib/开发环境可以加上了配置项:./configure--enable-debug--disable-optimizations--disable-asm--disable-stripping,参考⾃:编译安装(sudomake&&sudomakeinstall)完成后,需要运⾏起模拟的显⽰器环境:InstallInstallxvfb:`pkginstallxorg-vfbserver`(系统环境FreeBSD)`aptinstallxvfb`(系统环境Ubuntu)Runxvfb:`Xvfb:1-screen01280x1024x16`Executeffmpeg-gl-transitionexample:`envDISPLAY=:1ffmpeg-imedia/0.mp4-imedia/1.mp4-filter_complexgltransition-yout.mp4`or`envDISPLAY=:1ffmpeg-imedia/0.mp4-imedia/1.mp4-filter_complex"gltransition=duration=4:offset=1.5:source=crosswarp.glsl"-yout.mp4`ffmpeg-opengl-transition注:headlessenvironments是指,此环境下使⽤ 需要运⾏xvfb,来源于:ffmpeg-opengl-transition守护进程、后台运⾏,参考nohupnohupXvfb:1-screen01280x1024x16>/dev/null2>&1&设置环境变量DISPLAY=:1exportDISPLAY=:1设置了环境变量之后,就可以直接使⽤ffmpeg命令的gltransition滤镜了,检查:ffmpeg-hfilter=gltransition##查看OpenGL是否存在,如果返回`Error:couldn'tfindRGBGLXvisualorfbconfig`,跳到问题7DISPLAY=:1glxinfo|grep-iopengl#查看环境变量,是否返回设置的值echo$DISPLAY#查看Xvfb是否运⾏ps-aux|grep-ixvfb76.glsl⼤概有20个左右的效果,直接使⽤以上提供的 ⽂件合成出不来效果,原因参考:,即是⽂件中参数默认值未设置的原因,因为不会.glsl出现报错,所以没有效果的时候就⽐较难排查原因。可以⼿动修改glsl⽂件设置变量的值:uniform删掉 关键字,设置属性值,如:uniform##indiplacement.glsl:uniformfloatstrength;//=0.5floatstrength0.5//改成这样另外有⼀些如luma.glsl、displacement.glsl等的效果还需要额外的纹理图⽚资源才能处理出效果,可通过下⾯的魔改版「使⽤额外的纹理图⽚」内容解决。TVStatic.glsl特别的 会报着⾊器数据类型错误,通过⼿动修改glsl⽂件解决:TVStatic.glsloffset设置 的值offsethighp删除精度字符highp(300k2000k)搜索出的办法(出处忘了):怀疑是环境变量未配置,在怀疑是环境变量未配置,在~/.profile中最后⼀⾏增加exportPATH="/usr/lib64:$PATH"来配置环境变量将so库所在的⽬录/usr/lib64写⼊到/etc/ld.so.conf中,然后执⾏sudoldconfig或者创建软链:sudosudoln-s**.so/usr/lib/OpenGL命令需要加上命令需要加上Runxvfb时对应的标识:此处为:1即:DISPLAY=:1glxinfo|grepiopengl如何快速测试所有的过场效果?#!/usr/bin/env#!/usr/bin/envbash#Exampleofconcatenating2mp4stogetherwith1-onetransitionsbetweenthem.envDISPLAY=:1/usr/bin/ffmpeg-i/home/vagrant/code/video_maker/public/media/0.mp4-i/home/vagrant/code/video_maker/public/media/1.mp4-filter_complex"gltransition=duration=3:offset=1:source=/home/vagrant/code/video_maker/public/transitions/"$1".glsl"-loglevel24-y/home/vagrant/code/video_maker/public/media-transition/$1.mp4#path=$1#files=$(ls$path)#forfile_ain$files#dotemp_file=`basename$file_a`#echo`envDISPLAY=:1/usr/bin/ffmpeg-i/home/vagrant/code/video_maker/public/media/0.mp4-i/home/vagrant/code/video_maker/public/media/1.mp4-filter_complex"gltransition=duration=3:offset=1:source=/home/vagrant/code/video_maker/public/transitions/"$temp_file-loglevel24-y/home/vagrant/code/video_maker/public/media-transition/$temp_file.mp4`#doneIssues⼤部分遇到的问题都可以在这的 ⾥找到参考。IssuesLinuxwithEGL编译安装尝试过 的路线,因为有这句话「WedefaulttoEGLratherthanGLXonLinuxtomakeiteasiertoLinuxwithEGLheadlesssoxvfbisnolongerneeded.」。然⽽,装好之后合成的视频全⿊(编译安装以及合成信息⽆报错或警告)。报错:Operationnotpermitted,通过上⾯的「排查环境是否设置成功」排查11、可能因为未运⾏Xvfb:$nohupXvfb:1-screen01280x1024x16>/dev/null2>&1&2、可能环境变量DISPLAY未设置DISPLAY=:1glxinfo|grep-iopengl7.ffmpeg运⾏报错setup_glERRORFailedtoconfigureinputpadonParsed_gltransition_0时,且命令 返回Error:couldn'tfindDISPLAY=:1glxinfo|grep-iopenglyumyuminstallmesa*yuminstallfreeglut*魔改并且

GL_RGBGL_RGBA全替换为GL_RGBGL_RGBAglPixelStoreiquery_formats参数修改,原glPixelStoreiquery_formats

***/3fromFrame->linesize[0]/4query_formats改成***/4***/3fromFrame->linesize[0]/4query_formats将

⽅法替换为(参考⾃官⽅filterffmpeg-4.2.4/libavfilter/vf_rotate.c的

⽅法):GL_RGBPIXEL_FORMATc->pix_fmt删除设置项#definePIXEL_FORMAT(GL_RGB),将 和 全替换为GL_RGBPIXEL_FORMATc->pix_fmtGLTransitionContext在结构体 增加属性值:GLTransitionContextintintalpha;//输⼊值设置通道属性//判断通道值intpix_fmt;intchannel_num;query_formats⽅法 改为:query_formatsstaticstaticintquery_formats(AVFilterContext*ctx){staticconstenumAVPixelFormatpix_fmts[]={AV_PIX_FMT_RGB24,AV_PIX_FMT_BGR24,AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR,AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,AV_PIX_FMT_NONE};AVFilterFormats*fmts_list;fmts_list=ff_make_format_list(pix_fmts);if(!fmts_list){returnAVERROR(ENOMEM);}returnff_set_common_formats(ctx,fmts_list);}增加透明属性:staticconstenumstaticconstenumAVPixelFormatalpha_pix_fmts[]={AV_PIX_FMT_ARGB,AV_PIX_FMT_ABGR,AV_PIX_FMT_RGBA,AV_PIX_FMT_BGRA,AV_PIX_FMT_NONE};setup_gl在⽅法 中增加判断:setup_glcc->alpha=ff_fmt_is_in(inLink->format,alpha_pix_fmts);av_log(ctx,AV_LOG_DEBUG,"c->alpha:%d,inLink->format:%d\n",c->alpha,inLink->format);//getalphainfoif(c->alpha){c->pix_fmt=GL_RGBA;c->channel_num=4;}else{c->pix_fmt=GL_RGB;c->channel_num=3;}glPixelStorei⽅法glPixelStorei

的参数修改,原

改成***/c->channel_num,如***/3fromFrame->linesize[0]/***/3fromFrame->linesize[0]/c->channel_num⽬前⽬标是⽀持上⼀个额外的纹理图⽚,图⽚路径可输⼊。SOIL安装 来加载图⽚:SOILgitgitclone/kbranigan/Simple-OpenGL-Image-Library.gitcdSimple-OpenGL-Image-Librarysudomakesudomakeinstall./configure加上--extra-libs='-lSOIL'vf_gltransition.c⽂件 头部加上:vf_gltransition.c##include<SOIL.h>GLTransitionContext结构体 加上:GLTransitionContextcharchar*extra_texture;//注意与下⾯的属性区分GLuintextra_tex;//⽣成纹理需要⽤到,参考fromgltransition_options输⼊项说明 加上:gltransition_options......{"extra_texture","pathtothegl-transitionextra_texturefile",OFFSET(extra_texture),AV_OPT_TYPE_STRING,{.str=NULL},CHAR_MIN,CHAR_MAX,FLAGS},...setup_tex⽅法 增加:setup_tex......if(c->extra_texture){//extra_textureintwidth,height,soilPixFmt;soilPixFmt=SOIL_LOAD_RGB;if(c->pix_fmt==GL_RGBA){soilPixFmt=SOIL_LOAD_RGBA;}unsignedchar*image=SOIL_load_image(c->extra_texture,&width,&height,0,soilPixFmt);glGenTextures(1,&c->extra_tex);glActiveTexture(GL_TEXTURE0+2);glBindTexture(GL_TEXTURE_2D,c->extra_tex);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,0,c->pix_fmt,width,height,0,c->pix_fmt,GL_UNSIGNED_BYTE,image);glUniform1i(glGetUniformLocation(c->program,"extra_tex"),2);SOIL_free_image_data(image);}使⽤前⼯作:glsl修改 ⽂件,如displacement.glsl,将其中的glsl

以及着⾊器中的

改为uniformuniformsampler2DdisplacementMap;displacementMapsampler2Duniformsampler2DdisplacementMap;displacementMapglsltexture_dir/texture.png获取 ⽂件⽬录,如glsltexture_dir/texture.pngffmpegff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论