从 YouTube 下载视频

最近计划学习钢琴,有网友建议去看 Andrew Furmanczyk 的 How to play piano 系列视频进行学习,由于原视频是在 YouTube 上且字幕是由 YouTube 自动生成的,为了方便观看,需要下载下来。实际操作中,发现想要达到预期的效果并不容易,有很多细节需要注意,故作此文记录。

  • 下载工具
    youtube-dl
  • 代理配置
    --proxy
  • 下载自动生成的字幕文件
    --write-auto-sub
  • 字幕文件格式转换
    下载下来的字幕文件格式为 vtt,为了便于播放器读取,需转换为 srt 格式的文件 ffmpeg -i input.vtt output.srt
  • WARNING: Requested formats are incompatible for merge and will be merged into mkv.
    默认情况下,youtube-dl 将下载最佳画质和音质的流,然后将这些流打包到兼容的容器中。如果最佳的流不能存在 mp4 容器中时,youtube-dl 则会将它们打包到 mkv 容器中,这时就会看到这条警告。如果一定要将这些流打包到 mp4 容器中,则需要手动指定格式 -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]'
  • 以上这些配置可以直接写入 ~/.config/youtube-dl/config
    --no-playlist --write-auto-sub --proxy "socks5://localhost:80" -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' --user-agent 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
  • 批量转换 vtt 文件
    从 playlist 下载下来的会是多个 vtt 文件,可以使用 shell 脚本批量转换:
    #!/bin/bash
    for f in ./how_to_play_piano/*.vtt;
    do
        ffmpeg -i "$f" "${f%.vtt}".srt;
    done