首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Windows上使用Popen (python)的ffmpeg

在Windows上使用Popen (python)的ffmpeg
EN

Stack Overflow用户
提问于 2018-08-21 05:22:25
回答 1查看 1.3K关注 0票数 1

我正在尝试在Popen中使用ffmpeg。我正在尝试的ffmpeg命令在cmd上工作,但在Popen上出现错误。

我使用的是独立的ffmpeg .exe:

代码语言:javascript
复制
ffmpeg -f gdigrab -offset_x 10 -offset_y 20 -show_region 1 -i desktop -video_size 1536x864 -b:v 2M -maxrate 1M -bufsize 1M -tune fastdecode -crf 15 -preset ultrafast -pix_fmt yuv420p -r 25 <path>/video.mov -qp 1 -y -an

这给了我Invalid argument,但是如果我删除最后一个参数以使输出成为字符串上的最后一件事,我会得到一个不同的错误:

Output file #0 does not contain any stream

我尝试使用-f dshow -i video="UScreenCapture"而不是gdigrab,但两者最终都给了我相同的错误,无论是否使用参数。

这两个命令在命令行上都有效。

在命令行上,此ffmpeg -list_devices true -f dshow -i dummy返回以下内容:

代码语言:javascript
复制
[dshow @ 000001b24fa6a300] DirectShow video devices (some may be both video and audio devices)
[dshow @ 000001b24fa6a300]  "Integrated Webcam"
[dshow @ 000001b24fa6a300]     Alternative name "@device_pnp_\\?\usb#vid_1bcf&pid_2b8a&mi_00#6&2c03619a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 000001b24fa6a300]  "UScreenCapture"
[dshow @ 000001b24fa6a300]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\UScreenCapture"
[dshow @ 000001b24fa6a300] DirectShow audio devices
[dshow @ 000001b24fa6a300]  "Microphone (Realtek Audio)"
[dshow @ 000001b24fa6a300]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{35EBFC89-7B09-4557-8032-85AA0B688FE9}"

但是在popen上我不能检查它:

-list_devices true -f dshow -i dummy: Invalid argument

对于代码中的python部分,我使用以下代码:

代码语言:javascript
复制
p = subprocess.Popen([getPathForFile("windows/ffmpeg").replace('\\','/'),  " -f gdigrab -offset_x 10 -offset_y 20 -show_region 1 -i desktop -video_size 1536x864 -b:v 2M -maxrate 1M -bufsize 1M -tune fastdecode -crf 15 -preset ultrafast -pix_fmt yuv420p -r 25 -qp 1 -y -an "+ path.replace('\\\\','/').replace('\\','/')+"video.mov"], shell=True)

getPathForFile是一个返回路径的自定义函数。这是正确的,主要是因为我得到的错误来自ffmpeg,所以...

我使用的是Windows10. FFmpeg 4.0。Python 3.5。

你知道为什么我在Popen上得到这些错误,而不是在命令行上,以及如何修复它们吗?(主要是第二个错误)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 06:25:35

将每个参数放入其自己的字符串中,并关闭shell。如下所示:

代码语言:javascript
复制
import subprocess
import os

cmd = ["-f", "gdigrab", "-offset_x", "10", "-offset_y", "20",
    "-show_region", "1", "-video_size", "1536x864", "-i", "desktop",
    "-b:v", "2M", "-maxrate", "1M", "-bufsize", "1M", "-tune", "fastdecode",
    "-preset", "ultrafast", "-pix_fmt", "yuv420p",
    "-r", "25", "-qp", "1", "-y", "-an",
    os.path.join(path, "video.mov")]

p = subprocess.Popen([getPathForFile("windows/ffmpeg")]+cmd)
p.communicate()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51938671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档