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コードあり)
デコピコミンが全国(47都道府県)で、どの施設に出てくるか地図(Google Maps)で確認!!【ピクミン ブルーム(Pikmin Bloom)】
Windows10で機械学習環境チェック CPU/GPUでTensorflowの作業時間はどのくらい違うのか、Google Colabとも比較してみた。(CUDA Toolkit,cuDNN)
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
株価時系列データを分析する上で正規化を行う事の重要性について紹介する【違いをみつけろ!】
ConoHa WINGレンタルサーバーでPython! Webアプリcgiを動かす手順を紹介!3つの例あり【コピペで動く!】
Google Analytics にPython APIで接続してみた話【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
Google Data Portalを使ってWeb上のオープンデータを使って簡単に情報を可視化しようという話
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!

コメント

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