Giter Site home page Giter Site logo

gpt-subtitle's Introduction

GPT-Subtitle 💬 🌐

Build & Test FOSSA Status

English | 简体中文

whisper_preview

View Current Development Task 📋

GPT-Subtitle combines Whisper and OpenAI’s GPT-3 Language Model 🧠, offering you local translation functionality for audio and video. It not only translates subtitles into dialogues but also supports multiple language translations and allows you to conveniently translate subtitles into other languages. 🛰️

✨ Key Features:

By integrating the whisper.cpp model, you can now:

  • Scan videos and audios in a folder and convert them into srt subtitle files 🔍 🎞️ 🎧
  • Utilize optimization algorithms to translate multi-language subtitle files 💬 🌐

🔧 Tech Stack

  • NextJS 13 (App Router)
  • NestJS
  • Jotai
  • Framer Motion
  • Radix UI
  • Socket.IO
  • TailwindCSS

Running Environment

This project runs on the Node.js platform, so you need to install Node.js on your local machine first. After installation, open your command-line tool, navigate to the project root directory, and install pnpm and the necessary dependencies:

pnpm install

Install ffmpeg, please install it yourself for other systems

brew install ffmpeg

Also need to install redis and mysql, please install other systems by yourself

brew install redis
brew install mysql

Usage

Setting up API KEY

Before using the translation feature, you need to register an account on the OpenAI official website and apply for an API KEY. After obtaining the API KEY, you can copy a .env file from .env.template in the root directory and add the following configuration:

# Frontend Setting
NEXT_PUBLIC_API_URL=http://localhost:3001 # Backend API address
WEB_PORT=3000                             # Frontend start port

# Backend Setting
OPENAI_API_KEY=           # OpenAI API KEY
GOOGLE_TRANSLATE_API_KEY= # Google API KEY(Can be left blank)
BASE_URL=                 # OpenAI API URL

## Database Setting
REDIS_PORT=6379             # Redis port
REDIS_HOST=subtitle_redis   # Redis address
MYSQL_HOST=subtitle_mysql   # MySQL address
MYSQL_PORT=3306             # MySQL port
MYSQL_USER=root             # MySQL user
MYSQL_PASSWORD=123456       # MySQL passowrd
MYSQL_DATABASE=gpt_subtitle # MySQL Database name

## Server Address Setting
SERVER_PORT=3001 # Backend start port

## System Setting. You can edit in Setting
OUTPUT_SRT_THEN_TRANSLATE=true # Whether to output the SRT file first and then translate it
TranslateModel=google          # google or gpt3
LANGUAGE=zh-CN                 # Output SRT file and then translate the language
TRANSLATE_DELAY=1500           # Delay between calling translation interface
TRANSLATE_GROUP=4              # Translate sentences for grouping translation, how many sentences can be translated at most at a time

Replace your_api_key with your own API key.

Running the Program

Deploy the service locally:

npm run deploy:prod

🐳 Docker Deployment

This guide will lead you through two ways to deploy the GPT Subtitle app with Docker: directly using pre-built Docker images to start services or by building custom images to start services. Here are the specific steps and related configurations.

▶️ Direct Start (Using docker-compose.yml)

You can directly use the docker-compose.yml file to start and run your services.

  1. Edit Environment Variables

    Ensure the .env file contains all necessary environment variables, such as database credentials, etc.

  2. Start Services

    Execute the following command to start all services:

    docker-compose up -d

    This will start the services in the background based on the configuration in the docker-compose.yml file.

⚙️ Build and Start (Using docker-compose-build.yml)

If you need to build images according to your own needs, or want to deploy the application from the source code, you can use the docker-compose-build.yml file.

  1. Configure Build Arguments

    In the docker-compose-build.yml file, configure the build arguments and environment variables for the services that need to be built. For example, for the frontend service subtitle_web, you can configure the build arguments as follows:

    services:
      subtitle_web:
        build:
          args:
            - WEB_PORT=3000
            - SERVER_PORT=3001
            - NEXT_PUBLIC_API_URL=http://localhost:3001
    
  2. Build and Start Services

    Use the following command to build the images and start the services:

    docker-compose -f docker-compose-build.yml up -d
    

    Note that the -f parameter is specified to use the docker-compose-build.yml file.

🛑 Stop Services

Regardless of which method is used to start the services, you can execute the following command when you need to stop and clean up the services:

docker-compose -f <corresponding file name> down

📝 Considerations

  • Ensure all environment variables are correctly configured in the .env file.
  • If you need to modify the service's port mappings or volume paths, ensure these modifications are reflected in the respective docker-compose.yml or docker-compose-build.yml file.
  • When using the docker-compose-build.yml file, you may need to adjust the context and dockerfile paths according to the actual paths.

This way, you can flexibly deploy the GPT Subtitle app by choosing to directly start the services or build the images based on your specific needs.

setup-whisper

The larger the model, the better the translation effect, but the slower it is. It is recommended to use the large model for languages other than English.

Nvidia GPU can accelerate the operation of models, but CUDA needs to be installed. For details, see whisper project instructions.

gpt-subtitle's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar hqwuzhaoyi avatar mortalzhang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

gpt-subtitle's Issues

npm run deploy:prod 失败

`web:build: ./components/ui/alert-dialog.tsx
web:build: 24:17 Warning: 'children' is defined but never used. Allowed unused args must match /^_/u. unused-imports/no-unused-vars
web:build:
web:build: info - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
web:build: - info Collecting page data...
web:build: - info Generating static pages (0/9)
web:build: - info Generating static pages (2/9)
web:build: Invalid URL
web:build: - info Generating static pages (4/9)
web:build: TypeError: fetch failed
web:build: at Object.fetch (node:internal/deps/undici/undici:11576:11)
web:build: at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
web:build: cause: Error: connect ECONNREFUSED 127.0.0.1:3000
web:build: at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16)
web:build: at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) {
web:build: errno: -111,
web:build: code: 'ECONNREFUSED',
web:build: syscall: 'connect',
web:build: address: '127.0.0.1',
web:build: port: 3000
web:build: }
web:build: }
web:build: - info Generating static pages (6/9)
web:build: imagePreview { visible: false, image: null }
web:build:
web:build: Error occurred prerendering page "/preview/gallery". Read more: https://nextjs.org/docs/messages/prerender-error
web:build: TypeError: fetch failed
web:build: at Object.fetch (node:internal/deps/undici/undici:11576:11)
web:build: at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
web:build: imagePreview { visible: false, image: null }
web:build: - info Generating static pages (9/9)
web:build:
web:build: > Export encountered errors on following paths:
web:build: /preview/gallery/page: /preview/gallery
web:build:  ELIFECYCLE  Command failed with exit code 1.
web:build: ERROR: command finished with error: command (/home/gpt-subtitle-master/apps/web) pnpm run build exited (1)
web#build: command (/home/gpt-subtitle-master/apps/web) pnpm run build exited (1)

Tasks: 7 successful, 8 total
Cached: 7 cached, 8 total
Time: 13.086s
Failed: web#build

ERROR run failed: command exited (1)
`
npm run deploy:prod 的时候爆这个错误,是什么原因呀

URL 拼接错误,导致字幕无法下载

gpt-subtitle/apps/server/src/subtitle/subtitle.service.ts:33

 return path.join(staticPath, relativePath);

这段代码拼接结果是 --> 'http:/localhost:3001/static/video/Apollo_11_moonwalk_montage_720p.srt'
url拼接不能使用path.join拼接,路径里面‘//’会被转换为‘/’。
我改为

return url.resolve(
        staticPath,
        relativePath
      );

拼接就正常了。这个页面的下载功能也正常了。
image

該如何映射jellyfin的媒體目錄?

假如jellyfin的媒體目錄是
media>movie>movie1, movie2, movie3, ...
請問該如何映射媒體路徑?
是該修改Static_path嗎?

OPENAI_API_KEY=` # OpenAI API KEY
GOOGLE_TRANSLATE_API_KEY= # Google API KEY(Can be left blank)
BASE_URL= # OpenAI API URL
WEB_PORT=3000 # Front-end port
SERVER_PORT=3001 # Backend port

STATIC_PATH=/static # Static file path
OUTPUT_SRT_THEN_TRANSLATE=true # Whether to output the SRT file first and then translate it
LANGUAGE=zh-CN # Output SRT file and then translate the language
TRANSLATE_DELAY=1500 # Delay between calling translation interface
TRANSLATE_GROUP=4 # Translate sentences for grouping translation, how many sentences can be translated at most at a time
TranslateModel=google # google or gpt3

REDIS_PORT=6379 # Redis port
REDIS_HOST=subtitle_redis # Redis address
MYSQL_HOST=subtitle_mysql # MySQL address
MYSQL_PORT=3306 # MySQL port
MYSQL_USER=root # MySQL user
MYSQL_PASSWORD=123456 # MySQL password
MYSQL_DATABASE=gpt_subtitle # MySQL Database name

API_URL=http://localhost:3001 # Backend API address
NEXT_PUBLIC_API_URL=http://localhost:3001 # Same as above. Backend API address
WEB_URL=http://localhost:3000 # Web address
NEXT_PUBLIC_WEB_URL=http://localhost:3000 # Same as above. WEB address

Inquiry regarding project license

Hello @hqwuzhaoyi ,

I hope this message finds you well. I recently came across your project on GitHub and I must say, I am truly impressed by the work you have done. The project touches upon a subject that I find fascinating, and it showcases your technical prowess and creativity.

However, while exploring the code repository, I was unable to find any information regarding the open source license or project license.

I would like to inquire about the licensing arrangements for this project. Could you kindly provide some details regarding the project’s license? Specifically, I would appreciate knowing under which license the project is released and if there are any contributing guidelines to be mindful of.

Obtaining an understanding of the terms and conditions for using and familiarizing myself with this project would be of great help. Thank you for taking the time to address this query.

I appreciate your attention to this matter and I look forward to hearing from you soon.

Best regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.