20230811在WIN11下使用python3批量将中英文的SRT格式的字幕合并

news2025/2/26 22:16:43

20230811在WIN11下使用python3批量将中英文的SRT格式的字幕合并
2023/8/11 8:35


缘起:将google翻译成为的简体中文字幕和剪影/RP2023直接通过语音OCR获取的SRT格式的英文字幕合并成为中英文的字幕!
由于已经解决了UTF8的编码问题,ANSI/GBK编码的合并问题本文就不提供了!
有兴趣的同学可以参照修改!


1、回顾:J:\!!!!文档整理20230625\en2cn\20230809在WIN10下使用python3批量将TXT文件转换为SRT文件
utf8txt2srt3all.py

# coding=utf-8
import os

# 获取当前目录
path = os.getcwd()
# 查看当前目录下所有文件
files = os.listdir(path)

# 遍历所有文件
for file in files:
    # 判断文件是否为 txt 文件
    if file.endswith('.txt'):
        # 构建新的文件名
        #new_file = file.replace('.txt', '.json')
        #new_file = file.replace('.txt', '.srt')
        new_file = file.replace('.txt', '.cn.srt')
        #cn+en_file = file.replace('.txt', '.cn+en.srt')
        cn3en_file = file.replace('.txt', '.cn+en.srt')
        #en4cn_file = file.replace('.txt', '.en+cn.srt')
        orig_srt_en_file = file.replace('.txt', '.srt')
        
        # 重命名文件
        #os.rename(os.path.join(path, file), os.path.join(path, new_file))
        
        
        #f2=open(new_file,"wb")
        f2 = open(new_file, "w", encoding="UTF-8")
        f3 = open(cn3en_file, "w", encoding="UTF-8")
        
        
        temp = 1
        xuhao = 1;
        
        with open(file, "r", encoding="UTF-8") as f:
            lines = f.readlines()
        
        for line in lines:
            if temp == 1:
                f2.write(str(xuhao))
                f2.write(str('\n'))
                
                f3.write(str(xuhao))
                f3.write(str('\n'))
                temp=0
            else:
                if len(line) == 1:
                    temp=1
                    xuhao = xuhao+1
                f2.write(line)
                
                f3.write(line)

        f2.close()
        f3.close()


2、前导:
偶然的发现:对于SRT字幕,貌似对时间轴的顺序,播放器会重新整理/排序!
也就是你可以将最开始的字幕放到最后面也没有问题!

# coding=utf-8
import os

# 获取当前目录
path = os.getcwd()
# 查看当前目录下所有文件
files = os.listdir(path)

# 遍历所有文件
for file in files:
    # 判断文件是否为 txt 文件
    if file.endswith('.txt'):
        # 构建新的文件名
        #new_file = file.replace('.txt', '.json')
        #new_file = file.replace('.txt', '.srt')
        new_file = file.replace('.txt', '.cn.srt')
        #cn+en_file = file.replace('.txt', '.cn+en.srt')
        cn3en_file = file.replace('.txt', '.cn+en.srt')
        #en4cn_file = file.replace('.txt', '.en+cn.srt')
        orig_srt_en_file = file.replace('.txt', '.srt')
        
        # 重命名文件
        #os.rename(os.path.join(path, file), os.path.join(path, new_file))
        
        
        #f2=open(new_file,"wb")
        f2 = open(new_file, "w", encoding="UTF-8")
        f3 = open(cn3en_file, "w", encoding="UTF-8")
        
        
        temp = 1
        xuhao = 1;
        
        with open(file, "r", encoding="UTF-8") as f:
            lines = f.readlines()
        
        print(lines)
        
        with open(orig_srt_en_file, "r", encoding="UTF-8") as f3_en:
            lines_en = f3_en.readlines()
        
        print(lines_en)
        
        for line in lines:
            if temp == 1:
                f2.write(str(xuhao))
                f2.write(str('\n'))
                
                f3.write(str(xuhao))
                f3.write(str('\n'))
                temp=0
            else:
                if len(line) == 1:
                    temp=1
                    xuhao = xuhao+1
                f2.write(line)
                
                f3.write(line)

        
        #for line in lines:
        for line_en in lines_en:
            if temp == 1:
                #f2.write(str(xuhao))
                #f2.write(str('\n'))
                
                f3.write(str(xuhao))
                f3.write(str('\n'))
                temp=0
            else:
                #if len(line) == 1:
                if len(line_en) == 1:
                    temp=1
                    xuhao = xuhao+1
                #f2.write(line)
                
                f3.write(line_en)
                
        
        f2.close()
        f3.close()


结果:
1
00:02:12,766 --> 00:02:16,099
泰勒·鲍勃和玛丽安·泰勒和我在一起

