LoginSignup
2
0

More than 1 year has passed since last update.

Yt-dlpをPythonから実行し、時間指定した動画をダウンロードする

Last updated at Posted at 2022-12-23

この記事は呉高専アドベントカレンダーの24日目の記事です。
https://adventar.org/calendars/7908
呉高専を卒業し、大学に3年次編入してから2年目の乗算記号と申します。
普段はUnityでゲームを作ったり、卒研でPythonいじったりしています。
初めて記事を書くため、読みづらい部分はご容赦ください。

yt-dlpとは

yt-dlpとはyoutube、twichといった動画配信サービスから高画質・高音質な動画をダウンロードできるプログラムです。ちなみにあのGitHubから追放されかけた(実際された)ことで有名なYoutubeDLからの派生プロジェクトになります。使用目的としては機械学習のような大量の動画や音源が必要なときに大変重宝されます。基本的にはcliから使用しますが、pythonスクリプト上からも動作できます。

yt-dlpで時間を指定した上でダウンロードする。

ある動画を時間指定してダウンロードする関数を定義して使用してみます。
ソースコードは以下のようになります。

from yt_dlp import YoutubeDL


def ytdlp_bytime(movie_url: str, start_time: int, end_time: int):

    def set_download_ranges(info_dict, self):
        duration_opt = [{
            'start_time': start_time,
            'end_time': end_time
        }]
        return duration_opt

    ydl_opts = {
        'download_ranges': set_download_ranges
    }

    movieURL: str = movie_url

    with YoutubeDL(ydl_opts) as ydl:
        ydl.download(movieURL)


def main():
    movie_url: str = 'https://www.youtube.com/watch?v=6T8Jia_4tZc'
    start_time: int = 10
    end_time: int = 45

    ytdlp_bytime(movie_url, start_time, end_time)


if __name__ == "__main__":
    main()

  • 解説
    def set_download_ranges(info_dict, self):
        duration_opt = [{
            'start_time': start_time,
            'end_time': end_time
        }]
        return duration_opt

上記の部分で辞書型のduaration_optに開始時間と終了時間を渡し、それらを返し値に持つset_download_rangeという関数を宣言します。

    ydl_opts = {
        'download_ranges': set_download_ranges
    }

    movieURL: str = movie_url

    with YoutubeDL(ydl_opts) as ydl:
        ydl.download(movieURL)

また、ここでjson型のydl_opts下のdownload_rangesに先程作成したset_duration_opt関数自体を渡します。ここで直接辞書型や変数を渡してはいけません。

このことはソースコードのYoutubeDLクラス内に記載されているコメントにかかれています。

おわりに

この部分は私が研究を勧めている際に躓いた部分です。
わからないのは私だけかと思いきや、友人も躓いていたので記事にしました。
技術系の記事を初めて書いたため至らない点もあるかと思いますが、どなたかのお役に立てれば幸いです。

参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0