ytdlでYoutubeダウンロード+Macでファイル変換&編集

もう、無限に広告がポップしてくる詐欺ソフトに悩まされることはありません。
我々エンジニアはプログラミングとCUIという頼れる味方がいます。

## この記事を読むと

- ターミナルから簡単&爆速にYoutubeから動画をダウンロードできます。
- ファイル形式の変換と時間指定の切り抜きのお勧め方法もカバー

## 環境

- Macbook Pro 2017 13インチ
- MacOS Catalina ヴァージョン10.15.6

## やり方比較

### 没案1.Youtube　Premium

最も簡単にYoutubeの動画をオフラインで利用する方法はYoutube Premiumに登録することです。料金も月1000円程度と破格。
しかしなんでYoutube Premiumではダメなのかというと、PCのローカルに落とせないからです。例えば、私の場合は英語音声のみで字幕無しの動画に対して、Amazon Transcribeを利用して文字起こしや翻訳を行うのがそもそもの動機でした。また、スマホアプリ上でしかオフライン利用できません。
やはり普通のファイルとしてローカルに落とすのが一番取り回しが良いです。

### 没案2.非公式のWebアプリ・Webサイト

無限に広告がポップしてくるだけで永遠にダウンロードできません。仮に運よく機能したとしてもダウンロードに膨大な時間がかかります。また、一定時間までのファイルにしか対応していません。
あと、そのようなWebアプリ・Webサイトは存在が違法です。
(後述するやり方で、*「個人利用の範囲」*かつ*「合法的にYoutubeアップロードされた動画」*をダウンロードするのは違法ではないという認識です。ただし、*youtubeの利用規約には違反する可能性*はあります)

### ytdlがベストアンサー

私がお勧めするのはytdlを利用してターミナルからダウンロードするやり方です。
ytdlはnode.jsのライブラリで、簡単にインストールできます。
ytdlならダウンロードが爆速です。
また、ファイルが長時間でもOK。
そして当然ですが、ターミナルなので一切広告等出てきません。

## ytdlの使い方

導入も利用も簡単ですが、いくつか注意点があります。一言で言えば、**ytdlには複数の機能がありますが、あくまでファイルのダウンロードのみに使用するべき**です。

### 環境構築

お馴染みのnpmコマンドを使って、グローバルにダウンロードします。

```
npm -g install ytdl
```

## 動作確認

ytdlのインストールが完了したら、実際にYoutubeからファイルをダウンロードできるか確認してみましょう。
お好きなディレクトリのターミナルから、下記を実行してください。desktop辺りが手頃でしょうか。

```
ytdl "http://www.youtube.com/watch?v=_HSylqgVYQI" > myvideo.mp4
```

ダウンロードできたでしょうか。
コマンドの意味を解説すると、`ytdl`の後の`""`内でダウンロードしたいYoutube動画のURLを指定して、myvideoという名前でmp4ファイルとしてダウンロードしています。

## 注意点
### ffmpegはインストールしない。
公式ページに紹介されているように、`ffmpeg`を併せてインストールするとファイル形式の変換や時間指定による切り抜き等のオプションが利用できるようになり、一見便利そうです。しかし、例えばmp3としてダウンロードすると、一見変換に成功しているのですが、実はファイルが壊れてしまいます。ファイルが壊れると何が問題かと言うと、一部のプラットフォーム上でしかファイルが動作しなくなります。例えばMacで言うと、Quick Time Playerではファイルを再生できるが、iTunesではファイルを認識できないので、再生どころかライブラリへの追加もできません。

また、`ffmpeg`のインストール自体も、環境を汚染するのでお勧めしません。`ffmpeg`がかなり重い=大量のモジュールとの依存関係がありながら、そのどれもが古いので、メインで使用しているnode.jsのモジュールと競合を引き起こす危険性があります。

### ファイルダウンロードのみに使用する

ファイル形式の変換も時間指定の切り抜きも、どちらもMacのデフォルトの機能やアプリで簡単に実行可能です。CUIをGUIで、それぞれ適したことに使い分けましょう。詳しくは後述しますが、ファイル形式の変換はFinder、時間指定の切り抜きはiMoviesを使用するのがお勧めです。

