X-Git-Url: https://git.mdrn.pl/audio.git/blobdiff_plain/f9eae91a6d2d175b2f227d7ea04ddd5994e9a95a..5f3db867cdab89e934f4946c58568039b780defe:/src/youtube/utils.py?ds=inline diff --git a/src/youtube/utils.py b/src/youtube/utils.py index 3dbab09..87fcf1a 100644 --- a/src/youtube/utils.py +++ b/src/youtube/utils.py @@ -1,3 +1,4 @@ +import hashlib import os import shutil import subprocess @@ -23,12 +24,24 @@ def link_or_copy(src, dst): def process_to_file(cmdline, prefix='', suffix='', cache_key=None, output_path=None): if not output_path: - tmp = NamedTemporaryFile(prefix=prefix, suffix=suffix, delete=False) + tmp = NamedTemporaryFile( + prefix=prefix, suffix=suffix, delete=False, + dir=settings.FILE_UPLOAD_TEMP_DIR + ) tmp.close() output_path = tmp.name if cache_key: - cache_path = FILE_CACHE + cache_key.replace('/', '__') + cache_path = cache_key.replace('/', '__') + if len(cache_path) > 200: + parts = cache_path.rsplit('.', 1) + limit = 200 - 9 + if len(parts) > 1: + limit -= len(parts[1]) + 1 + cache_path = parts[0][:limit] + '.' + hashlib.sha1(cache_key.encode('utf-8')).hexdigest()[:8] + if len(parts) > 1: + cache_path += '.' + parts[1] + cache_path = FILE_CACHE + cache_path if cache_key and os.path.exists(cache_path): link_or_copy(cache_path, output_path) @@ -52,14 +65,17 @@ def video_from_image(img_path, duration, fps=25, cache=True): def cut_video(video_path, duration): return process_to_file( - ['ffmpeg', '-y', '-i', video_path, '-t', str(duration)], + ['ffmpeg', '-y', '-i', video_path, '-t', str(duration), '-c', 'copy'], 'cut-', '.mkv' ) def ffmpeg_concat(paths, suffix, copy=False): - filelist = NamedTemporaryFile(prefix='concat-', suffix='.txt') + filelist = NamedTemporaryFile( + prefix='concat-', suffix='.txt', + dir=settings.FILE_UPLOAD_TEMP_DIR + ) for path in paths: filelist.write(f"file '{path}'\n".encode('utf-8')) filelist.flush()