yt-dlp 只能下载完整视频,不支持下载指定视频的时间段。而 ffmpeg 可以从输入的视频中截取指定时间段,即使输入的视频是网络链接而非本地文件。
yt-dlp 加上 -g 参数可以只打印出视频下载链接而不下载视频。所以,可以把 yt-dlp -g 的输出作为 ffmpeg 的输入,结合 yt-dlp 和 ffmpeg 实现下载网络视频中指定的一段。
不过不是所有视频格式都能用这种方式。对于 youtube 来说,至少格式 22(720p 的 h264 视频 + AAC 音频)、格式 137(1080p 的 h264 视频)、格式 140(AAC 音频)是可以的。
如果要下载 720p 的,只需要一行命令:
ffmpeg -copyts -ss 00:17:51 -to 00:18:56 -i $(yt-dlp -g mULUDboJnB0 -f 22) -c copy 22.mp4
如果要下载 1080p 的,需要分别下载音频和视频,然后合并:
ffmpeg -copyts -ss 00:17:51 -to 00:18:56 -i $(yt-dlp -g mULUDboJnB0 -f 137) -c copy 137.mp4
ffmpeg -copyts -ss 00:17:51 -to 00:18:56 -i $(yt-dlp -g mULUDboJnB0 -f 140) -c copy 140.m4a
ffmpeg -i 137.mp4 -i 140.m4a -c copy 137+140.mp4