在python中运行cmd(ffmpeg)

Coo*_*rab 5 python cmd ffmpeg

Atm我把它作为我的代码,第一行似乎运行良好,但第二行给出了错误.

os.chdir('C://Users/Alex/Dropbox/code stuff/test')
subprocess.call(['ffmpeg', '-i', 'test%d0.png', 'output.avi'])
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
  File "C:\Users\Alex\Dropbox\code stuff\solarsystem.py", line 56, in <module>
    subprocess.call(['ffmpeg', '-i', 'test%d0.png', 'output.avi'])
  File "C:\Python27\lib\subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 711, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 948, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)

Coo*_*rab 12

对于寻找答案的后代,这很有效.(你必须用空格分隔命令.)

import os
import subprocess
os.chdir('C://Users/Alex/')
subprocess.call(['ffmpeg', '-i', 'picture%d0.png', 'output.avi'])
subprocess.call(['ffmpeg', '-i', 'output.avi', '-t', '5', 'out.gif'])
Run Code Online (Sandbox Code Playgroud)

  • 你在说什么空间?`subprocess.call()` 里面是一个列表。我看到字符串“”空间内没有空格...?'` (2认同)

Rol*_*ith 7

最好subprocess.call用另一种方式调用。

首选方式是:

subprocess.call(['ffmpeg', '-i', 'test%d0.png', 'output.avi'])
Run Code Online (Sandbox Code Playgroud)

或者:

subprocess.call('ffmpeg -i test%d0.png output.avi', shell=True)
Run Code Online (Sandbox Code Playgroud)

您可以在手册中找到原因。我引用:

所有调用都需要 args 并且应该是字符串或程序参数序列。提供参数序列通常是首选,因为它允许模块处理任何需要的参数转义和引用(例如,允许文件名中的空格)。如果传递单个字符串,则 shell 必须为 True(见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。


ant*_*nod 5

我知道这个问题已经很老了,但是现在 Python 中有一个出色的 ffmpeg 包装器: ffmpeg-python您可以在https://github.com/kkroening/ffmpeg-python找到它

有了它,命令可以这样实现:

import ffmpeg
ffmpeg
    .input('test*.png', pattern_type='glob')
    .output('output.avi')
    .run()
Run Code Online (Sandbox Code Playgroud)