如何从 Toutube 同时下载视频并批量嵌入其字幕

我要做的全部事情就是下载一些课程,这些课程在 youtube 上对我有很大帮助,并在视频中嵌入 Zh-Hans 字幕,然后将其提交到不支持外部字幕的中文网站。

这个东西可以帮助那些英语说得不好并且无法访问 youtube 的中国学生。

Youtube-dl config

文件路径是 ~/.config/youtube-dl/config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--o '%(playlist_index)02ds - %(title)s.%(ext)s'
--no-mtime
--proxy socks5://127.0.0.1:1080

--ignore-errors

-f bestvideo[height<=?1080]+bestaudio/best

--merge-output-format 'mkv'

--write-auto-sub --sub-lang 'zh-Hans'

--convert-subs 'ass'

--embed-subs

同时下载

1
2
3
4
5
6
7
8
9
playlist='https://www.youtube.com/playlist?list=...'
num=70
i=1
while (($i <= $num))
do
end=$(( i+1 ))
youtube-dl --playlist-start $i --playlist-end $end $playlist > "log-$i-$end.txt" 2>&1 &
i=$(($end+1))
done

批量翻译文件名

下载列表中的所有视频后,用

ls | grep mkv | sed "s/\.mkv//"

然后复制并粘贴到 Google 以获取翻译后的文本,然后将其保存到 zh.txt

批量嵌入字幕

1
2
3
4
5
6
7
8
9
10
11
tmp="tmp.mkv"
mkdir -p embedSub
for f in *.mkv; do
read -r zh <&3
echo "$f\n$zh"
# ass="$( echo $f | sed 's/\.mkv//').zh-Hans.ass"
cp $f $tmp
ffmpeg -nostats -loglevel 24 -n -i $tmp -vf subtitles=$tmp "embedSub/$zh.mkv";
done 3<zh.txt

rm $tmp

在 Intel Core i7 上,我通常花了一整夜的时间来录制 20 个视频,而一个小时的视频需要 20 分钟才能嵌入其字幕。