2
00:02:16,100 --> 00:02:16,900
一秒


1138
01:23:55,966 --> 01:23:58,133
我爱你

1139
01:24:13,700 --> 01:24:15,133
为我

1140
00:02:12,766 --> 00:02:16,099
Taylor Bob and Marianne Taylor here with me

1141
00:02:16,100 --> 00:02:16,900
one second


2277
01:23:55,966 --> 01:23:58,133
i love you

2278
01:24:13,700 --> 01:24:15,133
for me


3、现在需要合并中英文字幕,
英文字幕:8月7日.srt
1
00:02:12,766 --> 00:02:16,099
Taylor Bob and Marianne Taylor here with me

2
00:02:16,100 --> 00:02:16,900
one second


中文字幕:8月7日.cn.srt
1
00:02:12,766 --> 00:02:16,099
泰勒·鲍勃和玛丽安·泰勒和我在一起

2
00:02:16,100 --> 00:02:16,900
一秒


合并之后的结果:
1
00:02:12,766 --> 00:02:16,099
泰勒·鲍勃和玛丽安·泰勒和我在一起
Taylor Bob and Marianne Taylor here with me

2
00:02:16,100 --> 00:02:16,900
一秒
one second

 

 


问题点:
1、google翻译的简体中文的SRT格式的字幕是有问题的,需要也被翻译了!需要修正:utf8txt2srt3all.py
2、加入英文字幕,但是需要干掉三行:空格行、序号行、时间轴行!


cn5en6utf8txt2srt3all.py

# coding=utf-8
import os

# 获取当前目录
path = os.getcwd()
# 查看当前目录下所有文件
files = os.listdir(path)

# 遍历所有文件
for file in files:
    # 判断文件是否为 txt 文件
    if file.endswith('.txt'):
        # 构建新的文件名
        #new_file = file.replace('.txt', '.json')
        #new_file = file.replace('.txt', '.srt')
        new_file = file.replace('.txt', '.cn.srt')
        #cn+en_file = file.replace('.txt', '.cn+en.srt')
        cn3en_file = file.replace('.txt', '.cn+en.srt')
        #en4cn_file = file.replace('.txt', '.en+cn.srt')
        orig_srt_en_file = file.replace('.txt', '.srt')
        
        # 重命名文件
        #os.rename(os.path.join(path, file), os.path.join(path, new_file))
        
        
        #f2=open(new_file,"wb")
        f2 = open(new_file, "w", encoding="UTF-8")
        f3 = open(cn3en_file, "w", encoding="UTF-8")
        
        
        temp = 1
        xuhao = 1;
        
        with open(file, "r", encoding="UTF-8") as f:
            lines = f.readlines()
        
        #print(lines)
        
        #with open(orig_srt_en_file, "r", encoding="UTF-8") as f3_en:
        #    lines_en = f3_en.readlines()
        f3_en = open(orig_srt_en_file, "r", encoding="UTF-8")
        
        #print(lines_en)
        
        for line in lines:
        #for line_en in lines_en:
        #for line, line_en in lines, lines_en:
            #line = f.readline() 
            line_en = f3_en.readline()
            
            # 2023/8/11 9:08 google翻译后的SRT的序号整理
            if temp == 1:
                f2.write(str(xuhao))
                f2.write(str('\n'))
                
                f3.write(str(xuhao))
                f3.write(str('\n'))
                #temp=0
                temp=2
                
                #f3.write(str(xuhao))
                #f3.write(str('\n'))
                #temp=0
            else:
                # 2023/8/11 9:09 发现SRT的空格
                if len(line) == 1:
                    temp=1
                    xuhao = xuhao+1
                f2.write(line)
                # 2023/8/11 9:20 中英文的SRT字幕也要写入一份!
                f3.write(line)
                    
                # 2023/8/11 9:34 中英文字幕干掉空格行之后的时间轴
                if temp == 2:
                    temp = 3
                #else if temp == 2:
                elif temp == 3:
                    f3.write(line_en)
        
        
        f2.close()
        f3.close()

 

 

 


4、第三种方法:
英文在前,中文在后!
J:\!!!!文档整理20230625\en2cn\20230811在WIN11下使用python3批量将中英文的SRT格式的字幕合并\utf8i的TXT\en6cn5utf8txt2srt3all.py

# coding=utf-8
import os

# 获取当前目录
path = os.getcwd()
# 查看当前目录下所有文件
files = os.listdir(path)

