我想问一下如何在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()
感谢您的帮助!
答案 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并替换为上面定义的变量。