first commit

main
Zoltan 9 months ago
commit e110c99a14
  1. 62
      video_converter.py

@ -0,0 +1,62 @@
from glob import glob
import os
import subprocess
base_folder = f'C:{os.sep}Users{os.sep}Zoltan{os.sep}Videos{os.sep}'
save_file = "converted.txt"
def get_video_length(filename):
result = subprocess.run(["ffprobe", "-v", "error", "-show_entries",
"format=duration", "-of",
"default=noprint_wrappers=1:nokey=1", filename],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
return float(result.stdout)
def create_temp_file_name(split):
return f'{split[0]}{os.sep}TEMP_{split[1]}'
file_names = glob(f'{base_folder}*{os.sep}*.mp4')
f = open(save_file, "r+")
converted_files = [line.rstrip(os.linesep) for line in f]
for file_name in file_names:
if(file_name not in converted_files):
split = file_name.rsplit(os.sep,1)
temp_name = create_temp_file_name(split)
print(f'Convert started: {file_name}')
os.system(f'ffmpeg -v quiet -stats -hwaccel cuda -i \"{file_name}\" -preset veryfast -c:v libx264 -crf 18 -c:a copy \"{temp_name}\"')
os.remove(file_name)
os.rename(temp_name,f'{split[0]}{os.sep}{split[1]}')
f.write(file_name+os.linesep)
clips = glob(f'{base_folder}*.mp4')
for clip in clips:
if(clip not in converted_files):
split = clip.rsplit(os.sep,1)
temp_name = create_temp_file_name(split)
file_stats = os.stat(clip)
duration = get_video_length(clip)
tries = 0
under_25 = False
while not under_25:
bitrate = ( 24 * 8192.0 ) / ( 1.048576 * duration ) * (1- tries*0.05)
print(f'Duration: {duration} Bitrate: {bitrate} Tries: {tries+1}')
print(f'Convert started: {clip}')
os.system(f'ffmpeg -v quiet -stats -i \"{clip}\" -c:v libx264 -preset veryfast -b {bitrate:.0f}k -c:a copy \"{temp_name}\"')
temp_file_stat = os.stat(temp_name)
print(f'file size stats: {temp_file_stat.st_size}, ------> {(temp_file_stat.st_size / (1024 * 1024))}')
if(25>(temp_file_stat.st_size / (1024 * 1024))):
under_25 = True
os.remove(clip)
os.rename(temp_name,f'{split[0]}{os.sep}{split[1]}')
else:
tries +=1
os.remove(temp_name)
f.write(clip+os.linesep)
Loading…
Cancel
Save