python直接调用ffmpeg

ffmpeg是一个强大的开源命令行多媒体处理工具。关于ffmpeg的安装问题,可以看之前发的《ffmpeg的安装和简单使用》。ffmpeg如此强大,那么能不能用python调用并实现它的所有功能呢,答案自然是肯定的。

要实现在python中调用ffmpeg,需要了解一下subprocess模块。简单来说,subprocess模块就相当于一个包壳的命令行,原则上可以在命令行中实现的事情都可以使用subprocess在python中实现。ffmpeg的调用当然不在话下。

最简单的使用:

import subprocess
subprocess.Popen(
    '"D:\python_work\Jamtools/bin/ffmpeg"  -thread_queue_size 16 -f gdigrab -i desktop -vcodec libx264 "D:/图片/视频/Jam_screenrecord/test.mp4" -y', 
    shell=True)

上面的代码实现了python内使用ffmpeg抓屏的功能,主要使用了subprocess的Popen类。

该类第一个参数是要输入的命令,和你在cmd命令行或powershell中输入的完全一样,要用引号括起来(是一个字符串)"D:\python_work\Jamtools/bin/ffmpeg"是我的ffmpeg的路径,如果你已经把ffmpeg添加进了系统环境变量,可以直接用ffmpeg代替;
然后第二个参数shell=True,表示可以在python的命令行中看到输出;

这样写的时候,你会发现一运行就开始录屏了!而且,停止不了??!
别急,我们先复习一下,ffmpeg在普通命令行中是怎么中止的,是直接按键盘上的‘q’键对不对(直接X掉命令行的当我没说( ̄▽ ̄)")。有没有办法在subprocess里实现接受用户输入呢,当然是可以的!

要在subprocess接受用户输入,就需要用到subprocess的PIPE(管道)了,PIPE是什么可以先了解一下,不了解也无所谓(会用就行)。如果说subprocess是一个包壳的命令行,PIPE就相当于这个命令行的输入(键盘)、输出(显示)。

话不多说,直接上代码:

import subprocess
import time

ffmpeger=subprocess.Popen(
    '"D:\python_work\Jamtools/bin/ffmpeg"  -thread_queue_size 16 -f gdigrab -i desktop -vcodec libx264 "D:/图片/视频/Jam_screenrecord/test.mp4" -y', 
    shell=True, stdin=subprocess.PIPE)
    
time.sleep(2)
ffmpeger.stdin.write('q'.encode("GBK"))
ffmpeger.communicate() 

上述代码把Popen类实例化为ffmpeger对象,运行后录屏2秒后,将通过subprocess的PIPE(实例化为stdin)输入q停止录屏。

subprocess的PIPE还可以实现把命令行中的输出读取出来,这在ffmpeg运行分析中非常重要,例如使用ffmpeg列取设备时我们可以用

ffmpeg -list_devices true -f dshow -i dummy 

在这里插入图片描述
然后通过它的输出来得知设备名称等。subprocess中可以通过管道的stderr接口获得上图中命令行的输出,分析即可得到设备名称!
例:

ffmpeger=subprocess.Popen(
    '"D:\python_work\Jamtools/bin/ffmpeg" -list_devices true -f dshow -i dummy', 
    shell=True, stdin=subprocess.PIPE,stderr=subprocess.PIPE, encoding='utf-8')
    
relog = ffmpeger.stderr.read()
print(relog)

其中我们通过stderr.read()把输出(格式为字符串)存在relog中,就可以通过普通的字符串分析获取输出内容了。

总结

要使用python调用ffmpeg,可以直接使用套壳命令行模块subprocess,用法和命令行中的使用几乎一样(至于ffmpeg的命令…太多了…像录屏、音视频压缩、音视频裁剪、音视频混合等等…建议需要什么功能就去搜好吧,这里不能一一演示…使用方法都差不多)

by the way

我已经把ffmpeg录屏、格式转换等功能集成到我的小工具Jamtools中了,除了截屏、录屏、还有多种语言翻译、识图、按键录制播放、聊天机器人等功能,软件主体采用pyqt构建,完全免费,正在逐步开源中,欢迎使用(禁止进行贩卖或二次开发)
windows版本下载地址
macos版本
ubuntu版本
Jamtools的github项目地址

JamTools一个小工具集,包含了截屏、录屏、文字识别、多媒体格式转换、鼠标键盘动作录制播放、局域网文件传输、聊天机器人等功能,完全开源!

在这里插入图片描述
在这里插入图片描述

  • 50
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fandes_F

饿饿~饭饭~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值