python ffmpeg模块,python执行ffmpeg
python执行ffmpeg命令
能拿到ffmpeg正常输出
ffmpeg抛出异常时可以拿到异常信息
返回ffmpeg处理进度
以下代码依赖的pexpect,progressbar需要安装下
import pexpect
import subprocess
import progressbar
import logging
def exec_progress(command, video_duration_seconds):
"""
执行ffmpeg命令,并根据ffmpeg输出中的"time=xxx"匹配进度, ffmpeg执行失败时抛出FfmpegException
:param command: ffmpeg命令
:param video_duration_seconds: 视频总时长
"""
thread = pexpect.spawn(command)
cpl = thread.compile_pattern_list([pexpect.EOF,
"frame=.*time=([\d:\.]*)(.*)",
'(.+)'])
progress = progressbar.ProgressBar(max_value=video_duration_seconds).start()
output_list = []
while True:
i = thread.expect_list(cpl, timeout=None)
if i == 0:
progress.finish()
break
elif i == 1:
seconds = duration_to_seconds(thread.match.group(1))
progress.update(seconds)
elif i == 2:
logging.debug(thread.match.group(0))
output_list.append(thread.match.group(0))
pass
thread.close()
if thread.exitstatus:
raise FfmpegException(thread.exitstatus, command, "\n".join(output_list))
def exec_output(command):
"""
执行ffmpeg命令并返回所有输出,如果执行失败,抛出FfmpegException
:param command: ffmpeg命令
:return: ffmpeg标准输出
"""
try:
process = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
return process
except subprocess.CalledProcessError as err:
raise FfmpegException(err.returncode, err.cmd, err.output)
# 这个方法应该单独抽到别的模块
def duration_to_seconds(duration):
time_arr = duration[0:duration.find(".")].split(":")
if len(time_arr) == 3:
return int(time_arr[0]) * 3600 + int(time_arr[1]) * 60 + int(time_arr[2])
logging.error("unrecognized duration %s", duration)
return 0
class FfmpegException(Exception):
"""
使用ffmpeg报错时抛出
"""
def __init__(self, returncode, cmd, output=None):
self.returncode = returncode
self.cmd = cmd
self.output = output
def __str__(self):
return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
简单说明下
exec_progress执行耗时较长需要实时拿到处理进度的场景,如压缩,裁剪等
exec_output执行耗时较短直接拿到输出结果的场景,如获取视频信息等
python ffmpeg模块,python执行ffmpeg相关推荐
- Python os模块 -Python系统编程中的操作模块
Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...
- Python sys模块 - Python零基础入门教程
目录 一.Python sys 模块简介 二.Python sys 模块使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 ...
- Python json模块 - Python零基础入门教程
目录 一.前言 二.python json 模块常用函数 三.json 转 Python 字典 dict 四.Python 字典 dict 转 json 五.关于 json.dump 和 json.l ...
- Python random 模块 - Python零基础入门教程
目录 一.Python random 模块常用函数介绍 二.Python random 模块使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Pyt ...
- Python time 模块 - Python零基础入门教程
目录 一.前言 二.Python time 模块常用函数介绍 三.Python time 模块使用 1.Python time 模块获取时间 2.Python time 模块自定义时间格式 3.Pyt ...
- python发音模块-python声音模块
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 这也是使用 python 标准库的方法,我们可以把写好的一些可复用的函数 ...
- python datetime模块-Python datetime模块使用方法小结
datetime模块 当前日期 datetime.date.today() datetime.date(2020, 4, 24) 转换元祖 >>> datetime.date.tim ...
- python 日志模块--python logbook使用方法
python自带了日志模块logging,可以用来记录程序运行过程中的日志信息.同时python还有logbook模块用来取代logging模块,在很多的项目中logbook模块使用也是比较的多,因此 ...
- python导入模块不执行_python 不执行
[人间也值得] - Mryang带你快速入门第一个 Python 程序 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/kese7952/article ...
最新文章
- android 启动模式_安卓学习笔记之Android中Activity的4种启动模式
- sqlserver on linux
- 四大基本反应类型的关系_初中化学7大反应类型总结,收藏
- k8s组件说明:ETCD存储组件
- Django新建项目
- QNX下挂载USB设备
- 偶尔所得代码片(进程和锁相关)
- i红枣 建议:程序员要多吃点红枣
- java 保存图片_java实现保存文件图片以及读取
- ppt 2 html工具,PPTools PPT2HTML
- idea中算子正确,算子下面有红波浪线,原因分析
- [转载] python bp神经网络 mnist_Python利用全连接神经网络求解MNIST问题详解
- java中整数和字符串间的转换方法
- linux work有关的命令,Linux执行后台work相关
- 28天肝完阿里面试通关宝典,含答案解析
- 如何在EDI系统中查询文件?
- 简单实用口才训练方法集
- 动作捕捉,系数转换,IK 等整理总结
- 如何挑选属于自己的电脑
- 7-5 偶数位特殊序列和 (40分)