本文转发来自:https://blog.csdn.net/KH_FC/article/details/115771126

废话

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模块,并起别名为tk

wind=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 os wind=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+ff
result = eval(repr(ff).replace('\\','/'))
ff = result.replace('//','/')
cmd = ff +' -i '+lianjie+' -c copy '+mz if 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. C#实现 ffmpeg视频转码、播放

    近来公司项目要求实现全景相机的视频截取,但是截取的视频需求转码上传.经过研究采用ffmpeg转码,奉上一个详细介绍的博文: 最简单的基于FFMPEG的转码程序 主要是转码的操作过程,能够实现了从相机获 ...

  2. 黄聪:FFmpeg视频转码技巧之-crf参数(H.264篇)

    昨天,有个朋友给我出了个难题:他手上有一个视频,1080P的,49秒,200多兆:要求在确保质量的情况下把文件压缩到10M以内. 这是什么概念呢?按照文件大小10M来计算,码率是:10 x 8 / 4 ...

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

    基于windows系统安装FFMPEG转码技术 http://wenku.baidu.com/link?url=z4Tv3CUXxxzLpa5QPI-FmfFtrIQeiCYNq6Uhe6QCHkU- ...

  4. java ffmpeg视频转码(自测通过)

    import java.io.*; public class VideoTransfer { //ffmepg文件 安装目录 private static String ffmpeg = " ...

  5. Java Web 中使用ffmpeg实现视频转码、视频截图

    Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html  ...

  6. Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  7. Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  8. python+ffmpeg切割视频

    什么是ffmpeg 1.1 简介 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包 ...

  9. PHP+ffmpeg+nginx的配置实现视频转码

    最近项目中需要实现上传视频过程中自动转码MP4格式的功能,想到了用FFmpeg来实现它,但从来没有操作过,查阅了很多资料,遇到了好多问题,现在终于安装成功,觉得应该写下来与人分享一下,以免有人遇到和我 ...

  10. FFmpeg:视频转码、剪切、合并、播放速调整

    原文:https://fzheng.me/2016/01/08/ffmpeg/ FFmpeg:视频转码.剪切.合并.播放速调整 2016-01-08 前阵子帮导师处理项目 ppt,因为插入视频的格式问 ...

随机推荐

  1. Python Pillow(PIL 第三方模块)和 cv2 (opencv第三方模块)对图片的 resize 操作 (缩放图片大小)

    PIL 模块的 resize  操作: 1.  从文件中读取图片,然后  resize  大小: import matplotlib.pyplot as plt import numpy as np ...

  2. CPU利用率为多少时可以兼顾计算效率和时间效率?—— 75% —— 科学计算时如何正确的使用超线程CPU——使用超线程CPU进行计算密集型任务时的注意事项

    2023年12月28日  更新 现在这个AI火热的时代科学计算任务占比越来越大,但是平时使用时也有一些不为人注意的地方需要知道,本文就讨论一下使用超线程CPU时的注意事项. 超线程CPU就是现在的多线 ...

  3. CUDA编译.cu文件报错unsupported GNU version! gcc versions later than 10 are not supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check;

    最近使用cuda11.3编译.cu文件,报错: #error -- unsupported GNU version! gcc versions later than 10 are not suppor ...

  4. [POI2012] PRE-Prefixuffix 题解

    前言 题目链接:洛谷. 题意简述 给出长为 \(n\) 的串 \(\texttt{S}\).求最大的 \(l\) 满足: \[2l \leq n \land \texttt{S}[1 \ldots l ...

  5. 2023 ICPC 香港

    gym 开场发现 E 是传统数据结构题很高兴,不过先跳了.F 知道相邻两段的长度差 \(\le1\),以为最终每段长度只有 \(\lfloor\frac{n}{m+1}\rfloor,\lceil\f ...

  6. sshpass 带密码登陆

    brew install hudochenkov/sshpass/sshpass sshpass -p password ssh -p port user@xxxx.xxxx.xxxx.xxxx

  7. 平衡搜索树-AVL树 图文详解 (万字长文)

    目录 AVL树 AVL树的概念 AVL树节点的定义: AVL树的插入 基本情况分析 平衡因子对应的操作 旋转操作 分析需要旋转的情况 结论 4种旋转操方法与特征 6种双旋平衡因子特征 代码实现 四种旋 ...

  8. armbian指令大全

    修复缺失内容 使用以下命令修复安装时缺失的内容: sudo apt --fix-broken install 使用 aptitude 安装软件 aptitude 是 Debian 及其衍生系统中功能强 ...

  9. c# 复制文件夹内所有文件到另外一个文件夹

    /// <summary> /// 开始转移 /// </summary> /// <param name="sender"></para ...

  10. 一文剖析TCP三次握手、四次挥手

    TCP三次握手四次挥手 问题 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠, ...