查看原文
其他

简单脚本按章节切分youtube视频

码中人 码农真经 2023-12-25

我经常从youtube搬运一些优秀的编程教学视频到bilibili,欢迎关注我的频道:

狂奔的男尸的个人空间 – 哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili。

https://space.bilibili.com/10074432

youtube没有B站的分P机制,youtube多个视频叫播放列表(playlist)。单个视频长度过长的情况下,提供分章节的机制。

生成这些章节信息,只需要在视频的描述中添加章节的开始时间及标题。如:

⭐️ Course Contents ⭐️
⌨️ (0:00:00) Intro
⌨️ (0:00:56) Lists
⌨️ (0:16:30) Tuples
⌨️ (0:29:49) Dictionaries
⌨️ (0:42:40) Sets
⌨️ (0:58:44) Strings
⌨️ (1:22:50) Collections
⌨️ (1:36:43) Itertools

然后youtube就会在视频的进度条上进行切分,鼠标浮动上各个片段上,会显示该章节的名称和进行预览。

而做为一个优秀的youtube搬运工,不能做简单的搬运。于是我写了个简单的js脚本,按描述中的章节时间切分视频。


1 结构化数据

通过编辑器列选择工具,初步删除一些的多余符号,如emoji、括号等。

对字符串按行分割成数组,去掉空行。

结构化数据,获取视频片段的json数据:

  • 获取视频片段开始时间 start

  • 获取视频片段名称name,去掉 ? 或 * 号等不合法的文件名符号。

2 生成FFmpeg分割视频字符串

FFmpeg 是视频处理最常用的开源软件。

它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。

FFmpeg分割视频的命令行为:

ffmpeg -i [input] -ss [start] -to [end] -c copy [output]

其中:

  • input 被分割视频文件名

  • start 片段开始时间

  • end 片段结束时间

  • output 分割完成视频文件名

我的思路就是将结构化的视频章节数据,转化成FFmpeg字符串。

选择reduceRight对数组进行字符串拼接:

  • 传入初始值 “last”,用于标识最后一个片段

  • 规整化文件名

  • 返回当前片段信息,为下一个片段提供结束时间

3 批量执行FFmpeg命令

执行以上脚本,得到FFmpeg命令行字条串:

打开cmd命令行,去到 Intermediate Python Programming Course.mp4所在的目录,执行以上脚本,即可分割视频。

上传到bilibili:中级python教程【6小时】_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

完整代码:https://gitee.com/mzhren/codes/nv93tgl5mc80qodzsajuf61

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存