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相关推荐

  1. Python os模块 -Python系统编程中的操作模块

    Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...

  2. Python sys模块 - Python零基础入门教程

    目录 一.Python sys 模块简介 二.Python sys 模块使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 ...

  3. Python json模块 - Python零基础入门教程

    目录 一.前言 二.python json 模块常用函数 三.json 转 Python 字典 dict 四.Python 字典 dict 转 json 五.关于 json.dump 和 json.l ...

  4. Python random 模块 - Python零基础入门教程

    目录 一.Python random 模块常用函数介绍 二.Python random 模块使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Pyt ...

  5. Python time 模块 - Python零基础入门教程

    目录 一.前言 二.Python time 模块常用函数介绍 三.Python time 模块使用 1.Python time 模块获取时间 2.Python time 模块自定义时间格式 3.Pyt ...

  6. python发音模块-python声音模块

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 这也是使用 python 标准库的方法,我们可以把写好的一些可复用的函数 ...

  7. python datetime模块-Python datetime模块使用方法小结

    datetime模块 当前日期 datetime.date.today() datetime.date(2020, 4, 24) 转换元祖 >>> datetime.date.tim ...

  8. python 日志模块--python logbook使用方法

    python自带了日志模块logging,可以用来记录程序运行过程中的日志信息.同时python还有logbook模块用来取代logging模块,在很多的项目中logbook模块使用也是比较的多,因此 ...

  9. python导入模块不执行_python 不执行

    [人间也值得] - Mryang带你快速入门第一个 Python 程序 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/kese7952/article ...

最新文章

  1. android 启动模式_安卓学习笔记之Android中Activity的4种启动模式
  2. sqlserver on linux
  3. 四大基本反应类型的关系_初中化学7大反应类型总结,收藏
  4. k8s组件说明:ETCD存储组件
  5. Django新建项目
  6. QNX下挂载USB设备
  7. 偶尔所得代码片(进程和锁相关)
  8. i红枣 建议:程序员要多吃点红枣
  9. java 保存图片_java实现保存文件图片以及读取
  10. ppt 2 html工具,PPTools PPT2HTML
  11. idea中算子正确,算子下面有红波浪线,原因分析
  12. [转载] python bp神经网络 mnist_Python利用全连接神经网络求解MNIST问题详解
  13. java中整数和字符串间的转换方法
  14. linux work有关的命令,Linux执行后台work相关
  15. 28天肝完阿里面试通关宝典,含答案解析
  16. 如何在EDI系统中查询文件?
  17. 简单实用口才训练方法集
  18. 动作捕捉,系数转换,IK 等整理总结
  19. 如何挑选属于自己的电脑
  20. 7-5 偶数位特殊序列和 (40分)

热门文章

  1. Jeff Dean回顾谷歌2021
  2. 2019个嵌入式市场研究,持续的C/C++优势
  3. 2021年大数据Spark(五十三):Structured Streaming Deduplication
  4. centos7 安装Git
  5. Cocos Creator 音频文件Audio的绑定与使用(TypeScript)
  6. 打字游戏--飞机大战
  7. 探索未知种族之osg类生物---器官初始化四
  8. 不同数据类型的处理函数(一)
  9. Linux启动过程分析
  10. ATL的GUI程序设计(3)