我在OSX上的python 2.7中已经正常运行的ffmpeg命令的前面添加了FFREPORT命令,这是重定向报告日志文件,但出现错误,无法弄清楚如何解决它。

这是命令:

command = 'FFREPORT="level=48:file=/Users/myself/Desktop/TESTFFMPEGOUTPUT.txt" /Users/myself/Desktop/Python/ffmpeg/ffmpeg -i /Volumes/GRAID/TestInput.mov /Volumes/GRAID/TestOutput.mov'

self.process1 = Popen(shlex.split(command), shell=False)


这给了我错误:

    raise child_exception
    OSError: [Errno 2] No such file or directory


更新:

我现在将其更改为合并以下答案,但是又遇到了另一个问题。我需要将日志文件的路径作为变量,所以正在尝试:

ffreportCommand = 'FFREPORT=level=48:file=' + self.logFilePath
self.process1 = Popen(shlex.split(command), shell=False, env=dict(ffreportCommand))


但是正在收到以下错误:

self.process1 = Popen(shlex.split(command), shell=False, env=dict(ffreportCommand))
ValueError: dictionary update sequence element #0 has length 1; 2 is required


更新:
固定于:

ffreportCommand = "level=48:file=" + self.logFilePath
self.process1 = Popen(shlex.split(command), shell=False, env=dict(FFREPORT='%s' % ffreportCommand))

最佳答案

FFREPORT是环境变量。因此,在调用env时使用the Popen parameter进行设置:

command = '/Users/myself/Desktop/Python/ffmpeg/ffmpeg -i /Volumes/GRAID/TestInput.mov /Volumes/GRAID/TestOutput.mov'

self.process1 = Popen(
    shlex.split(command), shell=False,
    env=dict(FFREPORT="level=48:file=/Users/myself/Desktop/TESTFFMPEGOUTPUT.txt"))




如果您希望基于变量构建字典,则可以使用

ffreport = "level=48:file={}".format(self.logFilePath)
self.process1 = Popen(shlex.split(command), shell=False,
                      env=dict(FFREPORT=ffreport))




顺便说一句,dict(A=val)等效于{'A':val}。所以另一种选择是

self.process1 = Popen(shlex.split(command), shell=False,
                      env={'FFREPORT':ffreport})

10-06 05:44