Youtubeの自動字幕をテキストで抜き出すのに四苦八苦してやっとできた話。

プロトアウトスタジオの卒業制作でYoutubeの音声からテキスト化したいので、その実現可能性を探ります。

https://twitter.com/ShinsukeSutou/status/1405845625355206657

#概要
Youtubeから動画や字幕をダウンロードできる「ytdl-org/youtube-dl」を導入しようとする。
Linus、Macだと簡単そうなんだけどWindowsはexeが準備されており、dllが不足のエラーが出る。
「Microsoft Visual C++ 2010 再頒布可能パッケージ」をインストールすると良いらしいがMicrosoftのページが404になっている。
2015とか2012をインストールするがうまくいかない（下位互換があると思い込んでいたが、実はなかった）
「Microsoft Visual C++ 2010 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラム」をインストールしたらうまくいった！
dll不足エラーは出るけれどOK押して抜け続ければYoutubeの自動字幕をvttファイルでダウンロードできた。

#コマンド

自動字幕をダウンロードするコマンド（Windowsのコマンドプロントで実行）

>youtube-dl --sub-lang ja --write-auto-sub --skip-download "https://www.youtube.com/watch?v=mppA6nx_rsQ.f247"

普通の字幕のダウンロードコマンド（Windowsのコマンドプロントで実行）
※公式字幕つきの動画をみつけられなかったので未検証。

>youtube-dl --sub-lang ja --write-sub --skip-download "https://www.youtube.com/watch?v=YiAWVLkdYIo"


#試行錯誤の流れ

「ytdl-org/youtube-dl」を試してみます。

https://github.com/ytdl-org/youtube-dl

まずはGitHubからZIPでダウンロードして、手元で解凍して、Visual Studio Codeで中身を確認。

「Python extension for Visual Studio Code」の導入を勧められたのでインストールしました。

ちょっといきなりコードみてもわからない感じだったので、ちゃんと説明文を読んでいきます。

---
DESCRIPTION


youtube-dl - download videos from youtube.com or other video platforms
youtube-dl - youtube.comや他のビデオプラットフォームからビデオをダウンロードします。


To install it right away for all UNIX users (Linux, macOS, etc.), type:
すべてのUNIXユーザー（Linux、macOSなど）にすぐにインストールするには、次のように入力します。


>sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

If you do not have curl, you can alternatively use a recent wget:
curl がない場合は、最近の wget を使用することもできます。

>sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl


Windows users can download an .exe file and place it in any location on their PATH except for %SYSTEMROOT%\System32 (e.g. do not put in C:\Windows\System32).
Windowsユーザーは、.exeファイルをダウンロードして、PATH上の%SYSTEMROOT%\System32以外の任意の場所に置くことができます（例：C:\Windows\System32に置かない）。

You can also use pip:
また、pip を使用することもできます。


>sudo -H pip install --upgrade youtube-dl

This command will update youtube-dl if you have already installed it. See the pypi page for more information.
このコマンドは、すでにインストールされている場合、youtube-dlをアップデートします。詳しくはpipiのページをご覧ください。

macOS users can install youtube-dl with Homebrew:
macOSをお使いの方は、Homebrewでyoutube-dlをインストールできます。

>brew install youtube-dl

Or with MacPorts:
または、MacPortsで。

>sudo port install youtube-dl

Alternatively, refer to the developer instructions for how to check out and work with the git repository. For further options, including PGP signatures, see the youtube-dl Download Page.
また、gitリポジトリのチェックアウト方法や作業方法については、開発者向けの説明書をご参照ください。PGP署名を含むその他のオプションについては、youtube-dlダウンロードページをご覧ください。

DESCRIPTION
説明

youtube-dl is a command-line program to download videos from YouTube.com and a few more sites. It requires the Python interpreter, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work on your Unix box, on Windows or on macOS. It is released to the public domain, which means you can modify it, redistribute it or use it however you like.

youtube-dlは、YouTube.comやその他いくつかのサイトからビデオをダウンロードするためのコマンドラインプログラムです。Pythonインタープリタのバージョン2.6、2.7、3.2+が必要で、プラットフォームを選びません。Unix、Windows、macOSのいずれでも動作します。これはパブリックドメインとして公開されていますので、あなたが好きなように変更したり、再配布したり、使用したりすることができます。

>youtube-dl [OPTIONS] URL [URL...]


---

クライアント側での動作の説明っぽいですね。
サーバーサイドに置きたい場合どういう感じになるのかしら（知識不足）。

とりあえずクライアントに入れて先に進めていきましょう。
Windows用のexeをダウンロードしてダブルクリック。

エラーです(´・ω・｀)
![0619-installerr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/948320f9-c478-69ad-a3aa-e41e2b4cba0e.png)




https://knooto.info/youtube-dl/

>1 (と2) の配置場所でコマンドプロンプトを開いて youtube-dl --version を実行し、バージョンが表示されれば完了です。

