YouTube動画を開始時間や終了時間を指定してのダウンロードしたいと思ったことはありませんか?出勤時に聞く音声のみの場合や、高画質の動画の欲しかったり、逆に低解像でもいいのでファイルサイズを抑えたい場合など、そのようなニーズにお応えします。
本記事の目的・理由
以前このような書きました。
「Google Colabで”一枚の静止画”と”一つの動画”だけで動画の人に合わせて静止画の人を動かしてみた」
Liquid Warping GAN with Attentionで静止画の人物を動画の人の動き合わせて動かすという物です。
その時に20秒ほどの動画を作る必要があったので、PythonとGoogle Colabを利用して作ったので、その紹介を行います。
使用するツール
使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。
準備
上記:「Google Colabで”一枚の静止画”と”一つの動画”だけで動画の人に合わせて静止画の人を動かしてみた」ではラジオ体操第二の動画を”人物が一人だけで、正面を向いて動いている”という理由で選択しましたが、今回は単純に動画の開始時間、終了時間にフォーカスしますので、他の動画を選択したいと思います。
今回の選択した動画は呪術廻戦のオープニングソング 廻廻奇譚 – Eve MVとします。
私はこの動画の45秒過ぎからのサビの部分が好きで、仕事行きたくないな、、なんて時はこの部分流しながら「今日も祓う」などとつぶやいています。(いらない情報でした。)
今回はこの動画の45秒から1分10秒までの動画をPythonで切り抜き、動画ファイルにしてみたいと思います。
実際のコードとやっていること
実行するデータの作成する部分までをまずはコードでお示しします。
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を使った動画の取り扱いなど、皆さんの参考になれば幸いです。
参考にさせていただいたサイト
—
Pythonに関する記事をご紹介します。
コメント