# 遍历所有文件
for file in files:
    # 判断文件是否为 txt 文件
    if file.endswith('.txt'):
        # 构建新的文件名
        #new_file = file.replace('.txt', '.json')
        #new_file = file.replace('.txt', '.srt')
        new_file = file.replace('.txt', '.cn.srt')
        #cn+en_file = file.replace('.txt', '.cn+en.srt')
        cn3en_file = file.replace('.txt', '.cn+en.srt')
        en4cn_file = file.replace('.txt', '.en+cn.srt')
        #en4cn_file = file.replace('.txt', '.en+cn.srt')
        orig_srt_en_file = file.replace('.txt', '.srt')
        
        # 重命名文件
        #os.rename(os.path.join(path, file), os.path.join(path, new_file))
        
        
        #f2=open(new_file,"wb")
        f2 = open(new_file, "w", encoding="UTF-8")
        f3 = open(cn3en_file, "w", encoding="UTF-8")
        f4 = open(en4cn_file, "w", encoding="UTF-8")
        
        
        temp = 1
        xuhao = 1;
        
        with open(file, "r", encoding="UTF-8") as f:
            lines = f.readlines()
        
        #print(lines)
        
        #with open(orig_srt_en_file, "r", encoding="UTF-8") as f3_en:
        #    lines_en = f3_en.readlines()
        f3_en = open(orig_srt_en_file, "r", encoding="UTF-8")
        
        #print(lines_en)
        
        for line in lines:
        #for line_en in lines_en:
        #for line, line_en in lines, lines_en:
            #line = f.readline() 
            line_en = f3_en.readline()
            
            f4.write(line_en)
            
            # 2023/8/11 9:08 google翻译后的SRT的序号整理
            if temp == 1:
                f2.write(str(xuhao))
                f2.write(str('\n'))
                
                f3.write(str(xuhao))
                f3.write(str('\n'))
                
                #f4.write(str(xuhao))
                #f4.write(str('\n'))
                #temp=0
                temp=2
                
                #f3.write(str(xuhao))
                #f3.write(str('\n'))
                #temp=0
            else:
                # 2023/8/11 9:09 发现SRT的空格
                if len(line) == 1:
                    temp=1
                    xuhao = xuhao+1
                f2.write(line)
                # 2023/8/11 9:20 中英文的SRT字幕也要写入一份!
                f3.write(line)
                    
                # 2023/8/11 9:34 中英文字幕干掉空格行之后的时间轴
                if temp == 2:
                    temp = 3
                #else if temp == 2:
                elif temp == 3:
                    f3.write(line_en)
                    f4.write(line)
        
        
        f2.close()
        f3.close()


 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/862775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue CLI 2.x搭建vue(目录最全分析)