あ、これかー。　→　同じ結果orz

「MSVCR100.dll」で検索すると、「Microsoft Visual C++ 2010 再頒布可能パッケージ」というファイルをダウンロード＆インストールすればよいという記事を発見。

https://www.bayashitv.com/2017/08/msvcr100dllwindows10.html


記事で紹介されていたリンク先はなくなっていたので、"Visual Studio 2015 の Visual C++ 再頒布可能パッケージ"をインストール。

http://watson-ai.com/download-software/download/msvcp140-download.html


って、うぉーい。
![0619-0951.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/5ebe230b-99de-d500-21ca-d95afe1b2881.png)
私の環境だと「2017」がインストールされてますね。
![0619-0956.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/740a78ea-bf2c-4d39-0c41-293b48f612bd.png)

Adobeのサイトには「Microsoft Visual C++ 2012 再頒布可能パッケージ」と書かれている。さっき2015でダメだったからダメそうだけど一応やってみる。

https://helpx.adobe.com/jp/creative-cloud/kb/error-opening-applications-in-windows-10.html

**なんでや工藤！**

![0619-0959.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/2eafd9ad-21e8-61bf-555e-56e70eb2f2d9.png)

が、youtube-dlは起動せずorz

OSを再起動してもダメで、x86のほうもインストールして再起動してみましたがダメ。
コントロールパネルを見ると以下のようにインストールされている。

![0619-1133.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/34f06537-7346-0f0d-2edb-c9863436d37f.png)

Cドライブで「MSVCR100.dll」を検索してみる。「C:\Windows\System32」に入ってるなぁ…


![0619-1144.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/c13f4777-4a01-e813-80ae-0b225dfd0c5f.png)


以下のサイトで紹介されてるのはGitHubじゃない公式サイト？からのダウンロードだけどexeの更新日時は同じ。予想はしてたが、症状変わらず。

https://laptopreneur.net/youtube-dl%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-youtube%E4%BF%9D%E5%AD%98/

ところでこのツール、サイトを読む感じ法律的に揉めてたのかな？

https://youtube-dl.org/


----
youtube-dl downloads
Latest (v2021.06.06) downloads:
youtube-dl youtube-dl.exe youtube-dl-2021.06.06.tar.gz
See the right for more resources.


As everybody already knows our dev repository has been reinstated not so long ago. You can read the full story here.
すでにご存じのように、少し前に私たちの開発用リポジトリが復活しました。この記事の全文はこちらをご覧ください。

We would like to thank GitHub for standing up for youtube-dl and making it possible to continue development without dropping any features. We appreciate GitHub taking potential legal risks in this regard.
私たちは、GitHubがyoutube-dlを支持し、いかなる機能も落とさずに開発を続けることを可能にしてくれたことに感謝します。GitHubが潜在的な法的リスクを冒してくれたことに感謝します。

We would also like to thank EFF and personally Mitch Stoltz for invaluable legal help.
また、EFF、そして個人的にはMitch Stoltz氏の貴重な法的支援にも感謝しています。

We would also like to heartily thank our main website hoster Uberspace who is currently being sued in Germany for hosting our essentially business card website and who have already spent thousands of Euros in their legal defense.
また、現在ドイツで訴訟を起こされているメインのウェブサイトホスティング会社Uberspaceにも心から感謝します。Uberspaceは、私たちの本質的なビジネスカードのウェブサイトをホスティングしてくれたことで、すでに数千ユーロの弁護費用を費やしています。

We also appreciate massive amount of support received lately and we are sorry we could not physically respond to everybody.
また、最近いただいた多くのご支援にも感謝しており、皆様にお応えできないことを申し訳なく思っています。

Finally, we would like to thank all youtube-dl users and contributors for using and improving youtube-dl.
最後に、youtube-dlを使用し、改善してくださっているすべてのyoutube-dlユーザーとコントリビューターに感謝したいと思います。

Thank you all.
ありがとうございました。

youtube-dl is back!
youtube-dlが戻ってきました!

----


とりあえずGoogle先生に軒並み聞いてみる。

https://enctools.com/youtube-dl/

https://qiita.com/grgrjnjn/items/b45da13c6e0172658129

>YouTubeに変更があるとyoutube-dlは使えなくなることがあります。その場合、アップデートする仕組みが用意されています。

**システムに組み込むならYoutube側の仕様変更も考慮しなきゃですね。。。**


うーん、ここまでみんなに使われていて、最近の記事もあるからWindows10だから起動できないってこともなさそうなんだけど…

あ、ダウンロードしたファイルだからセキュリティ解除かな。

![0619-1209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/a29dd07b-e176-7628-22a4-96218202ffc1.png)

違うorz
ちなみに実行するコマンドプロントも「管理者として実行」にしてみてますが、変わらず。うーん。


https://softaro.net/ydl-ui/

GUIで実装してるツールも見つけましたが、同じエラーが出現。



