youtube-dl で開始位置と終了位置を指定してダウンロードする方法

youtube-dl で開始位置と終了位置を指定してダウンロードする方法

記事
IT・テクノロジー
youtube-dlは最近も話題になりましたね。

レコード会社に訴えられたり、
GitHubレポジトリが削除されて復活したり…

とはいえyoutube-dlは動画を扱うには便利です。

僕もyoutube-dlに興味を持ってます。

ここで紹介するのは次の内容

■ 開始位置を指定してダウンロード
■ 終了位置を指定してダウンロード
■ あるいは両方を指定して(略

自分のブログに書くほどでもないので、
ココナラのブログ機能を使って公開してみます。

前提条件 - youtube-dl がインストールされてること

まず当然ながら youtube-dl がインストールされてること

 ない場合はコマンドから次を実行(Windows + Miniconda3での例)
pip search youtube_dl
pip install youtube_dl
まあ pip がインストールされてるならUbuntuでもLinux でも同じ

あとffmepg も絶対必要なのでインストールしておく

DL先 : ttps://ffmpeg.org/

ここで紹介する方法の大まかな流れ

動画をDLするときはなるべくディスク容量とかメモリに負担をかけたくない

なので動画を全部ダウンロードして切り取りという方法は論外

ここでは次のような手順で指定秒数だけの動画を保存することにする

1. youtube-dlから指定URLの --get-url を実行
2. GoogleVideoに指定した動画が保存される
3. それをffmpeg から指定秒数だけ切り取りする

▲ 大体こんな感じ

GoogleVideoに保存しているので、自サーバーへの負担を大幅に軽減できる

実際の youtube-dl と ffmepg のコマンド例

ここでは次のYoutube動画を例に説明する
URL : ttps://www.youtube.com/watch?v=QAcHbyXUr7w

この動画の開始5秒~10秒までを切り取ってみる

ではまずターミナルから次の youtube-dl コマンドを実行

※ ココナラではURLを直接書けない。
※ そのため https:// が ttps:// になってるので注意
youtube-dl.exe -f 22 -g "ttps://www.youtube.com/watch?v=QAcHbyXUr7w"
ただし、 QAcHbyXUr7w の部分は各動画のモノに置き換えること

あとURL部分は念のためクォート( ' または " )で囲っておいた方がいい

そうすると、次のような長ったらしいURLが表示されたはず

▼ 実際に生成されたすっごい長いURL例
ttps://r5---sn-3qqp-pcgs.googlevideo.com/videoplayback?expire=1565195040&ei=wKZKXaHpIoTgqAGviruoBw&ip=2001%3A268%3Ac050%3A1e31%3A3978%3A40e3%3Abe6f%3A93bd&id=o-ADX10Y8EK2TzDnMTSihKiX50yptqtyuNQ2mglsLODD6f&itag=22&source=youtube&requiressl=yes&mm=31%2C29&mn=sn-3qqp-pcgs%2Csn-oguelner&ms=au%2Crdu&mv=m&mvi=4&pl=50&initcwndbps=402500&mime=video%2Fmp4&ratebypass=yes&dur=227.160&lmt=1471224930266322&mt=1565173352&fvip=5&c=WEB&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cmime%2Cratebypass%2Cdur%2Clmt&lsparams=mm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AHylml4wRAIgOvfGWfz7q9ybTFsn4RaH4lGObVFW2qaO3AsQhCrL0GoCIAtbP7BmNe2Tuc5kjJT_oxZPfhIUscl5OOq0FUG_S0oz&sig=ALgxI2wwRAIgd-0ZelP7An2gCPfmJsGAJFO3KCcFr8SxaUPgyW0haq8CICZM8RED6Rla9TK2aA740ur80HoEHLZ-byFvlzrHwIF9
あとは ffmpeg にこのURLと切り取りたい時間を渡せばいいだけ

例えば次、再生時間10秒~12秒までを切り取り、hoge.mp4 として保存するコマンド例
ffmpeg -ss 00:00:10.00 -i '【動画URL】' -t 2.000 hoge.mp4
ただし 【動画URL】はさきほど生成した長いURLに置き換えること

このコマンドのポイントは次の2つ

✅ 再生時間の指定
  上の例だと -ss 00:00:10.00 で開始10秒からにしている。
✅ 動画時間の指定
  上の例だと -t 2.000 で2秒にしている。ミリ秒まで指定可能

つまりこのコマンドだと開始10秒からその2秒後の12秒まで切り取るという処理になる

動画切り取りのコマンドを1つにまとめてみた

最後に今紹介したのを1つに統合したコマンドを紹介

Linux、Windowsそれぞれでのコマンド例は次の通り

> Linux(Max)でのコマンド例

既に youtube-dl と ffmpeg インストール済みとする

▼ IDが QAcHbyXUr7 のYoutube動画を10~12秒まで切り取るコマンド
ffmpeg -ss 00:00:10.000 -i $(youtube-dl -f 22 -g 'ttps://www.youtube.com/watch?v=QAcHbyXUr7') -t 00:00:12.000 -c copy hoge.mp4
ffmpegの -i オプションに動画URLを渡すのがポイント

ただしURLが誤認されないように、クォートで囲っとくと安全かも

> Windowsでのコマンド例

Miniconda3を使っていて、なおかつ youtube-dl と ffmpeg インストール済みとする

▼ IDが QAcHbyXUr7 のYoutube動画を10~12秒まで切り取るコマンド

for /f "tokens=* delims=" %A in ('C:\Miniconda3\Scripts\youtube-dl.exe -f 22 -g "ttps://www.youtube.com/watch?v=guyVDqtWLWQ"') do (ffmpeg -ss 00:00:07.00 -i %A -t 3.000 hoge.mp4)
まず for /f "tokens=* delims=" %A でyoutube-dlの出力を %A に入れる

そのあと ffmpeg コマンドnの -i に %A を渡せばOK

ただし、Miniconda を使っている場合は、
フルパスで C:\Miniconda3\Scripts\youtube-dl.exe のように書く必要がある

終わり
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら