废话

python目前自己也是在学习当中,对python也不是特别精通,写视频转码这个东西也是自己用的到,所以自己在查阅了一些资料后写的这样一个简单工具,这个工具自己使用就可以了,用到正式环境还是有很多不足的,这个有一些不完善,也希望有懂python的大神可以给完善一下哦。废话不多说了开整。

方法

一开始在想自己去写一个视频转码的工具的时候在想是用PHP写还是用python写,最后选择python是因为在PHP中碰壁了,到现在也没能解决那个问题,PHP写完出现的BUG是在大视频转码时会存在请求超时的问题,到现在也没能解决到这个BUG,试过修改PHP配置文件中的请求时间、缓存等等一些方法都没有解决,真的是快疯掉了,后面再想办法搞一下吧,后面就想着看看Python会不会有这个问题,结果真的没这个问题。
既然是要写思路当然是要考虑怎么去进行视频转码,一开始想的是用Flask框架,最后想想Flask框架最后还是要在网页上访问使用麻烦,不如直接使用windows框直接就转码,直接双击代码搞定多好。最后初步定下来的就是使用python中tkinter模块去弄,直接写一个windows GUI他不香嘛。显示方式有了,后面就是转码了,怎么转码呢?查阅了很多的网站,最后决定采用FFmpeg转码工具,工具选好了后面就是写代码的事情了。后面写的过程中确实又出现了一些问题,就是选用ffmpeg模块还是调用ffmpeg程序呢?本人本身是网络工程师出身,所以对代码很敏感,遇到比较难的就会头疼,我分别查了模块和程序的使用方法,模块我参考的是:【Python】ffmpeg模块处理视频、音频信息这篇文章,说实话写的真不错,就是我看不懂,太深奥了,估计我再学几年python就能看懂了,博主等我哈,千万别删文章。程序我是去官网上看的文档ffmpeg官网,这个倒是挺简单的我倒是能看懂,也发现确实可以进行视频转码,好了有了方法了那后面就是思路了。

思路

其实这个思路也是蛮简单的,无非我想要的就是双击我写的python代码就可以直接弹出一个windows窗口,然后我输入原视频地址或者路径,然后输入一个转码后的名字,然后再弄个转码按钮不就直接可以转码了。没问题思路清晰,下面就是直接开整。

python+tkinter制作窗口

首先我既然要去弄这个窗口,当然我们得知道tkinter这个模块怎么用,下面我总结了一些简单的用法
示例

import tkinter       #导入Tkubter模块
test = tkinter.Tk()
test.mainloop()

执行结果:

这样一个简单的windows窗口就有了,tkinter模块用法有很多,这里就不细说了,下面继续说我们的转码。

首先就是先制作一个windwos窗口然后让我输入一些信息,下面是我写的windows窗口。

import tkinter as tk #导入tkinter模块,并起别名为tkwind=tk.Tk()    #建立顶层控件wind
wind.geometry("800x400")  #设置窗口大小
wind.title("视频转码")    #设置窗口标题title_lab=tk.Label(wind,text="视频转码",font="仿宋 20 bold")    #创建窗格标题内容,字体,颜色
title_lab.place(x=350,y=30)   #设置标题位置textlab=tk.Label(wind, text="请输入视频地址:", font="仿宋 20 bold", fg="blue", width=20) #创建表单名字,并设置字体、颜色、大小
textlab.place(x=0,y=100)  #设置表单名字位置
text_entry=tk.Entry(wind, width=30,font="仿宋 20 bold")  #建立输入的控件entry,也就是表单
text_entry.place(x=300,y=100) #设置控件位置mzlab=tk.Label(wind, text="请输入新视频名称:", font="仿宋 20 bold",fg="blue", width=18) #创建表单名字,并设置字体、颜色、大小
mzlab.place(x=0,y=200)    #设置表单名字位置
mz_entry=tk.Entry(wind, width=30,bg="white",font="仿宋 20 bold")  #建立输入的控件entry,也就是表单
mz_entry.place(x=300,y=200)   #设置控件位置btn=tk.Button(wind,text="提交", font="仿宋 20 bold", fg="blue", width=8)  #设置提交按钮,并设置字体样式、大小
btn.place(x=350,y=300)    #设置按钮位置
wind.mainloop() #窗口的消息循环

最后效果图:

显示写出来了,后面该弄功能了

ffmpeg转码

在写功能之前首先得学习ffmpeg怎么用,不然的话功能也写不出来

1. ffmpeg工具软件

首先我们需要下载ffmpeg工具,下面是下载地址,下载的速度还算比较快,如果有觉的下载慢的,可以私聊我,我把软件包发给大家或者直接在我的资源里面下载也行
FFmpeg官网地址: https://www.ffmpeg.org/
FFmpeg下载地址: https://www.ffmpeg.org/download.html