https://tyawanmushi.hatenablog.com/entry/Microsoft-Visual-C%2B%2B-Redistributable-Lists

>Visual C++ 再頒布可能パッケージは下位互換性がない！
2015 がインストールしてあるからといって 2013 以前が必要なソフトウェアが動くわけではない
このバージョンは Visual Studio のバージョンと紐付いている (実際には Visual C++ 自体のバージョンだが便宜上こう表現する) 例えばVisual Studio 2015 でビルドされたアプリケーションならば Visual C++ 2015 再頒布可能パッケージが必要

あ、そういうものなのか。じゃあ2010がなんとしてでも必要ってことか。

ん…セキュリティ更新プログラムはあるな。大本が404なんだからこっちをダウンロードしろってことかも？

Microsoft Visual C++ 2010 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラム (2011/08/09)(最新版)


x86版インストールしたら成功！

![0619-1226.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/5845fc6e-6ecb-439c-fdd5-3ad4d724aff8.png)
な、長かった…
「セキュリティ更新プログラム」という名前だったので、「大本」が先に必要なんだと思ってた。
というかMicrosoftさん、最初のダウンロードリンク404にするんじゃなくて、最新版へ案内してくださいよ…。



またエラー出るー!　今回は色々なdllがないとどんどん出てくる。

![0619-1229-01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/ed3ad74e-1a46-91ef-3e9f-c7729648d1cc.png)


![0619-1228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/4f14c532-9841-d15e-5c03-54b01324046f.png)



と思ったけど「OK」押してたらなんか進んだ。



![0619-1233.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/84275d47-e863-0675-05a9-91c04218856e.png)




**ダウンロードできたー！！!**
音声と動画が分かれるのはそういう仕様で、マージすることもできるらしいですが、今回は無視。

![0619-1234.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/f65adcf3-3588-ba34-14e6-16ca8ae7421b.png)


x64をインストールしてみましたが事象は変わらず、「〇〇.dllがありません」を13回くらい「OK」で抜けて、もう3回くらい出るのを抜けるとダウンロードできます。
これから字幕だけ抜いていきますけどその時には関係ないdllだといいな…

https://kacchanblog.com/tool/youtube-dl-getsub


さて、コマンドを投入…失敗。でもこれはすぐに原因がわかって、Windowsなので文字列はダブルクォーテーションで囲む必要があるだけでした。

![0619-1250.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/64fc07d0-5649-eab4-5912-301b189a32ef.png)

で、日本語の字幕があることが確認できました。（元動画を目視すると自動生成の字幕でした）

![0619-1252.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/84373640-c6a8-2457-605c-8f78d09ae697.png)

では字幕だけダウンロード開始。残念ながら7回dllエラーは出ます。


ダウンロードできた！

![0619-1319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/fd639298-06cc-51d6-7a74-04b8f9408b54.png)




しかし、ttmlフォーマットを指定してのはできませんでした。引数なしではダウンロードできているvttも引数つけるとダウンロードできないので引数が変わってる可能性あり？

![0619-1305.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/4f109487-1963-282d-80bc-b830e2e3db29.png)


うーん、でもGitHub見る限り合ってる気がする。

![0619-1310.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/e8d391e6-1b34-5d9c-8312-c88cb1fcd066.png)

ダブルクォーテーションで囲ってみたり（でもjaが囲ってないんだから関係ないはず）、GitHubにある例の「ass/srt/best」にしてみたけど変わらず。
これはもうdllがないのがダメなのかな。

そういえば「Pythonインタープリタのバージョン2.6、2.7、3.2+」という条件がありました。あれ、ひょっとしてこれがdllエラーの原因？と思ってインストールしてみましたが、変わらず。

インストールしたのは以下のバージョンです。

　　Python 3.2.5 - May 15, 2013
　　Python 2.7.18 - April 20, 2020　（これだけPATHを通すオプションが選べたのでインストールを選択しました）
　　Python 2.6.6 - Aug. 24, 2010

インストール方法は以下を参考にさせていただきました。

https://mynavi-agent.jp/it/geekroid/2019/12/post-154.html



#今回完了したTODO
まずは動かしてみる→済
Pythonインタープリタのバージョン2.6、2.7、3.2+の導入方法を調べる→済
フォーマット引数での指定方法があっているか確認する。→済

#次のTODO
vttとttml形式の違いを調べる。
参考記事の"xmlでもあるttml形式が個人的には加工しやすそうだなと感じた。"が本当か調べる。
　　vttフォーマットでテキストを検索してカウントできるかやってみる。
サーバー側で動かす実装方法を調べる。
　　Linuxサーバーに乗せる？
　　そこまでするよりユーザーのクライアント動作としてしまう？
自動字幕ではなく、ちゃんと字幕がある場合はそちらをダウンロードするような仕組みを考える。
　　公式字幕つきの動画をみつけてコマンドが正しく動くか確認する。
Youtube側の仕様変更の際のバージョンアップマニュアルを作成する。