Youtube-dlコマンドで字幕をダウンロードする

add 2020-06-12

以下の例では動画ファイルと字幕ファイルが別々に作成されます．動画に字幕ファイルを埋め込めないかなとオプションを確認したら --embed-subs というオプションがありました．これを利用したら1つの動画ファイルの中に字幕も埋め込めました :)

$ youtube-dl --help|grep -- --embed
--embed-subs Embed subtitles in the video (only for mp4, webm and mkv videos)
--embed-thumbnail Embed thumbnail in the audio as cover art

ただし，Debian sid amd64環境では別途 atomicparsley パッケージも必要でした．

atomicparsley パッケージを入れる前のエラー

ERROR: AtomicParsley was not found. Please install.

atomicparsley パッケージの導入

$ sudo apt install atomicparsley

480pでダウンロードして日本語機械翻訳字幕を埋め込み

$ youtube-dl --write-auto-sub --sub-lang=ja --embed-subs -c -f 133 -o './%(title)s.%(ext)s' 'https://www.youtube.com/playlist?list=PLYUtdmpYPTTKgmkaIUFDiNvYPxQUzuY8y'

以下のあたりでも書いたのですが，回線が不安定で途中で止まったり解像度が低かったりするのでVODをローカルにダウンロードしてから視聴することが多いです．

細い不安定な回線でオンライン動画を視聴する試み | edocr

linux:youtube-dl [wiki.matoken.org]

日本語の動画の場合はこれで問題ないのですが， id:naruoga/@naru0gaさんがLibreOffice Asia Conference 2019 Tokyo 基調講演の動画に日本語字幕を付けてくれました．OSSが興味ある人なら気になる感じの内容のようなので視聴したいけど字幕ダウンロードしたこと無いなと試してみました．

LibreOffice Asia Conference 2019 Tokyo 基調講演の紹介 – おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

導入していない人はインストールしましょう．バイナリを1つダウンロードして実行権を付けるだけです．以下は ~/bin に導入する例．

$ curl -L https://yt-dl.org/downloads/latest/youtube-dl -o ~/bin/youtube-dl
$ chmod +rx ~/bin/youtube-dl

先ずはhelpを確認します．

$ youtube-dl --help|grep 'Subtitle Options:' -A7
Subtitle Options:
--write-sub Write subtitle file
--write-auto-sub Write automatically generated subtitle file (YouTube only)
--all-subs Download all the available subtitles of the video
--list-subs List all available subtitles for the video
--sub-format FORMAT Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
--sub-lang LANGS Languages of the subtitles to download (optional) separated by commas, use --list-subs for available
language tags

結構シンプルな感じですね．早速試してみます．

先ずは --list-subs で字幕の一覧を取得してみます．

