improved joining of temp dir & filenames, continued refactoring.

This commit is contained in:
Kjistóf 2017-02-06 12:25:48 +01:00
parent 6fae9697fd
commit a0a040389f

View File

@ -1,6 +1,6 @@
from subprocess import call, Popen, PIPE, check_output, DEVNULL
from os import listdir, remove
from os.path import splitext, exists
from os.path import splitext, exists, join
from re import match
from enum import Enum
from datetime import timedelta
@ -73,7 +73,7 @@ def download_video_stream(url, file_dict):
def read_extensions(file_dict, directory):
for file in listdir(directory):
for filename in file_dict:
fullname = '{}/{}'.format(directory, file)
fullname = join(directory, file)
if match('^{}.*'.format(file_dict[filename]), fullname):
file_dict[filename] = fullname
@ -104,6 +104,27 @@ def get_length(file):
return timedelta(hours=float(data[0]), minutes=float(data[1]), seconds=float(data[2]))
def determine_output_filename(url, user_supplied, extension, files_dict):
if user_supplied is None:
files_dict[File.OUTPUT] = check_output(('youtube-dl', '--get-title', url)).decode('utf-8').strip()
else:
files_dict[File.OUTPUT] = user_supplied
files_dict[File.OUTPUT] += extension
def parse_cmd_arguments():
parser = ArgumentParser(description='Download player-looped videos with youtube-dl & ffmpeg.')
parser.add_argument('-nv', '--nonverbose', action='store_true', help='Turn off non-critical messages to user.')
parser.add_argument('-o', '--output', default=None, help='Specify name of the output file (use -e for extension).')
parser.add_argument('-e', '--extension', default='mp4', help='Set the container to use for the output.')
parser.add_argument('url', type=str, help='The URL of the site containing the video to download.')
args = parser.parse_args()
args.extension = '.' + args.extension
return args
def yes_no_question(question, default):
valid = {"yes": True, "y": True, "ye": True,
"no": False, "n": False}
@ -160,15 +181,7 @@ def run(url, files_dict, directory):
if __name__ == '__main__':
# parse arguments
parser = ArgumentParser(description='Download player-looped videos with youtube-dl & ffmpeg.')
parser.add_argument('-nv', '--nonverbose', action='store_true', help='Turn off non-critical messages to user.')
parser.add_argument('-o', '--output', default=None, help='Specify name of the output file (use -e for extension).')
parser.add_argument('-e', '--extension', default='mp4', help='Set the container to use for the output.')
parser.add_argument('url', type=str, help='The URL of the site containing the video to download.')
args = parser.parse_args()
args.extension = '.' + args.extension
args = parse_cmd_arguments()
VERBOSE = False if args.nonverbose else True
FILES = {Stream.AUDIO: 'audio', Stream.VIDEO: 'video',
@ -177,12 +190,7 @@ if __name__ == '__main__':
OUTPUT_KEYS = [File.OUTPUT]
URL = args.url
# fetch video title if no filename was specified
if args.output is None:
FILES[File.OUTPUT] = check_output(('youtube-dl', '--get-title', args.url)).decode('utf-8').strip()
else:
FILES[File.OUTPUT] = args.output
FILES[File.OUTPUT] += args.extension
determine_output_filename(URL, args.output, args.extension, FILES)
# ask what to do if output exists
if exists(FILES[File.OUTPUT]):
@ -195,8 +203,9 @@ if __name__ == '__main__':
remove(FILES[File.OUTPUT])
with TemporaryDirectory() as dir:
# update temporary file locations in FILES dict
for key in FILES:
if key not in OUTPUT_KEYS:
FILES[key] = '{}/{}'.format(dir, FILES[key])
FILES[key] = join(dir, FILES[key])
run(URL, FILES, dir)