1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Twitcastingの録画をダウンロードする

Last updated at Posted at 2021-01-30

※現在、Twitcastingの仕様変更のためダウンロードできません。

はじめに

Twitcastingの録画を簡単にダウンロードできるサイト・ライブラリがなかったためPythonで書きました。あくまで自分用にテキトーに書いたので再現性・安全性1は保証しません。また実行はColaboratory上で行うことを想定(推奨)しています。していることは録画のURLからm3u8ファイルのURLを取得して、後はffmpegで処理してるだけです。

パッケージのインポート・関数の定義

import re
import time
from urllib import request

from bs4 import BeautifulSoup


def get_m3u8_url(url):
    time.sleep(1)
    response = request.urlopen(url)
    soup = BeautifulSoup(response)
    response.close()
    wanted_line = ''
    for line in str(soup).split('\n'):
        if 'data-movie-playlist' in line:
            wanted_line = line
            break
    wanted_url = re.findall('https:[^ ]*m3u8', wanted_line)[0].replace('\\', '')
    return wanted_url


def dl_mp4_from_m3u8_url(m3u8_url, output_path=None):
    if output_path == None:
        try:
            output_path = re.findall('v/([0-9]+)-', m3u8_url)[0]+'.mp4'
        except:
            output_path = 'output.mp4'
    print(f'!ffmpeg -i "{m3u8_url}" tmp_output.mp4')
    print(f'!mv tmp_output.mp4 "{output_path}"')
    return output_path


def get_audio_from_mp4_file(mp4_file_path, output_path=None):
    if output_path == None:
        output_path = mp4_file_path.replace('.mp4', '_audio.mp4')
    print(f'!ffmpeg -i "{mp4_file_path}" -vn -acodec copy  tmp_output.mp4')
    print(f'!mv tmp_output.mp4 "{output_path}"')
    return output_path


def dl_movie_from_url(url, output_path=None):
    m3u8_url = get_m3u8_url(url)
    output_path = dl_mp4_from_m3u8_url(m3u8_url, output_path=output_path)
    return output_path


def dl_audio_from_url(url, output_path=None):
    path = dl_movie_from_url(url, output_path=output_path)
    output_path = get_audio_from_mp4_file(path, output_path=output_path)
    return output_path

使用例

urlにダウンロードしたい録画のURL、pathに保存するファイル名を指定して以下を実行すると実行すべきコマンドが出力される。

url = 'https://twitcasting.tv/twitcasting_jp/movie/189032259'
path = "ツイキャス公式_2015-08-02.mp4"

output_path = dl_movie_from_url(url, output_path=path)

# 音声だけダウンロード
# output_path = dl_audio_from_url(url, output_path=path)

# 出力
# !ffmpeg -i "https://dl01.twitcasting.tv/tc.vod/v/189032259-1612037427-1612066227-00bbfdf5-84e78fc7ace57fe9/fmp4/index.m3u8" tmp_output.mp4
# !mv tmp_output.mp4 "ツイキャス公式_2015-08-02.mp4"

出力されたコマンドを実行するとダウンロードできる。2

!ffmpeg -i "https://dl01.twitcasting.tv/tc.vod/v/189032259-1612038902-1612067702-00bbfdf5-e8edeb25aafecafa/fmp4/index.m3u8" tmp_output.mp4
!mv tmp_output.mp4 "ツイキャス公式_2015-08-02.mp4"
  1. 例えばカレントディレクトリにtmp_output.mp4があれば上書きされます。

  2. subprocessでしようとしたらなぜかエラーが...

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?