LoginSignup
7
11

iPhoneでショートカットappを使って、safariからYouTubeをダウンロードする

Last updated at Posted at 2023-04-07

iPhoneでショートカットappを使って、safariからYouTubeをダウンロードする

こんにちは、この記事が初のpythonを習いたての大学生です。
個人的な興味で題のようなものを作成したくなり、作るにあたってpythonを使用してみました。
使う際は当然自己責任でお願いします。
その中で躓いた点について、同じようなことをしようとしている、同じようなプログラミングレベルの人の役に立てばと思います。
プログラミングのぷの字に触れたばかりの人間ですので、コードが汚いだとか、例外処理がとかはご勘弁を

動作環境について

自分の確認している環境はiphone Xs ios17.1.2 a-shell ver1.12.5です。
それ以外の環境だったりはよくわからないので悪しからず

使用手順

まず最初に作ったものの使い方から。

1.「a-Shell」のインストール、設定等

今回の方法では「a-Shell」というアプリを使用します。ので、ダウンロード

2.「MyYt_dlpUseFfmpeg.py」、実行ショートカットの作成

その後、以下のurlのショートカットを実行して、~/DocumentsにMyYt_dlpUseFfmpeg.pyを作ります。
※24/1/7更新

その後、以下のurlのショートカットを入れて、youtubeの共有マークから、「Yt-dlp」を押してダウンロードします。

3.使用の際のオプション

「Yt-dlp」を使うと下のように選択するようでる。

IMG_2865.jpeg

現在は画像とは少し変わっていて

  • オーディオファイル(mp3)
    いっちゃん音質のいいものをmp3でダウンロード
  • オーディオファイル(opus)
    いっちゃん音質のいいものをopusでダウンロード(わからなければ使わない方がいい)
  • 720p,mp4(h264,mp4a)
    720pの動画を、30fps以下になるようにmp4でダウンロード
  • 最高画質,音質のmp4(h264,mp4a)
    名前の通り、
  • 最高画質,音質のmp4(vp9,opus)
    非推奨

opus以外はサムネイル付きで、Fileアプリの、このiPhone内/a-Shellにダウンロードされます。

「a-Shell」について

iOS上でシンプルなUnixライクな端末を使える。コマンド解釈にios_systemを使用するそう。
cを使ったものに関しては外から入れても動かないようですが、ffmpegに関しては要望が多かったのか、専用にチューニングしたものが最初から入っているようです。ので、今回pythonで使うためにラッパーである「ffmpeg-python」を入れていますが、ffmpeg本体は追加でインストールする必要はないです(.wasmで入れなきゃいけないなどと書かれているのは昔の話です)。
参考:https://github.com/holzschu/a-shell/issues/8#issuecomment-923821182

pythonで実行するわけ

ここからは作るにあたって躓いた点について書き残す、メモとなります。
まず、「a-Shell」の存在を知り、Yt-dlpで直接スマホでyoutubeをダウンロードできるんじゃ?となり、いつもターミナルで実行している文を入れてみると、「--embed-thumbnail」がうまく動作せず、毎回別れたままになってしまいました。
※「--embed-thumbnail」:サムネイルをyoutubeから取ってきて動画にくっつける
また、youtubeのタイトルをそのまま動画ファイルのタイトルにすると、保存するとき「/」で勝手にホルダーを作ってしまうなどの不便さがありました。
そこで、複数行にわたっての実行を試す際、実行結果の変数への入れ方がどうにも分かりませんでした(以下は試した)。

x=$(~~)

ので、pythonの実行ファイルを作って、それをa-shellから実行するという形をとりました。

「MyYt_dlpUseFfmpeg.py」の中身

以下の順で実行しています。

  • 1.Yt_dlpのpythonWrapperを使ってタイトルの取得
  • 2.Yt_dlpでsubprocessを使ってサムネのダウンロード
  • 3.Yt_dlpのpythonWrapperで動画orオーディオのダウンロード
  • 4.(audioのみ)ffmpegのpythonWrapperでwebm→mp3
  • 5.ffmpegのpythonWrapperでサムネと動画を合体
1.Yt_dlpのpythonWrapperを使ってタイトルの取得

