美文网首页
ChatGPT写的字幕下载代码

ChatGPT写的字幕下载代码

作者: 鄢中堡 | 来源:发表于2023-03-18 10:45 被阅读0次

为了自动给自己nas上的电影和美剧下字幕,测试了以下让chatgpt编写代码。经过不断提出要求,并针对运行的错误反馈过去,最后历经半天,终于写出来一个基本能用的字幕下载代码。总体感觉来说,他写的代码,并不是特别好读。在修改过程中,他也是经常不知道所以然在乱改。是否能改正确,取决于你交互指出问题的方式。而是否能发现并指出某些问题,需要能读懂代码。所以现阶段,至少chatgpt还没有到能让普通人变成程序员的可能。但是其确实能提高码农生产力,特别是技术过硬的,一眼能看出问题,指导低级码农的那种人。

特别说明,这个代码可能存在某些bug,我没有一行的审查,并不确保能真正用来下载字幕。
需要支持库的安装

pip install subliminal
pip install chardet

使用方法

sudo python3 getsub.py ./

代码如下:

import os
import sys
import glob
from subliminal import download_best_subtitles, region, Video
from subliminal import save_subtitles

def load_downloaded_files(downloaded_files_path):
    if os.path.exists(downloaded_files_path):
        with open(downloaded_files_path, 'r') as f:
            return set(line.strip() for line in f)
    else:
        return set()

def save_downloaded_file(downloaded_files_path, file_path):
    with open(downloaded_files_path, 'a') as f:
        f.write(f"{file_path}\n")

def get_subtitle_name_with_index(subtitle_filename, index):
    return f"{subtitle_filename[:-4]}_{index}.srt"

from subliminal import save_subtitles

def save_subtitle(subtitle, subtitle_filename):
    new_subtitle_content = subtitle.content
    detected_encoding = chardet.detect(new_subtitle_content)['encoding']
    new_subtitle_text = new_subtitle_content.decode(detected_encoding, errors='ignore')

    if os.path.exists(subtitle_filename):
        with open(subtitle_filename, 'r', encoding=detected_encoding) as f:
            existing_subtitle = f.read()
        
        if existing_subtitle == new_subtitle_text:
            print(f"Skipping {subtitle_filename} (already exists)")
            return
        else:
            index = 1
            while os.path.exists(get_subtitle_name_with_index(subtitle_filename, index)):
                index += 1
            subtitle_filename = get_subtitle_name_with_index(subtitle_filename, index)
    
    with open(subtitle_filename, "w", encoding=detected_encoding) as f:
        f.write(new_subtitle_text)
    print(f"Downloaded subtitle saved as {subtitle_filename}")

def download_subtitles(folder_path, languages, downloaded_files_path):
    region.configure("dogpile.cache.dbm", arguments={"filename": "cachefile.dbm"})
    video_exts = ["*.mkv", "*.mp4", "*.avi", "*.mov", "*.wmv"]

    video_files = []
    for video_ext in video_exts:
        all_files = glob.glob(os.path.join(folder_path, f"**/{video_ext}"), recursive=True)
        valid_files = [file for file in all_files if "@eaDir" not in file]
        video_files.extend(valid_files)

    downloaded_files = load_downloaded_files(downloaded_files_path)

    total_files = len(video_files)
    processed_files = 0

    for video_file in video_files:
     
        if video_file in downloaded_files:
            print(f"Skipping {video_file} (already downloaded)")
            continue

        try:
            video = Video.fromname(video_file)
            print(f"Downloading subtitles for {video_file}")
            best_subtitles = download_best_subtitles([video], languages)
            downloaded_subtitles = False
            for subtitle in best_subtitles[video]:
                file_name, file_extension = os.path.splitext(video_file)
                subtitle_filename = f"{file_name}.{subtitle.language.alpha3}.srt"
                save_subtitle(subtitle, subtitle_filename)
                downloaded_subtitles = True

            if not downloaded_subtitles:
                print(f"No subtitles found for {video_file}")
            else:
                save_downloaded_file(downloaded_files_path, video_file)
        except Exception as e:
            print(f"Error processing {video_file}: {e}")

        processed_files += 1
        progress = (processed_files / total_files) * 100
        print(f"Progress: {processed_files}/{total_files} ({progress:.2f}%)")

if __name__ == '__main__':
    if len(sys.argv) < 2:
        folder_path = "./"
    else:
        folder_path = sys.argv[1]       
    languages = {"zho", "eng"}
    downloaded_files_path = "downloaded_files.txt"
    download_subtitles(folder_path, languages, downloaded_files_path)

相关文章

网友评论

      本文标题:ChatGPT写的字幕下载代码

      本文链接:https://www.haomeiwen.com/subject/msmsrdtx.html