2. 使用方法

语法:

ffmpeg -i 源文件路径及文件名称 转码后文件路径及名称

示例:

ffmpeg -i D:\test\abc.flv    D:\test\abc.mp4

实现就是这么简单,建议大家现在系统命令行中先测试下这个工具,看看能不能达到大家的要求,大家要是想了解ffmpeg的全部用法可以去官网文档上面查看

python调用ffmpeg

其实相当简单,只需要在python导入OS模块就可以了,下面直接上代码

import os
dir = os.getcwd()
#获取当前文件路径,因为我这里把ffmpeg工具放到了代码路径,所以需要获取一下当前路径,这个根据大家实际情况写
dir2 = '/windows-ffmpeg/x64/ffmpeg.exe'  #ffmpeg具体位置
ff = dir+dir  #组合路径
result = eval(repr(ff).replace('\\','/'))
#转换反斜杠为斜杠,因为获取到的路径是反斜杠的,需要转换成斜杠,转换后会发现是双斜杠,所以需要下面再转换下
ff = result.replace('//','/')  #双斜杠转为但斜杠
cmd = ff +' -i '+'D:\test\abc.flv' +' -c copy ' + 'D:\test\abc.mp4'
#写需要执行的命令
os.system(cmd)  #执行系统命令,也就是进行转码

OK,执行上面代码直接进行转码,这里需要注意的是路径位置一定要对哦!
窗口有了,功能有了,那后面就是拼接了

成果

废话不多说直接上结果:

import tkinter as tk
import oswind=tk.Tk()
wind.geometry("800x400")
wind.title("视频转码")    title_lab=tk.Label(wind,text="视频转码",font="仿宋 20 bold")
title_lab.place(x=350,y=30)   textlab=tk.Label(wind, text="请输入视频地址:", font="仿宋 20 bold", fg="blue", width=20)
textlab.place(x=0,y=100)
text_entry=tk.Entry(wind, width=30,font="仿宋 20 bold")
text_entry.place(x=300,y=100) mzlab=tk.Label(wind, text="请输入新视频名称:", font="仿宋 20 bold",fg="blue", width=18)
mzlab.place(x=0,y=200)
mz_entry=tk.Entry(wind, width=30,bg="white",font="仿宋 20 bold")
mz_entry.place(x=300,y=200)#下面是引用了一个执行转码的方法,并声明执行结果
def getTextInput(): lianjie = text_entry.get()mz = mz_entry.get()mz = mz + '.mp4'ff = '/windows-ffmpeg/x64/ffmpeg.exe'ff1 = os.getcwd()ff = ff1+ffresult = eval(repr(ff).replace('\\','/'))ff = result.replace('//','/')cmd = ff +' -i '+lianjie+' -c copy '+mzif os.system(cmd) == 0:     #判断执行结果并进行转码test1=tk.Tk()  test1.geometry("200x100") test1.title("")   title_lab=tk.Label(test1,text="视频转码成功",font="仿宋 20 bold")    title_lab.place(x=0,y=0)  test1.mainloop()else:test2=tk.Tk() test2.geometry("200x100") test2.title("")   title_lab=tk.Label(test2,text="视频转码失败",font="仿宋 20 bold")    title_lab.place(x=0,y=0)  test2.mainloop()btn=tk.Button(wind,text="提交", font="仿宋 20 bold", fg="blue", width=8,command=getTextInput)   #将信息提交给上面的getTextInput方法
btn.place(x=350,y=300)
wind.mainloop()

双击python文件的话会出现两个窗口,一个是用来输入信息的窗口一个是用来显示报错信息的窗口,这个工具有待完善,希望有会python的大神可以完善下


注意:这个工具需要注意的是如果你不想改代码直接用的话,就直接把ffmpeg工具和你的代码文件放到一起,还有如果你不写转码后文件路径默认会保存到存放代码文件的地方
源代码上传到了我的资源里面,资源地址:https://download.csdn.net/download/KH_FC/16719873

