動画のダウンロードに関するまとめ

Machine Learning

youtube_dl を例に、動画のダウンロードに関連する情報をまとめておきます。Pythonでの動画ダウンロードです。以下の環境で動作確認をしています。

構成: Windows 10、Python 3.x、Anaconda 3 (pip インストール済み)

背景

Tensorflow や YOLO などの機械学習のソフトウェアをインストールすると、静止画やライブ画像のみならず、動画でも物体検出ができるようになっています。
そこでテスト用に、インターネットから動画を収集する方法について Google 検索すると、検索上位に、youtube_dl が見つかります。
動画サイトから動画をダウンロードする Python のパッケージ、とのことです。youtube_dl について解説している書籍を探すと以下があります。

参考文献Practiacal AI on the Google Cloud Platform 

そこで、youtube_dl を中心に、関連する情報をまとめておきます。
(最近、動画サイトも質的にどうかなと思うことが増えていますので、いくつかの技術的手段を確保しておくことも重要かと。。)

注意点

・ サイトからのデータのダウンロードや配布、公開に関しては、ライセンスや著作権法上の問題が生じえます。具体的には、ダウンロードしたデータの配布、公開は原則禁止(厳禁)、かつ、アクセスするサイトごとにライセンス、規約を確認する必要があります。
・ 業務としてサイトのデータを使用する方、どういった行為であれば可能なのか確認をしておきたい方、気になる方は、最近の著作権に関する書籍(海外、日本を対象とした、最近の法改正に対応した書籍)などを参照して、判断の根拠を明確にするようにしてください。
また、サイトを確認する方法について解説している書籍を、末尾の外部リンクに示しました。法律観点というよりは、技術をバックグラウンドとした記述となっています。関心のある方は参考にしてみてください。

youtube-dl のインストール方法

コンソールを起動して以下を実行します。

pip install youtube-dl

また、アップグレードをする場合は以下を実行します。

pip upgrade youtube-dl

Python での動画・音声のダウンロード方法

動画ダウンロードの場合 (mp4)

動画をダウンロードする場合は、以下を実行します。

youtube-dl https://www.you????.com/watch???…

※ 最後の “https: …” は、動画サイトでの動画の URL です。ダウンロード前に URL を確認しておく必要があります。
※ また、ダウンロードしたファイルは、mp4 形式等となっています。
ffmpeg というソフトウェア(末尾の関連リンク参照)を使うと mov など他の動画フォーマットに変換したり、フレームレートを下げて動画サイズを小さくできることを確認しています。

音声のダウンロードの場合

音声データをダウンロードする場合は、以下を実行します。

youtube-dl --extract-audio https://www.you????.com/watch???…

※ 末尾の “https: …” は、動画サイトでの動画の URL です。事前に確認が必要です。
※ 音声ファイルのファイル形式についても、下記の関連リンクにまとめている ffmpeg を用いると変換が可能となります。

Anaconda 環境でインストールする場合

もし、Anaconda を使っていて Anaconda 環境でインストールをする場合は、以下の手順で設定できます。
① Anaconda Prompt を起動し、インストールする仮想環境をアクティベートします。
② ①の状態で上記の「インストール方法」を実行します。

→ 仮想環境で動作するようになります。

応用例:一括ダウンロードをする Python スクリプトの例

ダウンロードは一括でできると便利です。
以下は、ダウンロードを実行する Python スクリプトの記載例です。

事前に、動画の URL (複数)をテキストファイル(list1.txt)に書き出しておきます。スクリプトを実行すると、順次、ダウンロードを実行します。
なお、下記のサンプルコードは、Anaconda 環境ですでに仮想環境(例:env01)が設定してあって、youtube_dl がインストールしてあることを前提としています。また、仮想環境の名前は暫定で “env01” としていますが、環境に合わせて修正してください。
なお、Anaconda のコマンド、使い方については、下記の関連リンクにまとめていますので、参考にしてみてください。

import os
import timer as tm1 

def read1( file1 ): 
    with open( file1, 'r', encoding='utf-8' ) as f1: 
        str1 = f1.read()
    return str1 

path1 = os.path.dirname(__file__) 
file1 = path1 + "\\" + "list1.txt" 
a1 = read1( file1 ).split( "\n" ) 

for url1 in a1: 
    if "https://" in url1: 
        cmd1 = "cd " + path1 + "\\video" 
        cmd2 = "activate env01" 
        cmd3 = "youtube-dl " + url1 
        cmd4 = "youtube-dl --extract-audio " + url1 
        cmd0 = cmd1 + " & " + cmd2 + " & " + cmd3 + " & " + cmd4 
        print( cmd3 ) 
        print( cmd4 ) 
        os.system( cmd0 ) 
        tm1.sleep( 5 ) 

使い方
① PC にフォルダを作ってください。
② ①のフォルダ内に、”video” という名前のフォルダを作ってください。
③ ①のフォルダ内に、download1.py 等のファイル名でテキストファイルを作り、上記のスクリプトをコピー&ペーストして保存してください。
④ ①のフォルダ内に、”list1.txt” というテキストファイルを作ってください。このテキストファイルに、ダウンロードしたい動画の URL (”https://www.you????.com/watch???…” など)を貼りつけてください。複数の URL を(リターン区切りで)列挙して保存すると、複数の動画をダウンロードします。
⑤ Anaconda Prompt を起動し、③のスクリプトを実行してください。
→ ”video” フォルダ内に動画データ(*.mp4)と音声データの両方が保存されると思います。

※ サンプルスクリプトは、上で説明した動画の保存方法、音声の保存方法をそのまま実行する記載例です。
動画のみ、音声のみ必要といった場合は、サンプルコードの該当箇所をコメントアウトするなど修正してください。
※ また、サンプルスクリプトは単なる一つの記載例です。サーバに負荷を与えてしまうと問題となりえますので、ウェイト(sleep( 5 ) とした部分)の値は十分に長くとって、扱いには十分に注意してください。

まとめ

動画のダウンロードに関連する情報をまとめてみました。

なお、ライセンスや著作権などの権利関係を確認したい方は、以下の外部リンクで示した書籍も参考にしてみてください。
書籍を何冊か調べていますが、よくまとまっているものを挙げておきます。下記の書籍は技術観点で記載されていますが、法律観点でよい書籍が見つかったら、後日、追加したいと思います。

関連リンク
・ 動画ファイルから音声データを一括で引き抜く 【Python & ffmpeg】
・ ウェブ検索と結果取得の自動化 サンプルコード【Python】
・ Anaconda Prompt コマンド一覧 【仮想環境設定】
・ ffmpeg のインストール手順 【Windows】

外部リンク
・ YouTube JP  利用規約
※ 2021年6月1日の時点での禁止行為と例外規定が記載されています。
加えて、自動化された手段を使用してアクセスすることは禁止とするとなっていますが、robots.txt に従って使用する場合は除くと読める内容になっています。
・ GitHub、削除した「youtube-dl」は著作権を侵害していなかったとして復元
※ Micorsoft/GitHub、RIAA に関する経緯。米国内の記載となっています。今後の動向も含め、把握しておく必要がありそうです。

・ 参考書籍 [PR]

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

新品価格
¥3,608から
(2021/6/2 09:07時点)

※ 上記の書籍には、著作権、利用規約などの注意点、サイトの robots.txt の確認方法、Google検索の事例などがわかりやすく解説されています。スクレイピングを業務として行う方、本格的に活用される方は参考にしてみてください。

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