版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年C2科目一考试完整题库(含答案解析)
- 2026年尼龙新材料聚合工艺巡检人员考核题库解析
- 公路隧道监理实施细则
- 2026年河南省新初一新生入学分班考试英语模拟试卷含答案
- 《秋天的色彩》教案-2026-2027学年湘美版(新教材)小学美术四年级上册
- 石油开采与炼制操作手册
- 柜面操作与风险管理手册
- 加气墙面防裂基层处理施工方案
- 2025-2026年按摩推拿理疗师专业理论测试题库
- 新疆昌吉州第一中学2026-2027学年高三上学期开学考试语文试题B卷(含答案)
- 2026年国考海关系统专业知识模拟试题及答案解析
- 2026-2027学年江苏省常州市度七年级数学上学期期中考试试题(含答案)
- GB/Z 181.1-2026液压传动元件的再制造第1部分:通用技术规范
- 2026年驾照补考科目一考试题库及答案
- 村干部笔试题库及答案
- 2026-2030中国他汀类行业市场发展趋势与前景展望战略研究报告
- 2026年度医师定期考核【执业-7】
- 2026年国企纪检监察岗位面试题含答案
- (2025版)《宿迁市养犬管理条例》学习与解读
- (正式版)DB42∕T 489-2026 《预应力混凝土管桩及空心方桩技术规程》
- 2026年海南省公开遴选公务员综合能力测试笔试题及答案
评论
0/150
提交评论