一、vue-cli介绍 vue-cli是一个用于快速搭建vue项目的 脚手架。 二、vue-cli安装、更新 安装过nodeJs 、cnpm 后,全局安装vue-cli(以后其他项目可直接使用): cnpm install -g vue-cli 查看安装成功否(有版本号就是…

如何有效提高开发团队的开发效率?

提高生产力的实际因素之一是雇用为您的组织具有最高效率的开发人员。公司经理和人力资源管理最好雇用高效、有创造力和具有陡峭学习能力的员工。您将了解管理和领导力、战略规划、设定业务目标和建立工作满意度将如何提高组织中开发人员团队的生产力。 改进项目管理 提高团队…

mysql事务处理

一.抛出问题: 二. 事务: 1.本质:把多个操作,打包成一个操作完成. 2.原子性:多个操作,要么全部执行成功,要么一个都不执行(回滚). 3.回滚(rollback)机制:执行到中间出错了,自动把执行成功的操作还原到最初没有执行的样子. 实现回滚:把事务中每个执行的操作记录下来,如果要回…

还有人不知道这款网页版地理空间数据管理平台?赶紧来试试吧

四维轻云是一款网页版地理空间数据管理平台,用户能够在线管理、浏览及分享倾斜模型(.osgb)、激光点云(.las)、正射影像(dom)、数字高程模型(dem)等数据。目前,平台具有数据管理、场景编辑、空间测量、团队协作、加密分享、素材库等功能。 项目管理 四维…

13.1.1 翻转裁减,改变颜色,结合多种图像增广方法进行图像增广

一.图像增广的好处 随机改变训练样本可以减少模型对某些属性的依赖,从而提高模型的泛化能力。 裁剪图像可以减少模型对于对象出现位置的依赖 以不同的方式裁剪图像,使感兴趣的对象出现在不同的位置,减少模型对于对象出现位置的依赖 调整亮度、颜色等因素可以降低模型对颜色…

工业RFID识别技术,助力企业实现智能制造新高度!

RFID技术是一种无线通信技术,通过射频信号在读写器和射频标签之间进行数据交互,实现物体的自动识别和数据传输。随着科技的不断进步,RFID工业识别技术在智能制造领域扮演着越来越重要的角色。 RFID在智能制造中能解决什么问题? 物…

使用雅克比矩阵计算Lorenz的lyapunov exponent图谱

赋个初值看看: 我们使用雅克比矩阵计算lyapunov exponent图谱看看: matlab代码如下: clear; %% ===========初始化输入============== yinit = [0.1,0.1,0.1]; orthmatrix = [1 0 0;0 1 0;0 0 1];y = zeros(12,1); y(1:3) = yinit; y(4:12) = orthmatrix;mod = zeros(3,1…

c++QT文件操作

1 介绍 QT的文件操作来源于其抽象基类QIODevice,中用于处理输入输出设备。提供了统一的接口来处理不同类型的数据源,如文件、套接字、缓冲区等。QIODevice 主要用于读取和写入数据,无论数据来自何种源头,都可以通过 QIODevice 统一…

用 oneAPI 实现 AI 欺诈检测:一款智能图像识别工具

简介 虚假图像和视频日益成为社交媒体、新闻报道以及在线内容中的一大隐患。在这个信息爆炸的时代,如何准确地识别和应对这些虚假内容已经成为一个迫切的问题。为了帮助用户更好地辨别虚假内容,我开发了一款基于 oneAPI、TensorFlow 和 Neural Compress…

一文了解新能源电机国内主流供应商

作为新能源汽车核心三电系统之一的“电机”就好比燃油车的发动机一样,是车辆核心部件,但似乎消费者没太大关注这方面。今天我们给大家聊聊这个核心部件! 一辆新能源汽车占生产成本最高的部件是动力电池,约占到30%左右&#xff0c…

ppt怎么压缩?试试这样压缩文件

当PPT文件体积过大时,打开的速度就会很慢,演示的时候刘程度也会受到影响,其次,现在很多平台对于上传的文件是有大小限制的,比如超过100M的文件就无法上传、发送等等,那么,怎么才能压缩PPT文件呢…

手撕HashMap源码

auth:虎 ,2023年5月8日—???完。 前言: 最初在面试的时候,在个人栏第一条写了一句话“手撕HashMap”源码作为亮点,以下是曾经的学习笔记,目前来说不是很完整,有机会下次面试时候再补全吧~ 1…

python numpy数组水平和垂直合并

1 水平Horizontal合并 Horizontal:水平向右拉长 利用np.hstack():原始数据size可以不一致 利用np.concatenate():原始数据size可以不一致 import numpy as np # 三个一维数组 array1 np.array([1, 2, 3]) array2 np.array([4, 5, 6]) array3 np.ar…

Koan自动重装和Cobbler_web

Koan是Cobbler的辅助工具,可以实现很多功能,使用koan配合Cobbler可以实现快速重装Linux系统: 1、安装koan: yum install -y epel-releaseyum install -y koan 安装截图: 2、在客户机上,用koan选择要重装的…

【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(高级用法)

对于Httpclient请求机制进行设置操作处理。 Body注解申明一个请求体模板,模板中可以带有参数,与方法中Param注解申明的参数相匹配,使用方法如下: interface LoginClient {void login( String user, String password); } ...client.login("denomin…

小红书投放流程是什么,达人选择注意事项!

很多人会发现有些笔记的内容并不是很出彩,但是偏偏就火了,自己想去模仿就平平无奇,其中包含了很多因素,有运气、也有选题和博主发文思路在里面,今天,来和大家分享下小红书投放流程是什么,达人选…

Python Selenium 设置带账号密码的socks5代理,启动浏览器

selenium添加带有账密的socks5代理 我们都知道在使用selenium开发爬虫的时候不可避免的会使用socks5高匿名代理。一般情况下我们使用方法如下(开发语言为python): from selenium import webdriver chrome_options webdriver.ChromeOptions() chrome_options.add_…

手动整理:腾讯云轻量应用服务器优缺点大全

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且特别合适,轻量2核2G3M带宽、2核2G4M、2核4G5M带宽、4核8G12M带宽,还有8核16G18M和16核32G28M配置可选,腾讯云服务器网分享腾讯云轻量应用服务器详细…

filebeat 采集k8s 中nginx deployment 日志

一、背景 在k8s集群中,已经部署了nginx应用,需要使用elk来收集日志。 注意:elk并没有放在k8s集群中,使用单独的服务器进行安装。不推荐elk放在k8s集群中! 其中filebeat,使用DaemonSet方式部署&#xff0…

【递归函数的几种常见题型】

递归函数的几种常见题型 目录 题型一:打印一个数的每一位 题型二:计算一个数的每位之和 题型三:计算n的k次方 题型一:打印一个数的每一位 1.1递归函数的实现 void print(int n) {if (n > 9)print(n / 10);printf("…