和Twitch相比,从油管下载长直播进行剪辑是比较麻烦的事情。油管的剪辑功能只是给播放器设置了开始和结束时间,实际播放的还是原视频。
而且,下载视频也很麻烦。油管在网页上播放的视频是VP9编码的,想下载到适用于后期剪辑的视频需要用IDM或者yt-dlp之类的软件进行解析。
在大多数情况下,我们下载直播视频只是为了截取其中的少数片段,那么有没有办法可以只下载一部分视频呢?所以我前几天找了资料研究了一下。
结论:可以用yt-dlp解析出视频的链接,然后直接传给ffmpeg进行片段的下载。
以下是原理部分,不想看的可以直接拉到结尾
大前提:安装yt-dlp和ffmpeg,请参阅官方网站,这里不赘述
首先,在命令行输入yt-dlp -g 视频链接,这时候会看到输出了两个链接。
对于刚结束直播不久的视频,第一个链接应该是manifest开头

如果看到了manifest开头的链接,那就可以直接取用此链接,交给ffmpeg进行片段下载。
命令行输入ffmpeg -ss 开始时间 -to 结束时间 -i “manifest链接” -c copy 输出文件名.mp4
注意要在链接的前后加上双引号

回车,等待运行完成就可以拿到切片了。
如果这个直播已经有好几天了,那么获取到的两个链接可能都是xxxxx.googlevideo.com的。

如果是这种情况,那就要使用yt-dlp的格式筛选功能重新获取链接,因为在默认情况下这两个链接是vp9+opus,不方便后期再编辑的。
命令行输入 yt-dlp -g -S “ext” 视频链接,得到输出结果:

这两个链接,一个是视频,一个是音频,都要提供给ffmpeg。
命令行输入ffmpeg -ss 开始时间 -to 结束时间 -i “第一个链接” -ss 开始时间 -to 结束时间 -i “第二个链接” -c copy 输出文件名.mp4
回车运行即可,和第一个的区别就是要输入两个链接,每个链接前都要指定一次开始结束时间。
由于音视频片段的关键帧间隔不一样,下载下来的切片开头几秒可能会没有声音,可以把下载切片时设置的开始时间提前几秒,在后期的时候剪掉不需要的部分。或者去掉-c copy,让ffmpeg重新编码一遍(慢,画质有损失)
原理部分结束
因为这个方法的前期环境配置有点复杂,所以我把这个流程做成了GitHub Actions,直接输入视频链接,开始和结束时间就可以开始切片
首先注册登录GitHub,打开https://github.com/RnJ4/YTClipper,点击右上角的Fork

然后在你的账号下就会生成一个一模一样的源,地址是github.com/你的用户名/YTClipper
点击Actions标签

从其他账户复制(fork)过来的应用,GitHub会问你是否要启用Actions,点击确认启用就行
然后,在左边的侧边栏选择你要执行的动作
第一个(Clip)是直接复制原始的视频流,速度快但是开始结束时间可能不是很准确
第二个是重新编码,时间准确,但是很慢。
一般推荐用第一个,可以把你的开始和结束时间多加几秒,然后后期再剪掉不需要的部分

点选动作之后再点击右边的Run workflow. 输入视频链接,开始和结束时间点击绿色的Run workflow运行。

刷新页面,就可以看到切片工作正在进行中了,等待完成后即可从工作的详情页里下载切好的切片

关于配额限制:GitHub限制免费账户的存储空间为500M,所以完成的切片记得及时删除。每月允许的最大运行时长为2000分钟,一般应该用不完吧。
可以同时开始多个切片的工作,但是总产物大小不能超过存储限制。如果你是学生,可以申请免费的GitHub Pro,把存储空间限制提升到1G。
教程结束,希望这个能够帮助大家更好的进行视频编辑。