0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AlmaLinux 10でYouTube動画をダウンロードする環境を構築する

0
Posted at

はじめに

普段ならFedoraを使うところだが、(体感)利用者の多そうな AlmaLinux 10 でできないかやってみる。

Fedora 向けの手順をそのまま AlmaLinux で実行しようとすると、パッケージが見つからなかったり、バージョンによってはPython のバージョンが合わなかったりと、何かとつまずくことがあった。

というわけで、今回は AlmaLinux 10 で FFmpeg と yt-dlp を導入し、YouTube の動画を MP4 形式で保存するまでの手順をまとめる。

実際に試して引っかかった箇所と、その解決方法も紹介していく。

なお、実際に利用する際は、著作権法やYouTubeの利用規約、権利者の許諾などを確認してほしい。

1. 検証環境

今回使用した環境は以下のとおり。

  • OS:AlmaLinux 10.2
  • カーネル:6.12.0-211.7.3.el10_2.x86_64
  • 動画ダウンロードツール:yt-dlp
  • 動画・音声の処理:FFmpeg

まずは OS とカーネルのバージョンを確認する。

[root@youtubedownloader ~]# cat /etc/almalinux-release
AlmaLinux release 10.2 (Lavender Lion)

[root@youtubedownloader ~]# uname -r
6.12.0-211.7.3.el10_2.x86_64

2. FFmpeg をインストールする

2.1. なぜ FFmpeg が必要なのか

YouTubeでは動画を取得する際に映像と音声が別々のデータとして配信されるので、ダウンロードする場合、映像と音声を1つのファイルに結合する必要がある。

また、音声の変換などにも FFmpeg を利用できる。

そこで、まずは FFmpeg をインストールしていく。

2.2. 標準リポジトリからインストールできるか確認する

最初に、通常どおり DNF でインストールを試みた。

[root@youtubedownloader ~]# dnf install ffmpeg
メタデータの期限切れの最終確認: 4:00:19 前の 2026年10月24日 18時21分01秒 に実施しました。
引数に一致する結果がありません: ffmpeg
エラー: 一致するものが見つかりません: ffmpeg

残念ながら、パッケージが見つからない。
そこで、EPEL と CRB を利用できるようにしたうえで、RPM Fusion のリポジトリを追加する。

2.3. EPEL を追加する

まずは EPEL のリリースパッケージをインストールする。

[root@youtubedownloader ~]# dnf install epel-release

実行時には epel-release のほか、依存関係として SELinux 関連のパッケージもインストールされた。

インストール:
  epel-release

依存関係のインストール:
  selinux-policy-targeted-extra

弱い依存関係のインストール:
  selinux-policy-extra

完了しました!

実際の出力では、EPEL 10 用のパッケージが導入されていることを確認できた。

2.4. RPM Fusion を追加する

次に、RPM Fusion の Free リポジトリを追加する。

以下のコマンドでは、現在の RHEL 互換 OS のメジャーバージョンを rpm -E %rhel で取得している。

[root@youtubedownloader ~]# dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm

実行時には rpmfusion-free-release がインストールされた。

インストール:
  rpmfusion-free-release

完了しました!

注意: 上記のコマンドでは GPG 署名の検証を無効にしている。セキュリティを重視する環境では、署名を無効にする必要性を確認し、可能な限り署名を検証できる方法で導入することを推奨する。

2.5. リポジトリのメタデータを更新する

リポジトリを追加したら、メタデータを更新する。

[root@youtubedownloader ~]# dnf makecache
AlmaLinux 10 - AppStream
AlmaLinux 10 - BaseOS
AlmaLinux 10 - CRB
AlmaLinux 10 - Extras
Extra Packages for Enterprise Linux 10 - x86_64
RPM Fusion for EL 10 - Free - Updates

メタデータキャッシュを作成しました。

出力に RPM Fusion のリポジトリが表示されていれば、追加したリポジトリが認識されていることを確認できる。

2.6. FFmpeg をインストールする

準備ができたので、改めて FFmpeg をインストールする。

[root@youtubedownloader ~]# dnf install ffmpeg

今回はパッケージが見つかり、インストールが進んだ。

インストール:
  ffmpeg  7.1.5-1.el10

