74 lines
2.5 KiB
Python
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() |