Help us understand the problem. What is going on with this article?

[Python]YouTubeからビデオをmp4形式でダウンロード

More than 1 year has passed since last update.

はじめに

Twitterのツイートに付けるmp4ファイルをYouTubeからサクッと取得したく、テキトーなPythonスクリプトを仕上げたので共有します。

スクリプト

from pytube import YouTube
from enum import Enum
import ffmpeg
import os
import re

class Loader(Enum):
    MP4 = 'mp4'
    WEBM = 'webm'

    def load(self, yt, res):
        vd = yt.get(self.value, res)
        vd.download('./videos')

def download(url):
    ext = 'mp4'
    res = ''
    exts = []
    yt = YouTube()
    yt.url = url
    for video in yt.videos:
        exts.append(video.extension)
        if video.extension == 'mp4':
            res = video.resolution
    if 'mp4' not in exts:
        ext = 'webm'
    ext = ext.upper()
    val = getattr(Loader, ext)
    val.load(yt, res)

def rename():
    path = os.path.join(os.getcwd(), 'videos')
    pattern = re.compile('(mp4|webm)$')
    files = os.listdir(path)
    for file in files:
        if pattern.search(file):
            file_path = os.path.join(path, file)
            new_file_path = file_path.replace(' ', '_')
            os.rename(file_path, new_file_path)

def convert():
    path = os.path.join(os.getcwd(), 'videos')
    pattern = re.compile('webm$')
    files = os.listdir(path)
    for file in files:
        if pattern.search(file):
            file_path = os.path.join(path, file)
            stream = ffmpeg.input(file_path)
            stream = ffmpeg.hflip(stream)
            stream = ffmpeg.output(stream, file_path.replace('.webm', '.mp4'))
            ffmpeg.run(stream)
            os.remove(file_path)

if __name__ == '__main__':
    url = input('url >> ')
    download(url)
    rename()
    convert()

inputでYouTubeのURLを指定するだけでよしなにやってくれます。
基本はpytubeで直でmp4でのダウンロードを行いますが、mp4がサポート外な場合はwebmで落としてからコンバートをかけます。
convert()メソッド

雑感

フリーのダウンローダーよりもサクサク落とせるので、書いて良かったなー。

prs-watch
会社員プログラマー兼MLBドリブンプログラマー。MLBだけで無く、サッカーでもコードを書きたいな、、
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away