来源:Python爬虫和数据挖掘
作者:Python进阶者
大家好,我是Python进阶者。
前言做过网店的朋友或多或少都会使用主视频,因为这样可以增加网店产品的曝光率,从而提高店铺产品的成交率。今天,边肖将带你制作这样一件神器。据说网上类似的软件都是收费软件,我们做了以后可以免费使用。
一、项目准备编辑:崇高文本3
音频和视频节目:ffmpeg

模块:tkinter,os,PIL,时间
二、项目目标将多张图片组合成一个带有背景音乐的视频。
三、实验步骤准备图片
大家只要在网上搜一下就可以了。我不需要再说什么了。
2.导入模块
从tkinter导入文件对话框 导入tkinter作为t 从pil导入图像 从tkinter导入消息框 导入os3。制作软件界面
使用Python自带的tkinter模块。我们添加所有必要的组件。
Self.tl=[] #存储图片列表 self . aa = & # 39;'#存储音频的地址 self . fg = OS . path . join(OS . path . expand user(& # 34;~"), '桌面& # 39;)#桌面地址 self . root = t . tk() self . root . title(& # 39;淘宝主图视频生成器v1.0 & # 39)#主界面标题 self . root . icon bitmap(& # 39;1.ico & # 39)#添加主界面标题图片 self . root . geometry(& # 39;700x600 & # 39)# Main接口大小 self . root . attributes(& # 39;-阿尔法& # 39;,0.9) #主界面透明度 self . root . WM _ attributes(& # 39;-topmost & # 39;1) #主界面顶部 self。TT = T. Text(自我。root,width = 75,height = 30) #文本框 #主界面中的所有按钮和部分选项卡部分 self。打开图片文件& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . open _ file) self . B3 = t . Button(self . root,text = & # 39打开音频文件& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . adio) self . B7 = t . Button(self . root,text = & # 39打开文件,批量修改& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . XG) self . b8 = t . Button(self . root,text = & # 39查看照片& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . CK) self . L1 = t . Label(self . root,text = & # 39视频文件名:& # 39;) self . e = t . Entry(self . root) self . B2 = t . Button(self . root,text = & # 39生成主画面视频& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . video) self . B4 = t . Button(self . root,text = & # 39播放音频文件& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . play) self . b5 = t . Button(self . root,text = & # 39清除空文本框的内容& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . close) self . B6 = t . Button(self . root,text = & # 39预览视频内容& # 39;,font =(& # 34;\ ë ë ",13,'bold & # 39),command = self . player) self . L2 = t . Label(self . root,text = & # 39视频分辨率:& # 39;) self.l3=t.Label(self.root,text = & # 39长度:& # 39;) self.e1=t.Entry(self.root,width = 5) self . l4 = t . Label(self . root,text = & # 39宽度:& # 39;) self.e2=t.Entry(self.root,width = 5) self . TT . place(x = 10,y=50) self.b1.place(x=100,y=10) self.l1.place(x=120,y=460) self.e.place(x=200,y=460) self.b2.place(x=200
看起来功能丰富吗?让我们逐一实现它的功能。
4.软件功能的实现过程
1)打开图片文件,打开音频文件。
两个实现步骤差不多,只是改变了打卡文件的类型,我们需要使用tkinter中filedialog模块打开多个文件和打开单个文件的功能。目前图片只支持png和jpg两种后缀。
#选择主视频的图片 AA = file dialog . askopenfilenames(title = & # 39;选择所有主图形文件& # 39;,文件类型=[(& # 39;巴新& # 39;,'巴新& # 39;),('jpg & # 39,'JPG & # 39;),('所有文件& # 39;, '*')]] #提取其后缀用于下一步 aa=self.tl aa[0] #文件名及其路径 #选择音频文件 文件对话框。打开音频文件& # 39;,文件类型=[(& # 39;WAV & # 39,'wav & # 39),('MP3 & # 39,'mp3 & # 39),('所有文件& # 39;, '*')])2)将视频生成期间的日志输出打印到文本框。
ffmpeg生成视频的时候,会有一系列的日志,但是这个日志是popen无法捕获的,所以我们要通过dos capture把它重定向到一个文件,然后我们在把文件的内容读入文本框,所以我们需要这样做:
如果os.path .存在(& # 39;1.txt & # 39):#先判断有没有这个文件 试试: f = open(OS . path . join(self . fg,& # 39;1.txt & # 39),'r & # 39,编码= & # 39;utf-8 & # 39;)#打开文件 除: messagebox . showinfo(title = & # 39;提示& # 39;,message = & # 39-未能成功生成主视频文件-& # 39;)#提示 最后: self . TT . insert(& # 39;插入& # 39;,f . read()+& # 39;n & # 39) self . TT . insert(& # 39;插入& # 39;,'n & # 39) messagebox . showinfo(title = & # 39;提示& # 39;,message = & # 39-成功生成主视频文件- n文件名:% s.mp4 & # 39% self.e.get () f.close () #关闭文件流 else: AF = open(OS . path . join(self . fg,& # 39;1.txt & # 39),'w & # 39)# Create af.close不带此文件()#关闭文件流3)用ffmpeg生成视频
这一步就看你对ffmpeg视频生成的操作步骤掌握的如何了。具体步骤如下:
OS . popen(& # 39;ffmpeg-r 0.3-t 300-I { }/% d . png-I { }-strict-2-f MP4-s { } x { } { } & gt;{ } 2 & gt&1'。format(ab,self.aa,str(self.e1.get()),str(self.e2.get()),os.path.join(self.fg,self . e . get()+& # 39;. mp4 & # 39),os.path.join(self.fg,& # 39;1.txt & # 39)))看到这么长的参数,你肯定很困惑。我一个一个解释。
Ffmpeg是众所周知的。节目名 -r:video frame -t video end event -I后面通常是图片或音频视频名 -strict 2代表标准 -FMMP4视频输出格式 -为aac音频编码设置。&1表示结果输出到标准流,然后输出到文本文件。
5.预览视频
视频生成后,我们可以看到他的视频播放效果。这里我们还是用os的popen方法,可以轻松调用系统视频播放器播放:
OS . popen(self . e . get()+& # 39;. mp4 & # 39)这样就达到了预览视频的效果。
四、项目总结通过ffmpeg的应用,我们可以做出很多有趣的东西。本文旨在教你思路,让你对ffmpeg有更深入的了解,并利用它做出更有价值的软件。








