この記事は呉高専アドベントカレンダーの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クラス内に記載されているコメントにかかれています。
おわりに
この部分は私が研究を勧めている際に躓いた部分です。
わからないのは私だけかと思いきや、友人も躓いていたので記事にしました。
技術系の記事を初めて書いたため至らない点もあるかと思いますが、どなたかのお役に立てれば幸いです。
参考文献