Youtube批量下载视频并自动压入字幕,youtube-dl常用命令整理

我上一篇文档《Youtube视频及字幕下载心得》(https://blog.csdn.net/u012911347/article/details/82378720)先介绍了一部分内容,后来的使用过程中,我又对原来的操作进行了改进。先总结下原来的操作,从网页链接另存为的操作方式改进到了youtube-dl命令分别下载m4a和webm高质量音频和视频,然后下载字幕,使用MKVToolNix工具来压制成MKV文件。这样分别下载需要三条命令,感觉很不方便,尤其是播放列表那种有几十个视频的情况。

所以这里需要达成的目标是一条youtube-dl命令,直接下载下来视频,该视频含有音频和字幕。这样的要求可能会使用到复杂的命令,所以这里先将简单的命令整理下。

1.查看视频信息:

youtube-dl -F https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8

format code  extension  resolution note
249          webm       audio only DASH audio   60k , opus @ 50k, 14.50MiB
250          webm       audio only DASH audio   78k , opus @ 70k, 19.19MiB

第二行是输出信息,第一列的数字标志就是下面下载视频或者音频时-f参数用的。

2.下载一条音频或视频:

youtube-dl -f 249 https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8

[download] Destination: Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.webm
[download] 100% of 14.50MiB in 00:02

3.查看字幕:

youtube-dl --list-subs https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8


Language formats
en       vtt, ttml
pt-BR    vtt, ttml

4.下载自动生成的字幕:

youtube-dl --write-auto-sub --sub-lang en --skip-download https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8

[info] Writing video subtitles to: Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.en.vtt

这里虽然时自动生成的,但是文件名并没有加auto字样。

5.下载非自动生成的指定字幕:

youtube-dl --write-sub --sub-lang en --skip-download https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8

这里如果没有人工翻译好的字幕,则会提示“WARNING: video doesn't have subtitles”。

6.vtt字幕转srt:

ffmpeg -i some.vtt some.srt

6.下载含音频的视频,指定最高质量,注意要先安装上ffmepg:

youtube-dl --write-sub --sub-lang en --embed-sub -f bestvideo+bestaudio https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8

[ffmpeg] Merging formats into "Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.mkv"
Deleting original file Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.f135.mp4 (pass -k to keep)
Deleting original file Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.f251.webm (pass -k to keep)
[ffmpeg] Embedding subtitles in 'Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.mkv'

vtt字幕直接压进去的话时无法使用的,也就是视频播放的时候字幕不显示,可能该标准还是不如srt字幕能得到更多支持。

7.压入字幕时指定srt:

youtube-dl --write-sub --sub-lang en --embed-sub --convert-subtitles srt -f bestvideo+bestaudio https://www.youtube.com/watch?v=ZK3O402wf1c&list=PLE7DDD91010BC51F8

这个是最终的解决办法,指定非自动生成的字幕,且选择srt格式,音频和视频选择最高质量,最终输出mkv文件。不过不得不说,该方法存在一个问题,即字幕标没有标记为默认,具体看下面的解释。首先,MKVToolNix查看字幕信息:

这里如果值为“自动决定”,则视频播放的时候字幕是不自动播放的,也就是你即使有一条字幕,甚至四五条字幕,如果不标记默认,则视频播放的时候是没有字幕显示的。我用的MPC-HC和Kodi播放器都是一样的表现,即需要手动点击选择字幕播放。根据youtube-dl的提示,不能合并为mp4格式的时候会生成mkv,以上问题只出现在该格式上,也就是mp4格式的字幕会自动播放。

关于字幕不自动播放被误认为无字幕的问题,既然找到了问题,那就好解决了。首先ffmpeg对普通视频压入字幕的命令如下:

ffmpeg -i some.webm -i some.srt -c copy -c:s copy output.mkv

这里是直接保持文本复制的,也就是形成的mkv文件是软字幕的。如何指定默认字幕呢?如下:

ffmpeg -i 01.mkv -c copy -c:s copy -disposition:s:0 default new.mkv

这里的mkv文件已经含有字幕,通过该命令对其添加默认标记,从而能够自动显示字幕。更完整的命令如下:

ffmpeg -i some.webm -i some.srt -c copy -c:s copy -disposition:s:0 default new.mkv

8.下载列表。现在就还差一个目标,即对列表进行批量下载,这样就功德圆满了。如下:

youtube-dl --write-sub --sub-lang en --embed-sub --convert-subtitles srt -f bestvideo+bestaudio -i PLE7DDD91010BC51F8

这里使用了-i参数指定一个列表,后面就是列表id。下面放出自动批量下载的示例信息:

[download] Destination: Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.f135.mp4
[download] 100% of 116.85MiB in 00:44
[download] Destination: Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.f251.webm
[download] 100% of 39.14MiB in 00:19
[ffmpeg] Merging formats into "Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.mkv"
Deleting original file Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.f135.mp4 (pass -k to keep)
Deleting original file Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.f251.webm (pass -k to keep)
[ffmpeg] Converting subtitles
Deleting original file Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.en.vtt (pass -k to keep)
[ffmpeg] Embedding subtitles in 'Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.mkv'
Deleting original file Lec 1 _ MIT 18.06 Linear Algebra, Spring 2005-ZK3O402wf1c.en.srt (pass -k to keep)
[download] Downloading video 2 of 35
[youtube] QVKj3LADCnA: Downloading webpage
[youtube] QVKj3LADCnA: Downloading video info webpage
[info] Writing video subtitles to: Lec 2 _ MIT 18.06 Linear Algebra, Spring 2005-QVKj3LADCnA.en.vtt
[download] Destination: Lec 2 _ MIT 18.06 Linear Algebra, Spring 2005-QVKj3LADCnA.f135.mp4
[download]  94.1% of 126.81MiB at  1.27MiB/s ETA 00:05

简直完美,下载完成后可能就只需要改一点文件名了(如Lec 2改为Lec 02),中间文件都会自动删除的,非常非常好。

最后,感谢这些勤勤恳恳的开发人员,感谢开源。

猜你喜欢

转载自blog.csdn.net/u012911347/article/details/82414345