トランザクションの概要
インストール  208 パッケージ

完了しました!

これで FFmpeg の準備は完了。

3. yt-dlp をインストールする

3.1. GitHub の公式リリースから取得する

次に、YouTube から動画を取得するための yt-dlp を導入する。

Fedora では dnf install yt-dlp でインストールできる場合があるが、パッケージの提供状況は OS のバージョンや有効化しているリポジトリによって異なる。

今回は DNF からインストールする方法ではなく、yt-dlp の GitHub 公式リリースから実行ファイルを直接取得する方法を採用した。

[root@youtubedownloader ~]# curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp

ダウンロードが完了したら、実行権限を付与する。

[root@youtubedownloader ~]# chmod a+rx /usr/local/bin/yt-dlp

3.2. バージョンを確認する

インストールできたかどうか、バージョンを確認する。

[root@youtubedownloader ~]# yt-dlp --version
2026.10.21

このようにバージョンが表示されれば OK。

今回取得したバージョンは 2026.10.21 だった。

yt-dlp は YouTube 側の仕様変更などによって、以前は動作していたコマンドが突然失敗することもある。その場合は、まず yt-dlp を最新版に更新してみる。

公式の実行ファイルを使用している場合は、次のコマンドで更新できる。

[root@youtubedownloader ~]# yt-dlp -U

※ 更新機能が利用できる配布形態であることを前提とする。利用中のバージョンで更新できない場合は、公式リリースから新しい実行ファイルを取得する。

4. FFmpeg が認識されているか確認する

yt-dlp が FFmpeg を認識しているか確認する。

-v オプションを指定すると、デバッグ情報が表示される。

[root@youtubedownloader ~]# yt-dlp -v

今回の環境では、次のような情報が出力された。

[debug] Command-line config: ['-v']
[debug] Encodings: locale UTF-8, fs utf-8, pref utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2026.10.21 from yt-dlp/yt-dlp [8cdf4fea4] (zip)
[debug] Python 3.12.13 (CPython x86_64 64bit) - Linux-6.12.0-211.7.3.el10_2.x86_64-x86_64-with-glibc2.39
[debug] exe versions: ffmpeg 7.1.5 (setts), ffprobe 7.1.5
[debug] Optional libraries: requests-2.32.4, sqlite3-3.46.1, urllib3-1.26.19 (unsupported), yt_dlp_ejs-0.8.0
[debug] JS runtimes: none
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Plugin directories: none
[debug] Loaded 1747 extractors

このうち、確認したいのは次の行。

[debug] exe versions: ffmpeg 7.1.5 (setts), ffprobe 7.1.5

FFmpeg と ffprobe のバージョンが表示されているので、yt-dlp から両者を認識できていることがわかる。

なお、URL を指定せずに yt-dlp -v を実行したため、最後には URL が必要だというエラーも表示される。

Usage: yt-dlp [OPTIONS] URL [URL...]

yt-dlp: error: You must provide at least one URL.
Type yt-dlp --help to see a list of all options.

これは URL を指定していないことによるエラーであり、上記のデバッグ情報が取得できていれば、FFmpeg の認識確認自体はできている。

5. 実際に動画をダウンロードしてみる

ここまで準備できたので、実際に動画をダウンロードしてみる。

今回はテストとして、YouTube の動画 URL を指定して実行した。

[root@youtubedownloader ~]# yt-dlp 'https://www.youtube.com/watch?v=RE_AlDzUgMM'

実行すると、次のようなログが出力された。

[youtube] Extracting URL: https://www.youtube.com/watch?v=RE_AlDzUgMM
[youtube] RE_AlDzUgMM: Downloading webpage
WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing.
[youtube] RE_AlDzUgMM: Downloading visionos player API JSON
[youtube] RE_AlDzUgMM: Downloading m3u8 information
[info] RE_AlDzUgMM: Downloading 1 format(s): 401+251
[download] Destination: 動画タイトル [RE_AlDzUgMM].f401.mp4
[download] 100% of 143.99MiB in 00:00:17 at 8.12MiB/s
[download] Destination: 動画タイトル [RE_AlDzUgMM].f251.webm
[download] 100% of 10.22MiB in 00:00:01 at 6.32MiB/s
[Merger] Merging formats into "動画タイトル [RE_AlDzUgMM].webm"

