Files
ffmpeg_collection/vp9_discord8MB.py
Elghinnarisa c326143eb8 just updates
2023-03-26 18:32:35 +02:00

74 lines
2.5 KiB
Python

import subprocess
import sys
from pathlib import Path
import os
import re
import math
ffmpeg_location = "D:/FFMPEG/bin/ffmpeg.exe"
ffprobe_location = "D:/FFMPEG/bin/ffprobe.exe"
output_folder_name ="/bulk_convert_out/"
#total filesize allowed in kilobits
total_max_bits = 75000
droppedFile = sys.argv[1]
droppedName = Path(droppedFile).name
originalfiles = sys.orig_argv[2:]
#long path shenanigans
joined = (' '.join(originalfiles))
re.sub (' +', ' ', joined)
listed = re.split(r'(.+?mkv)', joined)
listed = list(filter(None, listed))
listed = [i.lstrip() for i in listed]
print(droppedName)
#get path of script location and remove the tail
head_tail = os.path.split(sys.argv[0])
output_path = head_tail[0]
#get location of input file
inpath = os.path.split(sys.argv[1])
outpath = inpath[0]
#skip first part of sys.argv since it points to script location
arguments = sys.argv[1:]
for i, file in enumerate(arguments):
arg_list = '{ffprobe_location} -show_entries format=duration -i "{file}"'.format(ffprobe_location=ffprobe_location, file=file)
print(arg_list)
cmd = subprocess.Popen(arg_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF-8')
subprocess_std = cmd.communicate()[0]
print("stdout printing: " , subprocess_std)
video_duration = [int(s) for s in re.findall(r"[0-9]+", subprocess_std)][0]
print("video_duration: ", video_duration, "s")
avg_audiorate = video_duration * 68
max_bitrate = (total_max_bits - avg_audiorate) / video_duration
print(max_bitrate)
avg_bitrate = 0.7*max_bitrate
max_bitrate = math.floor(max_bitrate)
avg_bitrate = math.floor(avg_bitrate)
print(avg_audiorate)
print(max_bitrate)
print(avg_bitrate)
basename = Path(file).stem
ffmpeg_args = '{ffmpeg_location} -i "{file}" -c:v libvpx-vp9 -vf "fps=30,scale=1280:-2" -b:v {avg_bitrate}k -maxrate {max_bitrate}k -bufsize 2M -pass 1 -threads 16 -speed 4 -row-mt 1 -tile-rows 2 -tile-columns 6 -f null NUL'.format(ffmpeg_location=ffmpeg_location, file=file, avg_bitrate=avg_bitrate, max_bitrate=max_bitrate)
cmd = subprocess.call(ffmpeg_args)
ffmpeg_args = '{ffmpeg_location} -i "{file}" -c:v libvpx-vp9 -vf "fps=30,scale=1280:-2" -b:v {avg_bitrate}k -maxrate {max_bitrate}k -bufsize 2M -c:a libopus -b:a 68k -pass 2 -threads 16 -speed 4 -row-mt 1 -tile-rows 2 -tile-columns 6 -f webm "{outpath}\{basename}.webm"'.format(ffmpeg_location=ffmpeg_location, file=file, avg_bitrate=avg_bitrate, max_bitrate=max_bitrate,outpath=outpath, basename=basename)
cmd = subprocess.call(ffmpeg_args)
input()