Похоже, что не все видео имеют одинаковую высоту и ширину. Я не уверен, потому что это было какое-то время, но при использовании масштабирования по ширине или высоте, если все видео, которые вы используете, не имеют одинаковую высоту и ширину, вещи могут выглядеть неестественно, как, например, ваше указание ffmpeg разместить что-то там, где оно не может. Некоторые видео будут работать, когда математика верна, а когда нет, вы получите ошибки.
Я бы использовал ffprobe, чтобы получить размеры видео.
import os
import json
import subprocess
def getVidInfo(videoPath):
'''This function gets json data from ffprobe'''
# print vPath
if os.path.exists(videoPath):
command = ['ffprobe', '-loglevel', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', videoPath]
pipe = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out, err = pipe.communicate()
if not err is None:
print 'err = '+str(err)
return json.loads(out)
## This was taken from an old python2.7 project so you might need to
## get proper keys if these dont work.
vidJson = getVidInfo('pathToYourVideo')
vWidth = vidJson['streams'][0]['width']
vHeight = vidJson['streams'][0]['height']
Затем сделайте математику из полученных размеров видео для вызова ffmpeg. В любом случае, это то, где я бы начал.