如何在ffmpy中使用变量(FFmpeg的python包装器)?

时间:2017-12-29 20:00:55

标签: python video ffmpeg

我想问一下如何在ffmpy中使用变量(FFmpeg的Python包装器)。

确切地说:我想使用变量来裁剪视频。 FFmpeg命令是:

ffmpeg in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

https://ffmpeg.org/ffmpeg-filters.html#crop

要在Python / ffmpy中使用它,我写了这些代码:

from ffmpy import FFmpeg
import ffmpy

# define the variables
out_w = 100
out_h = 120
x = 50
y = 80

inputFile = "F:\\in.avi"
outputFile = "F:\\out.avi"

ff = FFmpeg(inputs = {inputFile: None}, outputs= {outputFile: " -y -filter:v `crop=100:120:50:80'"}) 
#This line works fine.

#Now rewrite the above line using variables...
ff = FFmpeg(inputs = {inputFile: None}, outputs={outputFile: " -y -filter:v `crop=out_w:out_h:x:y'"} ) 
#...It line does not work. I guess it is wrong to use variables in the statement.
#...This is my question. How to write this line using variables? 

ff.cmd
ff.run()

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我可以解决你的问题:

最近我正在尝试运行此命令:

ff = ffmpy.FFmpeg(inputs={inputs: None}, outputs={output: '-ss 0:1:0 -t 0:2:0 -c copy'})

它完美运行。 但从用户的角度来看,输入应由他们提供。

所以我稍微修改了一下命令。

ff = ffmpy.FFmpeg(inputs={input: None}, outputs={output: '-ss %d:%d:%d -t %d:%d:%d -c copy' % (start_hour,start_min,start_sec,end_hour,end_min,end_sec)})

我只是使用%d在我的命令中使用变量(int),它运行完美! 我希望这会有所帮助。

答案 1 :(得分:1)

最新答案,但这可能会对其他人有所帮助。

f-strings为我解决了这个问题。这适用于python 3.6或更高版本。

import ffmpy

# define the variables
out_w = 100
out_h = 100
x = 50
y = 80

#set file locations
inputFile = "F:\\in.avi"
outputFile = "F:\\out.avi"

ff = ffmpy.FFmpeg(
    inputs = {inputFile : None},

    outputs = {outputFile :  f" -y -filter:v crop={out_w}:{out_h}:{x}:{y}" }    
) 
print(ff.cmd) #optional
ff.cmd
ff.run()

输出行中的“ f”告诉python使用f-strings并替换为上面定义的变量。