Я хотел бы помочь с рефакторингом этого кода, чтобы уменьшить количество проходов, которые ffmpeg должен выполнить для файла.Я полагаю, что создание одной составной команды ffmpeg поможет, но я в некотором роде потерян.
def processVideo(videoFile, venueWatermarkFile, companyWatermarkFile, mp3File=None, m4vFile=None, cropH, cropW, resizeH, resizeW):
if mp3File != "" :
subprocess.call('ffmpeg -y -i ' + videoFile + ' -i ' + audio + ' -filter_complex "[0:v]scale=480:ih*480/iw, crop=480:480, loop=loop=3:size=210, trim=duration=15[video]" -shortest -map "[video]" -map "1:a?" -c:a aac new1.mp4', shell=True)
else :
subprocess.call('ffmpeg -y -i ' + videoFile + ' -i ' + audio + ' -vf "scale=480:ih*480/iw, crop=480:480" new1.mp4', shell=True)
if m4vFile != "":
subprocess.call('ffmpeg -i ' + videoFile + ' -i ' + m4v + ' -filter_complex " [0:v] scale=480:ih*480/iw, crop=480:480 [bg]; [1:v] chromakey=00FF00:similarity=0.2:blend=0.3 [fg]; [bg][fg] overlay=shortest=1 [v] " -map "[v]" -map "0:a?" -f mp4 new1.mp4', shell=True)
subprocess.call('ffmpeg -y -i new1.mp4 -i ' + venueWatermarkFile + ' -filter_complex "overlay=0:0" -codec:a copy new2.mp4', shell=True)
subprocess.call('ffmpeg -y -i new2.mp4 -i ' + companyWatermarkFile + ' -filter_complex "overlay=0:0" -codec:a copy new.mp4', shell=True)
subprocess.call('ffmpeg -y -i new.mp4 new.gif -hide_banner', shell=True)
subprocess.call('ffmpeg -y -i new.mp4 -ss 00:00:00.000 -vframes 1 new.jpg', shell=True)
os.remove("new1.mp4")
os.remove("new2.mp4")
processVideo("video-standard.mp4", "venue-standard.png", "company-standard.png", "clip.mp3", "animation.m4v")