$ youtube-dl --ignore-config --list-subs QS-Zz-2ovo0
QS-Zz-2ovo0: Downloading webpage
QS-Zz-2ovo0: Looking for automatic captions
QS-Zz-2ovo0: Downloading MPD manifest
Available automatic captions for QS-Zz-2ovo0:
Language formats
gu vtt, ttml, srv3, srv2, srv1
zh-Hans vtt, ttml, srv3, srv2, srv1
zh-Hant vtt, ttml, srv3, srv2, srv1
gd vtt, ttml, srv3, srv2, srv1
ga vtt, ttml, srv3, srv2, srv1
gl vtt, ttml, srv3, srv2, srv1
lb vtt, ttml, srv3, srv2, srv1
la vtt, ttml, srv3, srv2, srv1
lo vtt, ttml, srv3, srv2, srv1
tt vtt, ttml, srv3, srv2, srv1
tr vtt, ttml, srv3, srv2, srv1
lv vtt, ttml, srv3, srv2, srv1
lt vtt, ttml, srv3, srv2, srv1
tk vtt, ttml, srv3, srv2, srv1
th vtt, ttml, srv3, srv2, srv1
tg vtt, ttml, srv3, srv2, srv1
te vtt, ttml, srv3, srv2, srv1
fil vtt, ttml, srv3, srv2, srv1
haw vtt, ttml, srv3, srv2, srv1
yi vtt, ttml, srv3, srv2, srv1
ceb vtt, ttml, srv3, srv2, srv1
yo vtt, ttml, srv3, srv2, srv1
de vtt, ttml, srv3, srv2, srv1
da vtt, ttml, srv3, srv2, srv1
el vtt, ttml, srv3, srv2, srv1
eo vtt, ttml, srv3, srv2, srv1
en vtt, ttml, srv3, srv2, srv1
eu vtt, ttml, srv3, srv2, srv1
et vtt, ttml, srv3, srv2, srv1
es vtt, ttml, srv3, srv2, srv1
ru vtt, ttml, srv3, srv2, srv1
rw vtt, ttml, srv3, srv2, srv1
ro vtt, ttml, srv3, srv2, srv1
bn vtt, ttml, srv3, srv2, srv1
be vtt, ttml, srv3, srv2, srv1
bg vtt, ttml, srv3, srv2, srv1
uk vtt, ttml, srv3, srv2, srv1
jv vtt, ttml, srv3, srv2, srv1
bs vtt, ttml, srv3, srv2, srv1
ja vtt, ttml, srv3, srv2, srv1
or vtt, ttml, srv3, srv2, srv1
xh vtt, ttml, srv3, srv2, srv1
co vtt, ttml, srv3, srv2, srv1
ca vtt, ttml, srv3, srv2, srv1
cy vtt, ttml, srv3, srv2, srv1
cs vtt, ttml, srv3, srv2, srv1
ps vtt, ttml, srv3, srv2, srv1
pt vtt, ttml, srv3, srv2, srv1
pa vtt, ttml, srv3, srv2, srv1
vi vtt, ttml, srv3, srv2, srv1
pl vtt, ttml, srv3, srv2, srv1
hy vtt, ttml, srv3, srv2, srv1
hr vtt, ttml, srv3, srv2, srv1
ht vtt, ttml, srv3, srv2, srv1
hu vtt, ttml, srv3, srv2, srv1
hmn vtt, ttml, srv3, srv2, srv1
hi vtt, ttml, srv3, srv2, srv1
ha vtt, ttml, srv3, srv2, srv1
mg vtt, ttml, srv3, srv2, srv1
uz vtt, ttml, srv3, srv2, srv1
ml vtt, ttml, srv3, srv2, srv1
mn vtt, ttml, srv3, srv2, srv1
mi vtt, ttml, srv3, srv2, srv1
mk vtt, ttml, srv3, srv2, srv1
ur vtt, ttml, srv3, srv2, srv1
mt vtt, ttml, srv3, srv2, srv1
ms vtt, ttml, srv3, srv2, srv1
mr vtt, ttml, srv3, srv2, srv1
ug vtt, ttml, srv3, srv2, srv1
ta vtt, ttml, srv3, srv2, srv1
my vtt, ttml, srv3, srv2, srv1
af vtt, ttml, srv3, srv2, srv1
sw vtt, ttml, srv3, srv2, srv1
is vtt, ttml, srv3, srv2, srv1
am vtt, ttml, srv3, srv2, srv1
it vtt, ttml, srv3, srv2, srv1
iw vtt, ttml, srv3, srv2, srv1
sv vtt, ttml, srv3, srv2, srv1
ar vtt, ttml, srv3, srv2, srv1
su vtt, ttml, srv3, srv2, srv1
zu vtt, ttml, srv3, srv2, srv1
az vtt, ttml, srv3, srv2, srv1
id vtt, ttml, srv3, srv2, srv1
ig vtt, ttml, srv3, srv2, srv1
nl vtt, ttml, srv3, srv2, srv1
no vtt, ttml, srv3, srv2, srv1
ne vtt, ttml, srv3, srv2, srv1
ny vtt, ttml, srv3, srv2, srv1
fr vtt, ttml, srv3, srv2, srv1
ku vtt, ttml, srv3, srv2, srv1
fy vtt, ttml, srv3, srv2, srv1
fa vtt, ttml, srv3, srv2, srv1
fi vtt, ttml, srv3, srv2, srv1
ka vtt, ttml, srv3, srv2, srv1
kk vtt, ttml, srv3, srv2, srv1
sr vtt, ttml, srv3, srv2, srv1
sq vtt, ttml, srv3, srv2, srv1
ko vtt, ttml, srv3, srv2, srv1
kn vtt, ttml, srv3, srv2, srv1
km vtt, ttml, srv3, srv2, srv1
st vtt, ttml, srv3, srv2, srv1
sk vtt, ttml, srv3, srv2, srv1
si vtt, ttml, srv3, srv2, srv1
so vtt, ttml, srv3, srv2, srv1
sn vtt, ttml, srv3, srv2, srv1
sm vtt, ttml, srv3, srv2, srv1
sl vtt, ttml, srv3, srv2, srv1
ky vtt, ttml, srv3, srv2, srv1
sd vtt, ttml, srv3, srv2, srv1
Available subtitles for QS-Zz-2ovo0:
Language formats
en vtt, ttml, srv3, srv2, srv1
ja vtt, ttml, srv3, srv2, srv1

大量に出てきましたが，上の方の Available automatic captions の物はYoutubeの自動生成&自動翻訳されたもののようです．
Available subtitles 以下のものが人の手で翻訳されたものだと思います．今回の動画では en, ja があるようです．

--write-sub --sub-lang=ja で日本語の字幕を書き出すよう指定してみます．

$ youtube-dl --ignore-config --write-sub --sub-lang=ja QS-Zz-2ovo0

動画名.mp4 と 動画名.ja.vtt というファイルが入手できました．動画名.言語.vtt というファイルが字幕ファイルのようです．この2ファイルが同じディレクトリにある状態で動画プレイヤーで .mp4 を再生すると字幕が表示されました :)

Totemでは表示されませんでしたが，メニューから字幕ファイルを指定すると表示されました．

$ ls LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.*
'LibreOffice Asia Conference 2019 - LibreOffice, the many different faces of a global community.ja.vtt'
'LibreOffice Asia Conference 2019 - LibreOffice, the many different faces of a global community.mp4'
$ mpv ./LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.mp4
$ cvlc ./LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.mp4

これでとりあえず目的は果たせました．
でもYoutubeでのみですが，自動生成翻訳字幕のダウンロードが気になるのでこれも試してみます．
今度は日本語字幕の存在しないDebconf19のもので日本語の自動生成字幕 --sub-lang=ja --write-auto-sub オプション&解像度を240pにしておきます．

$ youtube-dl --sub-lang=ja --write-auto-sub -f 'bestvideo[height<=240]+bestaudio/best[height<=360]' U17DID4vdpc

自動生成&機械翻訳なのでおかしなところはありますがいけたようです．

後はライブ動画やライブ音声のリアルタイム翻訳ができるといいなーと思ったりも．DeepSpeechで文字起こししてみんなの翻訳とかDeeplに都賀具感じでリアルタイムで出来ないかなとか．

環境

$ youtube-dl --version
2020.05.03
$ dpkg-query -W mpv vlc totem firejail
firejail 0.9.62-3
mpv 0.32.0-1
totem 3.34.1-2+b1
vlc 3.0.10-1

9