python+ffmpeg视频转码转格式相关推荐

  1. FFmpeg 视频转码m3u8格式 使用基本方法

    首先了解一下为什么使用m3u8格式, 一般我们视频格式都是MP4 或者AVI 但是在使用播放器播放时候需要考虑 mp4的关键帧元素往往很大,需要加载很长时间才能开始播放,网速不好的情况缓冲加载时间过长 ...

  2. Android FFmpeg视频转码并保存到本地

    本文讲述在Android中, 如何将FFmpeg视频转码为YUV格式并保存到本地. 首先,我们基于上一篇文章 基于Android Studio3.2实现ffmpeg最简单的例子 来进行配置. 配置好之 ...

  3. java用ffmpeg转码_java运用FFMPEG视频转码技术.doc

    java运用FFMPEG视频转码技术 基于windows系统安装FFMPEG转码技术 软件特点: 被转视频基本不失真(支持超清.高清.标清): 转码速度比较现成转码软件快非常多(不管文件有多大,此软件 ...

  4. nodejs+ffmpeg视频转码

    nodejs+ffmpeg视频转码 const context = require("../core/node_core_ctx"); const {spawn,exec} =re ...

  5. javaweb中ffmpeg视频转码h264出现卡住不执行的解决办法(看到最后面就是答案了)

    郑文亮 专心地钻研编程,每天进步一点点 博客园 首页 新随笔 联系 管理 随笔-1610  文章-3  评论-570  Java+Windows+ffmpeg实现视频转换 最近由于项目需要,研究了一下 ...

  6. 使用GPU硬件加速FFmpeg视频转码

    最近看了些视频处理相关的文章,这里有一篇是讲如何使用Nvidia显卡为视频的编解码进行加速的, 为了方便查阅就转载了: 本文内容包括: 在Linux环境下安装FFmpeg 通过命令行实现视频格式识别和 ...

  7. Linux使用shell定时任务实现ffmpeg视频转码和截图

    最近将.net core系统从windows 环境下迁移到linux中,使用docker容器部署.但是系统中使用了ffmpeg做视频转码和截图.在windows中只需要知道ffmpeg.exe的文件位 ...

  8. C#调用Process执行ffmpeg视频转码七分钟后就假死了

    问题描述 ffmpeg -i /wzfgs_img_storage/tuku.img_linux/upload/20210421_164313_803_a2a2.mov -vcodec h264 /v ...

  9. 解决ffmpeg视频转码后视频清晰度下降的问题

    清晰度 Chrome不支持非h264编码的mp4视频播放,可通过ffmpeg将视频转码成h264编码: ffmpeg -i input.mp4 -vcodec h264 -b:v 0 output.m ...

  10. python ffmpeg 视频转图片 视频转音频 播放音频 多张图片+音频转视频 多个视频合成一个视频 改变视频播放速度

    文章目录 视频转图片 视频转音频 播放音频 图片+音频 转 视频 多个视频合成一个视频 改变视频播放速度 视频转图片 #!/usr/bin/env python # -*- encoding: utf ...

最新文章

  1. iOS 设置UILabel 的内边距
  2. 代码实践 | CVPR2020——AdderNet(加法网络)迁移到检测网络(代码分享)
  3. 【Android】Android中使用JNI调用底层C++代码
  4. 实现php a标签文件,HTML_如何点击a标签实现弹出input file上传文件对话框,html 复制代码代码如下: SPAN - phpStudy...
  5. 搭建“双11”大型网站架构必须掌握的 5 个核心知识
  6. Python—UnicodeEncodeError: 'ascii' codec can't encode/decode characters
  7. 2020 我的C++学习之路 C++PrimerPlus第六章课后习题
  8. Linux下ntpdate时间同步
  9. adb安装apk报错Failure [INSTALL_FAILED_INVALID_URI]
  10. hdu 1325 Is It A Tree?
  11. 2006最新版个人所得税计算器
  12. 利用SmsManager发送短信
  13. matlab costas环,MATLAB写COSTAS环的问题。
  14. kafka消息堆积及分区不均匀的解决方案
  15. 整数划分问题将正整数n表示成一系列正整数之和
  16. 6D 位姿估计 位姿测量 常用方法总结 (适用于单目标场景)
  17. UR5双臂Gazebo仿真(Python)
  18. python有趣的案例_爬虫 (十九) 有趣的例子认识 while 循环 (十)|python爬虫|python入门|python教程...
  19. 苹果净利润同比下滑19%,大中华区下滑30%;养老基金将入股市投资,首批可能达2000亿元
  20. unity资源包导入错误 Failed to import package with error Couldnt decompress package

热门文章

  1. git 报错:unable to access “http://gitlab.tydic.com:7666/tx-preformance/tx……“解决方法
  2. 金邦达:做最值得客户尊重的IC卡项目服务商
  3. 为什么对方的QQ邮箱收不到我QQ邮箱发的邮件?
  4. 《概率论》大学课堂笔记——高分笔记,考试复习专用
  5. 嵌入式系统开发笔记10:CJ/T-188 水表协议解析2
  6. 分期付款“名义利率”和“实际利率”的公式及其套路
  7. REST-assured接口测试框架详解
  8. [Maven实战-许晓斌]-[第二章]-2.7-2.8 Mave安装的最优建议和安装小结
  9. 洛谷P2440 木材加工
  10. WPF桌面应用实例(二):写一个扫雷游戏