Skip to content

Instantly share code, notes, and snippets.

@TuxPenguin09
Last active April 3, 2022 12:42
Show Gist options
  • Save TuxPenguin09/23a6686d2af647034d91dd40a7e1c3ed to your computer and use it in GitHub Desktop.
Save TuxPenguin09/23a6686d2af647034d91dd40a7e1c3ed to your computer and use it in GitHub Desktop.
FFMPEG Python All Quality Script
import ffmpeg
rawVideoFile = './input/raw'
outputFolder = './output/'
LimitQuality = 0 # 0 - Default
bitrateMultiply = 2000
audioBitrate = 42000000
AllowFLVExport = False
class MainQualityFiles:
def q2160p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 2160)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '2160p.mp4', format='mp4', vcodec="libx264", video_bitrate=2160*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def q1440p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 1440)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '1440p.mp4', format='mp4', vcodec="libx264", video_bitrate=1440*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def q1080p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 1080)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '1080p.mp4', format='mp4', vcodec="libx264", video_bitrate=1080*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def q720p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 720)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '720p.mp4', format='mp4', vcodec="libx264", video_bitrate=720*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def q480p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 480)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '480p.mp4', format='mp4', vcodec="libx264", video_bitrate=480*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def q360p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 360)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '360p.mp4', format='mp4', vcodec="libx264", video_bitrate=360*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def q144p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 144)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '144p.mp4', format='mp4', vcodec="libx264", video_bitrate=114*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
class FLVQualityFiles:
def q720p():
rawfile = ffmpeg.input(rawVideoFile)
audio = ffmpeg.input(rawVideoFile).audio
video = rawfile.video.filter('scale', -1, 720)
joined = ffmpeg.concat(video, audio, v=1, a=1).node
out = ffmpeg.output(joined[0], joined[1], outputFolder + '720p.flv', format='flv', vcodec="libx264", video_bitrate=720*bitrateMultiply, audio_bitrate=audioBitrate).overwrite_output()
out.run()
def checkResolution():
if (LimitQuality == 0):
loopcount = 0
notdone = True
while(notdone):
try:
prone1 = ffmpeg.probe(rawVideoFile)['streams'][loopcount]['height']
notdone = False
return prone1
except KeyError:
loopcount = loopcount + 1
else:
return LimitQuality
def ManualCheckResolution():
return ffmpeg.probe(rawVideoFile)
def StartExport():
print("Maximum Quality from the raw file is " + str(checkResolution()) + "p")
if (checkResolution() >= 2160):
MainQualityFiles.q2160p()
if (checkResolution() >= 1440):
MainQualityFiles.q1440p()
if (checkResolution() >= 1080):
MainQualityFiles.q1080p()
if (checkResolution() >= 720):
MainQualityFiles.q720p()
if (AllowFLVExport):
FLVQualityFiles.q720p()
if (checkResolution() >= 480):
MainQualityFiles.q480p()
if (checkResolution() >= 360):
MainQualityFiles.q360p()
if (checkResolution() >= 144):
MainQualityFiles.q144p()
if __name__ == "__main__":
StartExport()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment