python源码分享:视频srt字幕文件生成

前言

        最近有个项目需要使用srt字幕,我通过数分钟了解了它,并快速使用python完成了这一功能,现在分享此源码:

        1、已知目标时间段的srt弹幕文件生成

        2、自动识别视频的最后五秒钟,并添加提示弹幕

已知目标时间段的srt弹幕文件生成

def generate_srt(subtitles, filename):
    """
    Generate .srt subtitle file from a list of tuples (start_time, end_time, text).

    Parameters:
    - subtitles: List of tuples in the format (start_time, end_time, text).
    - filename: Name of the output .srt file.
    """
    with open(filename, 'w', encoding='utf-8') as f:
        count = 1
        for (start_time, end_time, text) in subtitles:
            f.write(f"{count}\n")
            f.write(f"{start_time} --> {end_time}\n")
            f.write(f"{text}\n\n")
            count += 1


# Example usage:
subtitles = [
    ("00:00:01,000", "00:00:05,000", "Hello, world!"),
    ("00:00:10,000", "00:00:15,000", "This is a subtitle example."),
    ("00:00:20,000", "00:00:25,000", "Feel free to modify and use this script."),
]

generate_srt(subtitles, "srt/output.srt")

 

 自动识别视频的最后五秒钟,并添加提示弹幕

import os
from moviepy.video.io.VideoFileClip import VideoFileClip
from datetime import timedelta


def generate_srt(subtitles, filename):
    """
    Generate .srt subtitle file from a list of tuples (start_time, end_time, text).

    Parameters:
    - subtitles: List of tuples in the format (start_time, end_time, text).
    - filename: Name of the output .srt file.
    """
    with open(filename, 'w', encoding='utf-8') as f:
        count = 1
        for (start_time, end_time, text) in subtitles:
            f.write(f"{count}\n")
            f.write(f"{start_time} --> {end_time}\n")
            f.write(f"{text}\n\n")
            count += 1


def generate_subtitles_from_last_five_seconds(video_file, output_file):
    clip = VideoFileClip(video_file)
    try:
        duration = clip.duration
        start_time = max(0, duration - 5)
        end_time = duration
        text = "Subtitle text for the last five seconds."

        subtitles = [(format_timedelta(start_time), format_timedelta(end_time), text)]
        generate_srt(subtitles, output_file)
    finally:
        clip.close()  # 显式关闭视频文件处理


def format_timedelta(seconds):
    """
    Format seconds into HH:MM:SS,mmm format.
    """
    td = timedelta(seconds=seconds)
    mm, ss = divmod(td.seconds, 60)
    hh, mm = divmod(mm, 60)
    return f"{hh:02}:{mm:02}:{ss:02},000"


# srt字幕存储目录
srt_dir = 'srt/video'

# 视频存放目录
video_dir = 'F:\视频素材'

for root, dirs, files in os.walk(video_dir):
    for file in files:
        video_path = os.path.join(root, file)

        # 检测是否是MP4格式,并生成同名的srt字幕
        video_name, file_ext = os.path.splitext(file)
        if file_ext == '.mp4':
            output_file = f"srt/video/{video_name}.srt"
            print(video_path, output_file)
            generate_subtitles_from_last_five_seconds(video_path, output_file)

         这是项目结构:

相关推荐

  1. python实现文本/图片生成视频

    2024-07-10 19:38:05       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 19:38:05       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 19:38:05       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 19:38:05       90 阅读
  4. Python语言-面向对象

    2024-07-10 19:38:05       98 阅读

热门阅读

  1. Amazon Bedrock 常用权限分类详解

    2024-07-10 19:38:05       23 阅读
  2. Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

    2024-07-10 19:38:05       23 阅读
  3. AWS Glue 与 Amazon Redshift 的安全通信配置

    2024-07-10 19:38:05       27 阅读
  4. Elasticsearch7.5.2 常用rest api与elasticsearch库

    2024-07-10 19:38:05       26 阅读
  5. MySQL 的 Buffer Pool 的结构及有什么作用

    2024-07-10 19:38:05       27 阅读
  6. 【大模型】解锁语言模型潜能:提示工程的艺术

    2024-07-10 19:38:05       27 阅读
  7. docker run enteypoint怎么样使用呢?

    2024-07-10 19:38:05       26 阅读
  8. kafka中

    kafka中

    2024-07-10 19:38:05      24 阅读
  9. 探索Vue.js:构建高效前端应用的现代框架

    2024-07-10 19:38:05       23 阅读
  10. ffmpeg 获取视频时长的命令及其输出

    2024-07-10 19:38:05       28 阅读