From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Mon, 14 Oct 2024 06:09:23 +0000 (-0400) Subject: caption X-Git-Url: http://git.skullheadx.com/nixos/static/gitweb.js?a=commitdiff_plain;h=refs%2Fheads%2Fcaption;p=youtube-downloader.git caption --- diff --git a/ytdl/__pycache__/funcmodule.cpython-312.pyc b/ytdl/__pycache__/funcmodule.cpython-312.pyc index ca8b44a..f0891d8 100644 Binary files a/ytdl/__pycache__/funcmodule.cpython-312.pyc and b/ytdl/__pycache__/funcmodule.cpython-312.pyc differ diff --git a/ytdl/funcmodule.py b/ytdl/funcmodule.py index bb45b47..81f8319 100644 --- a/ytdl/funcmodule.py +++ b/ytdl/funcmodule.py @@ -36,42 +36,65 @@ def get_and_download(link): # print(f"{yt.title} is already downloaded") # return - # yt.check_availability() - # print(f"Fetching stream for {yt.title}") - # - # assert len(yt.streams.filter(only_audio=True)) > 0, "No available audio streams" - # audio_stream = yt.streams.filter(only_audio=True).order_by("abr").last() + yt.check_availability() + print(f"Fetching stream for {yt.title}") + + assert len(yt.streams.filter(only_audio=True)) > 0, "No available audio streams" + audio_stream = yt.streams.filter(only_audio=True).order_by("abr").last() # hierarchy: caption_hierarchy = ["ko", "ja", "zh", "en", "a.ko", "a.en"] + caption_exists = False + lang = None if len(yt.captions) > 0: - for caption in yt.captions: - print(yt.title, caption.lang_code) - # print(f"Downloading audio stream for {yt.title}") - # audio_stream.download(filename=fix_filename(audio_stream.default_filename), skip_existing=True) - # - # # create thumbnail file - # data = requests.get(yt.thumbnail_url).content - # thumbnail_filename = f'{fix_filename(audio_stream.title)}.jpg' - # with open(thumbnail_filename, 'wb') as f: - # f.write(data) - # - # command = [ - # 'ffmpeg', - # '-i', fix_filename(audio_stream.default_filename), - # '-i', thumbnail_filename, - # '-map', '0', - # '-map', '1', - # '-metadata', f'title={fix_filename(audio_stream.title)}', - # '-metadata', f'artist={yt.author}', - # '-metadata', f'date={yt.publish_date}', - # '-metadata', f'comment={big_num_format(yt.views) + " views"}', - # fix_filename(audio_stream.title) + ".mp4", - # '-y' - # ] - # subprocess.run(command) - # - # # clean up tmp files - # os.remove(thumbnail_filename) - # os.remove(fix_filename(audio_stream.default_filename)) + for c in caption_hierarchy: + if c in yt.captions.keys(): + yt.captions[c].download(title=fix_filename(yt.title)) + lang = c + caption_exists = True + break + print(f"Downloading audio stream for {yt.title}") + audio_stream.download(filename=fix_filename(audio_stream.default_filename), skip_existing=True) + + # create thumbnail file + data = requests.get(yt.thumbnail_url).content + thumbnail_filename = f'{fix_filename(audio_stream.title)}.jpg' + with open(thumbnail_filename, 'wb') as f: + f.write(data) + + if caption_exists: + command = [ + 'ffmpeg', + '-loop', '1', + '-i', thumbnail_filename, + '-i', fix_filename(audio_stream.default_filename), + '-vf', f'subtitles={fix_filename(yt.title) + f" ({lang}).srt"}', + '-metadata', f'title={fix_filename(audio_stream.title)}', + '-metadata', f'artist={yt.author}', + '-metadata', f'date={yt.publish_date}', + '-metadata', f'comment={big_num_format(yt.views) + " views"}', + '-shortest', + fix_filename(audio_stream.title) + ".mp4", + '-y' + ] + else: + command = [ + 'ffmpeg', + '-i', fix_filename(audio_stream.default_filename), + '-i', thumbnail_filename, + '-map', '0', + '-map', '1', + '-metadata', f'title={fix_filename(audio_stream.title)}', + '-metadata', f'artist={yt.author}', + '-metadata', f'date={yt.publish_date}', + '-metadata', f'comment={big_num_format(yt.views) + " views"}', + fix_filename(audio_stream.title) + ".mp4", + '-y' + ] + subprocess.run(command) + + # clean up tmp files + os.remove(thumbnail_filename) + os.remove(fix_filename(audio_stream.default_filename)) + os.remove(fix_filename(yt.title) + f" ({lang}).srt")