简易快速自制视频内嵌书签_PotPlayer书签转换为MKV书签


简易快速自制视频内嵌书签
PotPlayer书签转换为MKV书签

应用场景

教程视频较长,给视频添加书签方便跳转到想看的部分。PotPlayer 播放器可以实现,但是 pbf 文件只能自用,且不能嵌入视频文件。

综上,写了个脚本将 pbf 书签文件转换为 OGM 风格的简易章节文件,给 MKVTool 混流嵌入视频用。

PotPlayer 使用书签功能保存 pbf 文件。

首先设置好书签选项。PotPlayer -> 播放 -> 章节/书签,勾选以下选项:

  • 将书签保存在视频文件夹内
  • 添加带标题的书签
  • 显示书签列表

在播放视频到需要书签的时候按 P 键,命名章节。

全部完成后,在视频文件夹得到同名 pbf 文件。

使用脚本转换为 mkv 适用的 OGM 简易风格章节文件。

python3 pbf2mkv.py *.pbf *.txt

pbf2mkv脚本

import datetime
import sys
import os

def is_valid_line(line):
    # 定义你的验证逻辑,例如,检查是否包含特定数量的分隔符
    # 以下是一个示例,它假设每行至少应包含一个等号和两个星号
    return line.count('=') >= 1 and line.count('*') >= 2

def pbf_to_mkv(input_file, output_file):
    with open(input_file, 'r', encoding='utf-16-le') as s:
        lines = s.readlines()
    chapters = []
    for line in lines:
        # 忽略不符合条件的行
        if not is_valid_line(line):
            continue

############# 提取"="符号前的数字,数字+1,然后转换为2位的十进制数
        num = int(line.split("=")[0]) + 1
        num = str(num).zfill(2)

############# 时间戳转换
# 提取"="和"*"之间的数字
        timestamp = int(line.split("=")[1].split("*")[0])
# 将时间戳转换为时间差
        td = datetime.timedelta(milliseconds=timestamp)
# 计算小时、分钟、秒和毫秒
        hours, remainder = divmod(td.total_seconds(), 3600)
        minutes, seconds = divmod(remainder, 60)
        seconds, millis = divmod(seconds, 1)
# 转换为00:00:00.000格式的时间
        time_str = f"{int(hours):02d}:{int(minutes):02d}:{int(seconds):02d}.{int(millis*1000):03d}"

############# 提取两个"*"之间的字符作为章节名
        content = line.split("*", 1)[1].split("*")[0]

############# 合并章节名
        
        chapters.append((f'CHAPTER{num}={time_str}', f'CHAPTER{num}NAME={content}'))

############# 写入OGM风格的简易章节文件
        with open(output_file, 'w', encoding='utf-8') as f:
            for chapter in chapters:
                f.write(f'{chapter[0]}' + '\n')
                f.write(f'{chapter[1]}' + '\n')

if __name__ == '__main__':
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    pbf_to_mkv(input_file, output_file)

MKVTool 混流合成。

在这里插入图片描述


参考资料

给MKV视频添加及制作章节或标签-百度经验 (baidu.com)

OHLIA/pbf2mkv: PotPlayer的书签文件转换为MKV适用的书签 (github.com)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 QProcess 类来启动 PotPlayer.exe,并将其嵌入到 PyQt5 的窗口中。以下是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton from PyQt5.QtCore import QProcess class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle('PotPlayer Example') # 创建一个垂直布局 layout = QVBoxLayout() # 添加一个按钮 button = QPushButton('打开 PotPlayer') button.clicked.connect(self.open_potplayer) layout.addWidget(button) # 将布局设置为主窗口的布局 self.setLayout(layout) def open_potplayer(self): # 创建一个 QProcess 对象,用于启动 PotPlayer.exe process = QProcess(self) # 设置启动参数 process.setProgram('PotPlayer.exe') process.setArguments(['--embed-window', str(self.winId())]) # 启动 PotPlayer.exe process.start() if __name__ == '__main__': app = QApplication(sys.argv) ex = MainWindow() ex.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们创建了一个简单的窗口,并添加了一个按钮。当用户点击按钮时,我们使用 QProcess 类启动 PotPlayer.exe,并将其嵌入到主窗口中。我们使用 `--embed-window` 参数来告诉 PotPlayer.exe 将自己嵌入到我们的窗口中。 请注意,为了使 PotPlayer.exe 成功嵌入到 PyQt5 窗口中,我们需要将主窗口的 winId 传递给 PotPlayer.exe。我们使用 `str(self.winId())` 来获取主窗口的 winId,并将其设置为 `--embed-window` 参数的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值