Skip to content

Latest commit

 

History

History
192 lines (152 loc) · 3.73 KB

435-2583847-读写字幕_srt文件_生成字幕效果.sy.md

File metadata and controls

192 lines (152 loc) · 3.73 KB
show version enable_checker
step
1.0
true

列表 - 类型

回忆

  • 上次了解了
    • f.readlines()
    • list(f)
  • 读文件的时候
    • readlines()按照行读出来
    • 生成一个列表 list
    • 列表 list 是一个容器

图片描述

  • 可以对于字幕srt文件进行操作吗?🤔

文件来源

图片描述

总共六句歌词

  • 需要在终端
    • 根据歌词起止时间
    • 实时播放歌词
1
00:00:00,300 --> 00:00:03,166
摔倒 爬起来

2
00:00:03,333 --> 00:00:06,166
揉倒是我的用心

3
00:00:06,700 --> 00:00:11,200
明亮与技巧交错融合

4
00:00:13,400 --> 00:00:16,800
向前冲永不停息

5
00:00:16,866 --> 00:00:20,200
触碰地面的那一刻

6
00:00:20,200 --> 00:00:24,800
挣脱束缚展翅飞翔
  • 首先要找到
    • 每句歌词的截止时间

找到截止时间

with open("柔道之歌.srt") as f:
    l = f.readlines()
for num in range(len(l)):
    #print(num,l[num],sep=":::::")
    #print(num%4,"======")
    if num%4 == 1:
        s = l[num]
        s = s.replace("\n","")
        s = s.replace(",",".")
        print(s[23:])
  • 结果

图片描述

  • :w|!python3 % > end_time
  • 输出重定向

得到时长

with open("end_time","r") as f:
    l = f.readlines()
for num in range(len(l)):
    l[num] = l[num].replace("\n","")
for num in range(len(l)-1):
    f1 = float(l[num+1])
    f2 = float(l[num])
    f = f1 - f2
    print("time.sleep("+str(f)+")")
  • 输出每句时长

图片描述

生成语句

print("import time")
print("import os")
with open("jodo.srt") as f:
    l = f.readlines()
words = []
for num in range(len(l)):
    if num%4 == 2:
        s = l[num]
        s = s.replace("\n","")
        words.append(s)
start_time = l[1][6:12]
start_time = float(start_time.replace(",","."))
end_time = l[1][23:]
end_time = float(end_time.replace(",","."))
print("os.system(\"clear\")")
print("time.sleep("+str(start_time)+")")
print("print(\"" + words[0] + "\")")
print("time.sleep("+str(end_time)+")")
with open("end_time","r") as f:
    l = f.readlines()
for num in range(len(l)):
    l[num] = l[num].replace("\n","")
for num in range(len(l)-1):
    print("os.system(\"clear\")")
    print("print(\"" + words[num+1] + "\")")
    f1 = float(l[num+1])
    f2 = float(l[num])
    f = f1 - f2
    print("time.sleep("+str(f)+")")

  • 输出结果

图片描述

  • 重定向 到song.py

song.py

import os
import time
os.system("clear")
time.sleep(0.3)
print("摔倒 爬起来")
os.system("clear")
print("柔道是我的用心")
time.sleep(3.0000000000000004)
os.system("clear")
print("明亮与技巧交错融合")
time.sleep(5.033999999999999)
os.system("clear")
print("向前冲永不停息")
time.sleep(5.600000000000001)
os.system("clear")
print("触碰地面的那一刻")
time.sleep(3.3999999999999986)
os.system("clear")
print("挣脱束缚展翅飞翔")
time.sleep(4.600000000000001)
  • 保存并运行

图片描述

  • 节奏与音频同步

总结

  • 这次研究了
    • 纯文本的字幕文件
    • srt文件
    • 并且让他根据时间线
    • 在终端播放
  • 可以从文本文件中
    • 读取 数据结构吗?
  • 比如
    • 元组
    • 列表
    • 字典?
  • 下次再说 👋