※ 動画タイトルなど、一部の表示は読みやすさのために省略している。実際にはタイトルを含むファイル名が表示される。

5.1. 映像と音声が別々にダウンロードされる

ログを見ると、映像と音声がそれぞれ別のファイルとしてダウンロードされていることがわかる。

[download] Destination: 動画タイトル [RE_AlDzUgMM].f401.mp4
[download] Destination: 動画タイトル [RE_AlDzUgMM].f251.webm

その後、次のログが表示された。

[Merger] Merging formats into "動画タイトル [RE_AlDzUgMM].webm"

これは、取得した映像と音声を FFmpeg で結合していることを示している。

結合後は、通常、元の一時ファイルが削除される。

今回のケースでは最終的なファイルが .webm 形式になった。

高画質で動画を取得できても、必ずしも MP4 形式で保存されるわけではない点に注意したい。

5.2. JavaScript ランタイムの警告について

今回の実行では、次の警告も表示された。

WARNING: [youtube] No supported JavaScript runtime could be found.

これは、yt-dlp が利用可能な JavaScript ランタイムを検出できなかったことを示している。

今回の環境では警告が出た状態でも動画の取得には成功したが、取得可能な形式が制限されたり、今後の仕様変更で正常に取得できなくなったりする可能性がある。

そのため、動画を取得できたからといって、この警告を無視してよいとは限らない。

必要に応じて、yt-dlp の公式ドキュメントに従って対応する JavaScript ランタイムを導入する。

参考:

6. 保存形式を MP4 に固定する

毎回 WebM 形式になったり、保存形式が動画によって変わったりするのは少し面倒。

というわけで、MP4 の映像と M4A の音声を優先して取得するようにする。

6.1. ダウンロード時に形式を指定する

以下のコマンドを実行する。

[root@youtubedownloader ~]# yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" 'https://www.youtube.com/watch?v=RE_AlDzUgMM'

指定している形式の意味は以下のとおり。

指定 意味
bestvideo[ext=mp4] MP4 形式の映像から最良のものを選ぶ
bestaudio[ext=m4a] M4A 形式の音声から最良のものを選ぶ
/best[ext=mp4] 上記の組み合わせが利用できない場合、MP4 形式の単一ファイルを選ぶ
/best それも利用できない場合、利用可能な最良の単一ファイルを選ぶ

今回の実行では、次のような結果になった。

[info] RE_AlDzUgMM: Downloading 1 format(s): 401+140
[download] Destination: 動画タイトル [RE_AlDzUgMM].f401.mp4
[download] Destination: 動画タイトル [RE_AlDzUgMM].f140.m4a
[Merger] Merging formats into "動画タイトル [RE_AlDzUgMM].mp4"

最終的に MP4 形式のファイルが生成された。

ただし、指定した形式が存在しない場合には、フォールバック先の形式が選択されることがある。常に MP4 で保存されることを保証する指定ではない点には注意したい。

7. MP4 の設定をデフォルト化する

毎回 -f オプションを指定するのは面倒なので、設定ファイルに記述しておく。

7.1. 設定ファイルを作成する

まず、設定ファイルを配置するディレクトリを作成する。

[root@youtubedownloader ~]# mkdir -p ~/.config/yt-dlp

続いて、設定ファイルに形式の指定を記述する。

[root@youtubedownloader ~]# echo '-f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best"' > ~/.config/yt-dlp/config

これで設定は完了。

7.2. 設定ファイルを利用してダウンロードする

以降は、通常どおり URL を指定するだけでよい。

[root@youtubedownloader ~]# yt-dlp 'https://youtu.be/T1AW8Gj1Xyg?si=vfRhrCahEK3HFk_z'

今回の実行でも、MP4 の映像と M4A の音声が選択された。

[info] T1AW8Gj1Xyg: Downloading 1 format(s): 616+140
[download] Destination: 動画タイトル [T1AW8Gj1Xyg].f616.mp4
[download] Destination: 動画タイトル [T1AW8Gj1Xyg].f140.m4a
[Merger] Merging formats into "動画タイトル [T1AW8Gj1Xyg].mp4"

