利用Python批量修改多个ass字幕文件
原文
起因
使用弹弹Play看番时字幕过大,大概长这样:
于是我便开始寻找解决办法
解决之路
首先,查看是不是弹弹Play的问题。
使用PotPlayer观看是这样:
显然是弹弹Play的问题,在尝试更换播放器内核等一系列操作后,仍然没有解决。于是,我打算更换字幕试试。
然鹅,虽然找到了字体正常的字幕,但是时间轴却和这个视频不对应…看来得尝试其他方法。
终于,在字幕设置的右下角发现了这个:
一查证,果然如此!但是用手一个一个地修改太浪费时间了,我立马想到python可以帮我。
使用python批量修改这些文件
- 需求:在每个字幕
(.ass)
文件开头一行加上[Script Info]
- 额外需求:以后遇到相似问题,小改代码还能接着用
所以,基本思路是:
- 获取文件路径
- 打开并修改文件
在此过程中,我遇到了一些问题和困难:
- 每个字幕文件名尽管遵循一定规则,但是不仅仅有数字(集数)上的差异,还有几个我找不出规律的字母。 其中的"E43C438E"
我打算使用正则表达式来解决这个问题,但是一搜,还是比较麻烦。最后还是在这篇文章的引导下,获取了所有符合要求的文件名。
from os import listdir
path0 = "你要搜的文件夹"flist = listdir(path0) #使用listdir()函数获取所有的文件名,保存到名为flist的list变量里
flist_need = [] #存放所需的名字for i in range(0, len(flist)): #遍历flist里面的所有项extension = flist[i].split(".")[-1] #使用split()分割字符串,获取尾缀([-1])if extension == "ass": #符合条件的尾缀flist_need.append(flist[i]) #将符合条件的名称存入list
- 如何在开头添加字符串,而不是结尾
经过搜索,众多文章都提到了seek(0,0)
,这是让指针移动到指定位置的函数。前面的0代表位移量,后面的0代表从文件开头开始(1代表当前位置,2代表末尾位置)。
with open(path0 + flist_need[i], 'r+', encoding='utf-8') as f: #注意此处encoding,而且必须是'r+'content = f.read()f.seek(0,0) #必须得有,不然还是在尾巴那里加f.write(insert_str + '\n' + content) #按照这个保存原本的内容->存入新内容的逻辑,应该不需要seek啊。但是去掉seek后会导致插在最后一行
- 编码问题
首先是报错,然后改成utf-8后,只有前两个文件成功了,但是后面的文件全乱码了…
用notepad++查看了一下编码格式,发现前两个文件格式是utf-8,后面两个就变成utf-16了。要解决这个问题,需要分开处理。
最终代码
from os import listdir
import os insert_str = "[Script Info]" #要插入的内容
path0 = "你的文件夹路径" flist = listdir(path0) #获取所有文件名称
flist_need = [] #存放所需的名字for i in range(0, len(flist)):extension = flist[i].split(".")[-1] #获取尾缀if extension == "ass":flist_need.append(flist[i]) #获取所有字幕名#print(flist_need) #测试for i in range(2):with open(path0 + flist_need[i], 'r+', encoding='utf-8') as f: #如果是'a+'之类的,文件会只剩[Script Info]content = f.read()f.seek(0,0) #必须得有,不然还是在尾巴那里加f.write(insert_str + '\n' + content)for i in range(2,24):with open(path0 + flist_need[i], 'r+', encoding='utf-16') as f:content = f.read()f.seek(0,0) #必须得有,不然还是在尾巴那里加f.write(insert_str + '\n' + content)
总结
- 在
from os import listdir
里,listdir(文件夹路径)
可以获取该文件夹里面所有文件名(但是子文件夹里面的名字无法访问)。 - seek()函数可以帮我们指定指针指向的文件的位置。
seek(位移数, [起始位置])
,起始位置默认为0,即开头;1为当前位置;2为末尾。 - 只要打开文件就要注意编码问题!
利用Python批量修改多个ass字幕文件相关推荐
- python 修改文件名_【学习分享】利用python批量修改文件名
1 前言 分享一个利用python批量修改文件名的方法,我们以前分享过用DOS命令来批量修改文件名,但是如果要修改多个文件夹内的文件名,用DOS命令就不好处理了,我们就来分享一下如何用python处理 ...
- 利用Python将WEBVTT格式的视频字幕文件转为SRT格式
1 WebVTT & SRT 格式 WebVTT字幕格式与SRT字幕格式主要区别在于时间格式的区分. 下面是一个WebVTT格式的字幕文件 WEBVTT1 00:00:20.000 --> ...
- 利用python批量修改文件名称
一.基础知识: 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名 renames:可以修改文件名,还可以修改文件上级目录名称 另一个用到的方 ...
- python批量修改word特定位置的内容_利用python批量修改word文件名的方法示例
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,Python批量修改文件名...
处理语料库时,有些文件名字很不规则,为了方便处理,同义按数字顺序修改名称,主要是用到os模块: import os def RenameFiles(srcdir): #将目录下所有的文件命名为数字开头 ...
- python批量修改文件名(将中文改为英文首字母)和xml文件
数据集中有中文,网络训练中报错,因此需要把其中的中文替换为英文. 01 批量修改文件名 利用python批量修改文件名,把文件名中的汉字自动替换成其首字母. import os; import pyp ...
- Python批量修改文件格式
工作中遇到要把多个apk格式文件改成zip包格式,这是一个繁琐的步骤.利用Python脚本并自定义右键运行.py文件给工作带来很大的方便,下面做一个简单的介绍: 前置条件: 要修改的apk包名称:XX ...
- python批量修改文件扩展名
python批量修改文件扩展名录 前言 代码如下 前言 利用python将文件夹里的.txt文件修改为.tif文件. 代码如下 import os dir='/home/下载/'#文件所在目录 fil ...
- json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?
本期的主题是利用Python来实现对视频文件时间长度的读取. 在学习编程语言时,相比较于通过书本来学习知识,我更喜欢通过观看学习视频的方式来进行学习,通过主讲老师的讲解,我能很直观且快速的了解一些知识 ...
- python批量生成图片_利用Python批量生成任意尺寸的图片
实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...
最新文章
- 如何从字符串中删除文本?
- MacBook Pro Homebrew 国内镜像加速
- opencv 一堆算法,图像处理等
- python3.7下载tensorflow_【AI初体验】在anaconda中python3.7版本安装Tensorflow 与 Keras来玩玩...
- coreldraw x8段落_CorelDRAW X8中文版从入门到精通
- Java selenium 获取表格数据_Java+Selenium 如何参数化验证Table表格数据
- 京泉华:与小米生态链公司已在智能家居领域等展开相关业务合作
- Java并发编程-BlockingQueue阻塞队列
- Python应用|TOPSIS综合评价法与案例分析
- CF 581A Vasya the Hipster
- 基频和倍频的概念_基频峰,泛频峰,倍频峰,二倍频峰的区别
- 苹果双系统 计算机意外的重新启动,用Boot camp 安装双系统时突然重启,打… - Apple 社区...
- web -【在线聊天】
- Open Policy Agent(OPA) rego使用
- springboot考研规划系统 毕业设计-附源码541230
- 2019北航_夏令营
- JavaScript-05
- 梯度下降学习率的影响
- python发短信脚本_python自动发送短信
- 千人千面智能淘宝店铺背后的算法研究登陆人工智能顶级会议AAAI 2017