Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】

スポンサーリンク
Python

YouTube動画を開始時間や終了時間を指定してのダウンロードしたいと思ったことはありませんか?出勤時に聞く音声のみの場合や、高画質の動画の欲しかったり、逆に低解像でもいいのでファイルサイズを抑えたい場合など、そのようなニーズにお応えします。

本記事の目的・理由

以前このような書きました。

Google Colabで”一枚の静止画”と”一つの動画”だけで動画の人に合わせて静止画の人を動かしてみた

Liquid Warping GAN with Attentionで静止画の人物を動画の人の動き合わせて動かすという物です。

その時に20秒ほどの動画を作る必要があったので、PythonとGoogle Colabを利用して作ったので、その紹介を行います。

使用するツール

使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。

準備

上記:「Google Colabで”一枚の静止画”と”一つの動画”だけで動画の人に合わせて静止画の人を動かしてみた」ではラジオ体操第二の動画を”人物一人だけで、正面を向いて動いている”という理由で選択しましたが、今回は単純に動画の開始時間、終了時間にフォーカスしますので、他の動画を選択したいと思います。

今回の選択した動画は呪術廻戦のオープニングソング 廻廻奇譚 – Eve MVとします。

廻廻奇譚 – Eve MV

私はこの動画の45秒過ぎからのサビの部分が好きで、仕事行きたくないな、、なんて時はこの部分流しながら「今日も祓う」などとつぶやいています。(いらない情報でした。)

今回はこの動画の45秒から1分10秒までの動画をPythonで切り抜き、動画ファイルにしてみたいと思います。

実際のコードとやっていること

実行するデータの作成する部分までをまずはコードでお示しします。

Open In Colab

Google Colabの共有ファイルは上記になります。Googleのアカウントがあればログインして、そのままShift+Enterで再現できると思います。

! pip install youtube-dl
! pip install ffmpeg

import youtube_dl
youtubelink    = "https://youtu.be/1tk1pqwrOys" #@param {type:"string"}
print(youtubelink)

右側にyoutubelinkという枠が出ると思いますので、今回は https://youtu.be/1tk1pqwrOys というキリ抜きたい動画URLを指定します。

!youtube-dl -F "{youtubelink}"
format_code =  18#@param {type:"number"}

YouTube内には一つの動画に対して複数のファイルが存在しています。
音声のみのファイルや動画、動画でも高解像度の物から回線スピードが低速な場合でも再生できるようなファイルサイズの軽いものなどあります。今回は軽量なものを選択したいので、

format_codeは18(一番下、コード番号は一番左)を選択するようにしておきます。

import datetime

#@markdown **Start time**
start_time_hour =  0#@param {type:"number"} 
start_time_minute =  0#@param {type:"number"}
start_time_second =   45#@param {type:"number"}

#@markdown **End time**

end_time_hour =  0#@param {type:"number"} 
end_time_minute =  1#@param {type:"number"}
end_time_second =  10#@param {type:"number"}

startTime = datetime.time(start_time_hour,start_time_minute,start_time_second)
endTime = datetime.time(end_time_hour,end_time_minute,end_time_second)

diff = datetime.timedelta(hours=(endTime.hour-startTime.hour),minutes=(endTime.minute-startTime.minute),seconds=(endTime.second-startTime.second))
print(diff)

切り抜き・トリミングする秒数をしてします。

今回の例では開始45秒目から1分10秒まで25秒を切り抜きます。

使用目的的・動画の種類によっては開始直後からの無音部分を切り取りたいとか、曲・動画の最後の部分の宣伝を切り取りたいというような希望がある場合など利用可能かと思います。

!ffmpeg -ss {startTime} -i "$(youtube-dl --get-url -f {format_code} {youtubelink})" -t {diff} -c:v libx264 -c:a aac output.mp4

実際の切り抜き部分ですが、上で与えた動画のリンクやフォーマット、時間を渡して、output.mp4というファイルに出力しています。

#===============================
from IPython.display import HTML
from base64 import b64encode
mp4 = open('output.mp4','rb').read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
HTML("""
<video width=400 controls>
      <source src="%s" type="video/mp4">
</video>
""" % data_url)

実際に作成されたファイルが左のフォルダ表示内の現在のディレクトリに output.mp4 として作成されていることがみて取れると思いますし、それをJupyter notebook内でも再生することが可能です。

必要であれば、このoutput.mp4ファイルを右クリック等でダウンロードすることもできます。

YouTubeを使ったファイルや知識の探索、Google Colabを使った動画の取り扱いなど、皆さんの参考になれば幸いです。

参考にさせていただいたサイト

Portion-of-youtube/portionofyoutubevideo.ipynb at main · AniqueManiac/Portion-of-youtube
Contribute to AniqueManiac/Portion-of-youtube development by creating an account on GitHub.

Pythonに関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
Pythonを使ってTwitterに自動投稿。APIの設定など。(Twitter API v2とAPI v1.1の併用)
ボラティリティ クラスタリング(Volatility Clustering)について:Google ColabのPythonでの相場環境分析
TradingViewを使ってポートフォリオ運用(複数銘柄運用・配当込み) 日本株 2019年末に約1000万円投資していたらどうなった?【コピペで動く!】Google ColabのPythonで自分で調べてみよう!

コメント

タイトルとURLをコピーしました