これで、毎回形式を指定する手間が省ける。

なお、~/.config/yt-dlp/config は実行ユーザーのホームディレクトリを基準に読み込まれる。今回のように root で実行する場合は /root/.config/yt-dlp/config が対象になる。

別のユーザーで実行する場合は、そのユーザーのホームディレクトリに設定ファイルを用意する必要がある。

8. ダウンロードしたファイルを確認する

最後に、ファイルが保存されていることを確認する。

[root@youtubedownloader ~]# ls -lh
合計 410M
-rw-------. 1 root root 1.3K 10月 24 13:54 anaconda-ks.cfg
-rw-r--r--. 1 root root 155M 10月 24 22:54 '動画タイトル [RE_AlDzUgMM].mp4'
-rw-r--r--. 1 root root 155M 10月 24 22:50 '動画タイトル [RE_AlDzUgMM].webm'
-rw-r--r--. 1 root root 102M 10月 24 22:59 '動画タイトル [T1AW8Gj1Xyg].mp4'

実際の環境では、MP4 と WebM のファイルがそれぞれ保存されていることを確認できた。

なお、これは異なるコマンドでダウンロードした結果であり、同じ動画を MP4 と WebM の両方で保存している場合もある。

9. 番外編:AlmaLinux 9 で yt-dlp が動かない場合

ここからは AlmaLinux 9 で発生した問題についても触れておく。

AlmaLinux 10 とは別の話になるが、同じ手順を AlmaLinux 9 で試した際、Python のバージョンが原因で yt-dlp が起動できなかった。

9.1. 発生したエラー

通常の yt-dlp ファイルをダウンロードして実行すると、次のようなエラーが発生した。

# yt-dlp --version
Traceback (most recent call last):
  File "/usr/lib64/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib64/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/bin/yt-dlp/__main__.py", line 14, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "/usr/local/bin/yt-dlp/yt_dlp/__init__.py", line 4, in <module>
ImportError: You are using an unsupported version of Python. Only Python versions 3.10 and above are supported by yt-dlp

エラーメッセージを見ると、Python 3.10 以上が必要だとわかる。

9.2. 原因

AlmaLinux 9 の標準 Python 環境は、今回の環境では Python 3.9 だった。

一方、取得した yt-dlp は Python 3.10 以上を要求していたため、実行に失敗した。

つまり、問題は yt-dlp 自体のインストールではなく、実行環境の Python のバージョンにあった。

9.3. スタンドアロン版を利用する

解決方法として、OS 標準の Python 環境を無理に変更するのではなく、Python 実行環境を同梱した Linux 向けスタンドアロン版を利用する。

# curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -o /usr/local/bin/yt-dlp
# chmod a+rx /usr/local/bin/yt-dlp

通常版とは異なり、yt-dlp_linux を取得して配置するのがポイント。

これにより、OS 標準の Python のバージョンに依存する問題を回避できる。

ただし、スタンドアロン版も対応アーキテクチャや実行環境などの条件があるため、利用する環境に適合しているか確認してほしい。

まとめ

今回は AlmaLinux 10.2 で FFmpeg と yt-dlp を導入し、YouTube の動画を MP4 形式で保存するまでの手順をまとめた。

今回のポイントは以下のとおり。

  • FFmpeg は EPEL・CRB・RPM Fusion を準備してからインストールする。
  • yt-dlp は GitHub の公式リリースから取得できる。
  • yt-dlp -v で FFmpeg と ffprobe が認識されているか確認できる。
  • -f オプションを使えば、MP4 の映像と M4A の音声を優先して取得できる。
  • ~/.config/yt-dlp/config に設定を書いておけば、毎回オプションを指定する必要がない。
  • AlmaLinux 9 では Python のバージョンによって通常版が動作しないことがあり、スタンドアロン版が解決策になる場合がある。
  • JavaScript ランタイムの警告が出た場合は、公式ドキュメントを確認して必要な対応を行う。

実際に環境構築をしてみると、パッケージの提供状況や Python のバージョンなど、ディストリビューションによって違いがあることを改めて実感した。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?