## お勧め運用方法

### ダウンロード

先ほど紹介したコマンドではいちいちファイル名を手動で入力しなくてはいけません。
下記のコマンドでは、ファイルの`タイトル - 作者`をファイル名としてダウンロードすることができます。

```
ytdl -o "{author.name} - {title}" "http://www.youtube.com/watch?v=_HSylqgVYQI"
```

あるいは、動画のタイトルだけも良いという場合は下記でも。

```
ytdl -o "{title}" "http://www.youtube.com/watch?v=_HSylqgVYQI"
```

### ファイル形式変換

ここでは音声ファイルに変換してみましょう。

Finderからファイルを選択したら右クリックして、一番下の「選択したビデオファイルをエンコード」をクリックしてください（ちなみに、「選択したビデオファイルをエンコード」は複数ファイルを選択した状態でも可能です）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/bf16d3a2-1e1a-24dd-3a27-9a1c9d3f551a.png)

「メディアをエンコード」というウィンドウが開くので、`設定:`を`オーディオのみ`に変更します。最後に'続ける'を押したら完了です。元のビデオファイルとは別に、音声ファイルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/6a101114-6d23-d907-8f4d-d0e657577ef9.png)

先述した通り、「選択したビデオファイルをエンコード」は複数ファイルを選択した状態でも可能なので、ある程度貯めてからまとめて変換するとラクです。

### 指定した時間で切り抜き

iMovieを使用します。

「新規作成（大きな「+」アイコン）」をクリックしたら、「ムービー」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/aa953556-ebf6-f962-8845-5b57e7f6f08a.png)

すると、動画の編集画面が開きます。
画面左上の「ファイル」から「メディアを読み込む」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/c7e3cc74-388f-7055-3fdc-c37f2a0d59b4.png)

またウィンドウが開くので、編集したいファイルを選択したら、画面右下の「選択した項目を取り込む」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/c95a5b62-19a3-84a3-c097-16b284447549.png)

iMovieにファイルが追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/96d26baf-4187-c452-e6de-9da2ca18bb3b.png)

上の画面に追加されたファイルを、下の編集画面にドラッグ&ドロップしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/47e0b287-5fa1-0bc1-a65f-87eae12fc46d.png)

まずはクリップを分割します。
ファイルの適当なところで右クリックして、「クリップを分割」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/91ebcb6a-ac0b-38bc-0b05-339a49cb3702.png)

ファイルがクリップに分割されました。
クリップをcommand + Cでコピーしたら、いったんこのプロジェクトを閉じましょう。

新しくプロジェクトを作成します。そして新しく作成したプロジェクトの編集画面（下の方）でcommand + Vで貼り付けます。
画面左上の「ファイル」から「共有」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/3fe33b74-e212-d34e-a1ee-8fd33ff30dbe.png)

ファイルの形式（フォーマット）を任意のものに選択して、「次へ」でファイルを書き出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/0aeef6fe-209e-18ed-574b-71b29cac0ea1.png)

こういう場合は明らかにCUIよりGUIの方が適していますね。

当初はダウンロードする時点で開始地点と終了地点を指定していたのですが、秒数に変換して指定しなくていけないので、かなり面倒でした。計算ミスも頻発しましたし、毎回ダウンロードし直さなくてはいけないのも大変でした。

## 参考文献

<a href="//af.moshimo.com/af/c/click?a_id=1875799&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4873118735" rel="nofollow"><img src="https://images-fe.ssl-images-amazon.com/images/I/51lklJaFGnL._SL160_.jpg" alt="" style="border: none;" /><br />Node.jsデザインパターン 第2版</a><img src="//i.moshimo.com/af/i/impression?a_id=1875799&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" width="1" height="1" style="border: 0px;" />

<a href="//af.moshimo.com/af/c/click?a_id=1875799&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F479806243X" rel="nofollow"><img src="https://images-fe.ssl-images-amazon.com/images/I/512Oe9L4MTL._SL160_.jpg" alt="" style="border: none;" /><br />Node.js超入門 第3版</a><img src="//i.moshimo.com/af/i/impression?a_id=1875799&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" width="1" height="1" style="border: 0px;" />