import ffmpeg from transformers import Tool class VideoStabilizationTool(Tool): name = "video_stabilization_tool" description = """ This tool stabilizes a video. Inputs are input_path, output_path, smoothing, zoom. Output is the output_path. """ inputs = ["text", "text", "text", "text", "text"] outputs = ["text"] def __call__( self, input_path: str, output_path: str, smoothing: str = "10", zoom: str = "0", shakiness: str = "5", ): ( ffmpeg.input(input_path) .output("null", vf="vidstabdetect=shakiness={}".format(int(shakiness)), f="null") .overwrite_output() .run(capture_stdout=True, capture_stderr=True) ) ( ffmpeg.input(input_path) .output( output_path, vf="vidstabtransform=smoothing={}:zoom={}:input={}".format( int(smoothing), int(zoom), "transforms.trf" ), ) .overwrite_output() .run() ) return output_path