原文

起因

使用弹弹Play看番时字幕过大,大概长这样:

于是我便开始寻找解决办法

解决之路

首先,查看是不是弹弹Play的问题。
使用PotPlayer观看是这样:

显然是弹弹Play的问题,在尝试更换播放器内核等一系列操作后,仍然没有解决。于是,我打算更换字幕试试。

然鹅,虽然找到了字体正常的字幕,但是时间轴却和这个视频不对应…看来得尝试其他方法。

终于,在字幕设置的右下角发现了这个:

一查证,果然如此!但是用手一个一个地修改太浪费时间了,我立马想到python可以帮我。

使用python批量修改这些文件

  • 需求:在每个字幕(.ass)文件开头一行加上[Script Info]
  • 额外需求:以后遇到相似问题,小改代码还能接着用

所以,基本思路是:

  1. 获取文件路径
  2. 打开并修改文件

在此过程中,我遇到了一些问题和困难:

  1. 每个字幕文件名尽管遵循一定规则,但是不仅仅有数字(集数)上的差异,还有几个我找不出规律的字母。 其中的"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
  1. 如何在开头添加字符串,而不是结尾

经过搜索,众多文章都提到了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后会导致插在最后一行
  1. 编码问题

首先是报错,然后改成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字幕文件相关推荐

  1. python 修改文件名_【学习分享】利用python批量修改文件名

    1 前言 分享一个利用python批量修改文件名的方法,我们以前分享过用DOS命令来批量修改文件名,但是如果要修改多个文件夹内的文件名,用DOS命令就不好处理了,我们就来分享一下如何用python处理 ...

  2. 利用Python将WEBVTT格式的视频字幕文件转为SRT格式

    1 WebVTT & SRT 格式 WebVTT字幕格式与SRT字幕格式主要区别在于时间格式的区分. 下面是一个WebVTT格式的字幕文件 WEBVTT1 00:00:20.000 --> ...

  3. 利用python批量修改文件名称

    一.基础知识: 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名   renames:可以修改文件名,还可以修改文件上级目录名称 另一个用到的方 ...

  4. python批量修改word特定位置的内容_利用python批量修改word文件名的方法示例

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,Python批量修改文件名...

    处理语料库时,有些文件名字很不规则,为了方便处理,同义按数字顺序修改名称,主要是用到os模块: import os def RenameFiles(srcdir): #将目录下所有的文件命名为数字开头 ...

  6. python批量修改文件名(将中文改为英文首字母)和xml文件

    数据集中有中文,网络训练中报错,因此需要把其中的中文替换为英文. 01 批量修改文件名 利用python批量修改文件名,把文件名中的汉字自动替换成其首字母. import os; import pyp ...

  7. Python批量修改文件格式

    工作中遇到要把多个apk格式文件改成zip包格式,这是一个繁琐的步骤.利用Python脚本并自定义右键运行.py文件给工作带来很大的方便,下面做一个简单的介绍: 前置条件: 要修改的apk包名称:XX ...

  8. python批量修改文件扩展名

    python批量修改文件扩展名录 前言 代码如下 前言 利用python将文件夹里的.txt文件修改为.tif文件. 代码如下 import os dir='/home/下载/'#文件所在目录 fil ...

  9. json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?

    本期的主题是利用Python来实现对视频文件时间长度的读取. 在学习编程语言时,相比较于通过书本来学习知识,我更喜欢通过观看学习视频的方式来进行学习,通过主讲老师的讲解,我能很直观且快速的了解一些知识 ...

  10. python批量生成图片_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

最新文章

  1. 如何从字符串中删除文本?
  2. MacBook Pro Homebrew 国内镜像加速
  3. opencv 一堆算法,图像处理等
  4. python3.7下载tensorflow_【AI初体验】在anaconda中python3.7版本安装Tensorflow 与 Keras来玩玩...
  5. coreldraw x8段落_CorelDRAW X8中文版从入门到精通
  6. Java selenium 获取表格数据_Java+Selenium 如何参数化验证Table表格数据
  7. 京泉华:与小米生态链公司已在智能家居领域等展开相关业务合作
  8. Java并发编程-BlockingQueue阻塞队列
  9. Python应用|TOPSIS综合评价法与案例分析
  10. CF 581A Vasya the Hipster
  11. 基频和倍频的概念_基频峰,泛频峰,倍频峰,二倍频峰的区别
  12. 苹果双系统 计算机意外的重新启动,用Boot camp 安装双系统时突然重启,打… - Apple 社区...
  13. web -【在线聊天】
  14. Open Policy Agent(OPA) rego使用
  15. springboot考研规划系统 毕业设计-附源码541230
  16. 2019北航_夏令营
  17. JavaScript-05
  18. 梯度下降学习率的影响
  19. python发短信脚本_python自动发送短信
  20. 千人千面智能淘宝店铺背后的算法研究登陆人工智能顶级会议AAAI 2017

热门文章

  1. JavaWeb后端开发框架SSM+前端框架Layui简介
  2. 此计算机不支持动态磁盘,磁盘无法分区提示此操作系统不支持动态磁盘故障原因分析与解决...
  3. 信息论——最大流最小割定理
  4. 100 余个超实用网站
  5. 西门子200PLC指令详解——位逻辑指令
  6. JAVA 两个队列实现栈
  7. uni-app项目部署 打包 运行
  8. 博图可以用c语言编程吗,S7300能用C语言编程吗?
  9. httprunner 3.x学习2 - 测试用例结构(testcase)
  10. 工业相机选型和镜头焦距计算