🎬

youtubeダウンローダー作ってみた #2

2024/01/27に公開

前回からの変更点

前回の記事
https://zenn.dev/caymankun/articles/678e0ac6bd8b24

環境

まずrisupu様のサーバーでcgi-bin内ならpython2.7が使えること(python3ではない)
そしてreplitは途中で止まったり遅いのでやめた

terminalが使えない

risupu様のサーバーはshell(sshなど同様)が使えないので、yt-dlpやその他のコマンドをbinaryで指定しなければならない

今回の目標

1サーバー(外部サービスなし)で、動画をdlするWebapi的なもの

やったこと

cgiを使用

まあcgi-binというぐらいだから使った

yt-dlpのbinaryを設置

https://github.com/yt-dlp/yt-dlp/releases/
からyt-dlp_linuxをダウンロード
理由は、python2.7なので、yt-dlpのデフォルトバージョンが動かない可能性があるから

ffmpegのbinaryを設置

なんかビルドしてくれてあるものがあるからしっかり使用
https://ffbinaries.com/downloads
のffmpegをダウンロード

python宣言

#!/usr/bin/env python
#!/usr/bin/python

これをしないと動かなかった

パス宣言

import os
os.environ["PATH"] = "/usr/local/bin:/usr/bin:/bin"
os.environ["TMPDIR"] = "実際の任意のtmpパスを指定"

特にデフォルトのtmpが使えないのでオリジナルtmpディレクトリを設定

binaryのパスを指定

# 実際のパスに置き換えてください
yt_dlp_path = "./yt-dlp" 
ffmpeg_path = "./ffmpeg"  

コマンドを実行

import subprocess

command = [yt_dlp_path , "-o" , "%(title)s-%(id)s.%(ext)s" , "-f" , "22" , "--ffmpeg-location" , ffmpeg_path , url]
result = subprocess.check_output(command, stderr=subprocess.STDOUT)

ホントのコマンドに直すと

./yt-dlp -o %(title)s-%(id)s.%(ext)s -f 22 --ffmpeg-location ./ffmpeg ここにURL

これをすべてくっつけると(最小サンプルコード)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
os.environ["PATH"] = "/usr/local/bin:/usr/bin:/bin"
os.environ["TMPDIR"] = "./tmp/"

import requests
import cgi
import cgitb
import subprocess

# エラーのデバッグ情報を出力する
cgitb.enable()

form = cgi.FieldStorage()

url = 'https://www.youtube.com/watch?v=pgXpM4l_MwI'

# 実際のパスに置き換えてください

yt_dlp_path = "./yt-dlp" 

ffmpeg_path = "./ffmpeg"  

command = [yt_dlp_path , "-o" , "%(title)s-%(id)s.%(ext)s" , "-f" , "22" , "--ffmpeg-location" , ffmpeg_path , url]
result = subprocess.check_output(command, stderr=subprocess.STDOUT)

ソースコード

https://github.com/caymankun-dev/yt-dlp-webpy/releases

このまま使えば良さそう

注意事項&確認事項

tmpディレクトリーは絶対

tmp

で作るか

os.environ["TMPDIR"] = "./tmp/"

を変更する

終わりに

今回はsshが使えないサーバーで、yt-dlpを実装してみました

Discussion