Yt_dlpを使って(参考①)タイトルの取得を取得して、入ると困る文字列を他の文字に置き換えて(参考②)います。
Yt_dlpのpythonでの実行の仕方は、③のサイトでやりたいことのオプションを作って、①のサイトの「利用可能なオプション」を使ってpythonのコードにします。
④でダウンロードしたものの拡張子を表示するための「.extract_info」を見つけました。
※なぜか、サムネのダウンロードだけで「'」が無視されることがわかりました。
具体的には、サムネのダウンロード時にファイル名に「'」を使おうとするとこれが消えます。
9/10の更新で問題は多分解決しています

参考にしたサイト
https://note.com/note_fumi/n/n72b755dac88a
https://www.kabegiwablog.com/entry/2018/06/25/100000
https://vlike-vlife.netlify.app/posts/cli_yt-dlp

2.Yt_dlpでsubprocessを使ってサムネのダウンロード

※2023/4/11に追加、変更した項目
どうやらmp3にffmpegでサムネをつける際にはwebpではいけないようです。
mp4にはwebpのままで大丈夫なので、何で何だろう、、、
その際に「--convert-thumbnails 」を使いたいんだけど、Wrapperで見つからなかったので、ここだけsubprocessで実行してます。
(前回の内容だとダウンロードしたサムネがwebp以外だとエラーになってしまうので、jpgに固定するための変更)
参考にしたサイト
https://lightrun.com/answers/ytdl-org-youtube-dl-how-can-i-download-thumbnails-in-pngjpg-format-

3.Yt_dlpのpythonWrapperで動画orオーディオのダウンロード

1.と同じサイトを参考にダウンロード用のものを作ってます。
下のサイトでダウンロードしたものの拡張子を表示するための「.extract_info」を見つけました。
参考にしたサイト
https://diy-programming.site/youtube/download/

4.Yt_dlpのpythonWrapperで動画orオーディオのダウンロード

名前の通り。「overwrite_output=True」は上書きokかどうか
「**{'qscale:a': 1}」は音の品質みたいな、、、

参考にしたサイト
https://github.com/kkroening/ffmpeg-python

5.ffmpegのpythonWrapperでサムネと動画を合体

名前の通り。「overwrite_output=True」は上書きokかどうか

参考にしたサイト
https://stackoverflow.com/questions/62267923/ffmpeg-python-library-to-add-a-custom-thumbnail-to-a-mp4-file-using-ffmpeg

ショートカットにて

特段何もしてないですが、一応。
1つ目のショートカットは、テキストに「MyYt_dlpUseFfmpeg.py」の内容を書いて、テキストファイルを作成しているだけです。qiitaにファイルをあげる機能がない?のかなと思い、こうしました。
2つ目のショートカットは、ただ単に「MyYt_dlpUseFfmpeg.py」を実行しているだけです。
あと、~/Documents/trachの中に一時ファイルを溜め込んで最後に消しています。

youtubeに対策されたのか、動かなくなることがある件について

この前、HTTP Error 403: Forbiddenとか言って、動かなくなることがありました。
多分ですがyoutubeが拒否していたのかなと思います。
既にyt-dlpが対応しているので、アップデートしたら動くようになります。
「a-Shell」アプリを開いて

pip install -U yt-dlp

を実行し、念の為「a-Shell」アプリを再起動。そのあとは普通に使えるようになるかと思います。
それで同じようにダメな場合、全く別の原因か、まだyt-dlpが対応できていないかだと思うので、しばらく待ちましょう。
https://github.com/yt-dlp/yt-dlp/issues/7984

更新履歴

※2024/1/7

かなり大幅に変更
内容は、コメントに全て書いてしまったので、気になる人は探してみてください

※2023/9/14
  • 「MyYt_dlpUseFfmpeg.py」をダウンロードし直してください。
  • 「a-Shell」でコマンドpip install Pillowを実行してください
  • 9/10のバグがまだちょっと残っていたので、変更
  • 音楽ファイルの時、サムネを正方形にしました。
※2023/9/10
  • バグを見つけたので本当に少し手直し、「MyYt_dlpUseFfmpeg.py」の中身の「1」に記述
  • yt-dlpの更新についてを追加、この記事の一番最後に追加しました。
※2023/4/11
  • 使用手順の1のショートカットを変更しました。2つ目のショートカットはそのまま使えます。
  • 内容は「MyYt_dlpUseFfmpeg.py」の中身の「2」です。

7
11
10

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
7
11