Contents
対象環境と事前準備(Ubuntu 22.04 / OBS / ffmpeg)
導入前にセッションタイプ、GPU ドライバ、Secure Boot の状態を必ず確認してください。
Wayland と Xorg で必要なソフトや権限が変わるため、ここで判定してから作業を進めます。
セッションタイプの確認(Xorg / Wayland)
セッションが Wayland か Xorg かで画面キャプチャや PipeWire の要件が変わります。以下で判定してください。
|
1 2 |
echo $XDG_SESSION_TYPE |
出力が "x11" なら Xorg、"wayland" なら Wayland です。Wayland の場合は後述の PipeWire / xdg-desktop-portal 関係の整備が必須です。
GPU とドライバの確認
ハードウェアエンコードの可否は GPU とドライバで決まります。まずはドライバの有無とデバイス情報を確認してください。
- NVIDIA: nvidia-smi でドライバと GPU を確認します(プロプライエタリドライバ必須)。
- Intel: vainfo で VAAPI の出力を確認します(iHD / i965 ドライバの違いに注意)。
- AMD: VAAPI(Mesa のサポート状況)を確認します。
詳細な確認コマンドは付録の検証コマンド集にまとています。
linux-headers / DKMS と Secure Boot の初期確認
v4l2loopback-dkms や独自 DKMS モジュールは linux-headers と連携します。Secure Boot が有効だと署名されていないモジュールはロードされません。まずは状態を確認しておきます。
|
1 2 3 4 |
sudo apt update sudo apt install -y linux-headers-$(uname -r) build-essential dkms mokutil mokutil --sb-state |
Secure Boot をどう扱うか(署名して MOK 登録するか、UEFI で無効化するか)は後の「運用とセキュリティ」で具体的に説明します。
ffmpeg の導入: apt / PPA / ソースビルド(Ubuntu 22.04 向け)
まず公式 apt 版で目的が達成できるかを確認します。追加コーデックや最新 hwenc を使いたい場合は PPA かソースビルドに進み、必要な -dev パッケージと手順を示します。
公式 apt パッケージの導入と簡易確認
まずは安定版として公式リポジトリの ffmpeg を入れて基本機能を確認します。多くの環境ではこれで十分です。
|
1 2 3 4 |
sudo apt update sudo apt install -y ffmpeg ffmpeg -version |
詳細なエンコーダ一覧や hwaccel の確認は付録にある検証コマンド集を使ってください。
configure オプションと対応する -dev パッケージ(Ubuntu 22.04)
ソースビルドで有効化する主要オプションと、Ubuntu 22.04 上で一般に必要となる開発パッケージの対応表です。必要なリポジトリ(universe/multiverse)は有効化してください。
| 機能(用途) | configure オプション例 | Ubuntu 22.04 での主な apt パッケージ / 備考 |
|---|---|---|
| x264 (H.264 ソフトエンコード) | --enable-libx264 | libx264-dev(universe) |
| x265 (H.265 ソフトエンコード) | --enable-libx265 | libx265-dev(universe) |
| libvpx (VP8/VP9) | --enable-libvpx | libvpx-dev |
| libfdk-aac (高品質 AAC、非フリー) | --enable-libfdk-aac | libfdk-aac-dev(multiverse, ライセンス注意) |
| Opus / Vorbis | --enable-libopus / --enable-libvorbis | libopus-dev / libvorbis-dev libogg-dev |
| AOM (AV1) | --enable-libaom | libaom-dev(不要なら省略) |
| dav1d (AV1 デコーダ) | --enable-libdav1d | libdav1d-dev |
| VAAPI (Intel/AMD HW) | --enable-vaapi | libva-dev libdrm-dev + intel-media-va-driver / i965-va-driver(環境依存) |
| NVENC (NVIDIA HW) | --enable-nvenc | nv-codec-headers をソースから導入。NVIDIA プロプライエタリドライバ必須 |
| QSV (Intel Quick Sync) | --enable-libmfx / --enable-qsv | Intel oneVPL / libmfx(配布元依存、oneVPL の導入を推奨) |
| libass / フォント | --enable-libass / --enable-libfreetype | libass-dev / libfreetype6-dev |
| X11/GUI/その他 | --enable-libxcb など | libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev |
NVENC は専用ヘッダ(nv-codec-headers)が必要で、パッケージ化されていない場合は Git から取得して make install します。QSV は Intel 提供の oneVPL/libmfx の整備が必要なため、配布元の手順を参照してください。
ソースビルドの推奨手順(順序・例)
主要な手順と順序の例です。詳細なビルドログや警告は環境依存なので、段階的に確認しながら進めてください。
- 必要なリポジトリを有効化(universe/multiverse)。
- ビルドツールと共通依存をインストール。
|
1 2 3 4 5 6 |
sudo apt update sudo apt install -y autoconf automake build-essential cmake git pkg-config yasm nasm libtool \ libx264-dev libx265-dev libvpx-dev libfdk-aac-dev libopus-dev libvorbis-dev libogg-dev \ libaom-dev libdav1d-dev libass-dev libfreetype6-dev libva-dev libdrm-dev libvdpau-dev \ libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev libssl-dev zlib1g-dev libnuma-dev |
- NVENC を使うなら nv-codec-headers を先にインストール。
|
1 2 3 4 |
git clone https://github.com/FFmpeg/nv-codec-headers.git cd nv-codec-headers make && sudo make install |
- 必要なライブラリ(x264 など)を apt 版で満たせない場合はソースでビルドして /usr/local に入れる。
- ffmpeg ソースを取得し configure → make → make install。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure \ --prefix=/usr/local --enable-gpl --enable-nonfree \ --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac \ --enable-libopus --enable-libvorbis --enable-libaom --enable-libdav1d \ --enable-vaapi --enable-nvenc --extra-cflags="-I/usr/local/include" \ --extra-ldflags="-L/usr/local/lib" make -j$(nproc) sudo make install sudo ldconfig |
注意: libfdk-aac 等の非フリーコードはビルド時に --enable-nonfree が必要です。業務利用ではライセンス確認を行ってください。
OBS Studio の導入(PPA / Snap / Flatpak 比較)
OBS は配布形態でプラグインやデバイスアクセスに差が出ます。運用重視なら PPA、サンドボックス重視であれば flatpak を検討してください。
PPA(ppa:obsproject/obs-studio) の利点と導入手順(運用向け)
システムと密に連携するため、ハードウェアエンコードや v4l2loopback との組み合わせでトラブルが少ない傾向です。運用環境ではまず PPA を推奨します。
|
1 2 3 4 |
sudo add-apt-repository ppa:obsproject/obs-studio sudo apt update sudo apt install -y obs-studio |
導入後はバージョン確認 (obs --version または apt policy obs-studio) を行い、必要に応じて apt-mark hold obs-studio で固定してください。PPA の更新監視とロールバックには ppa-purge を使います(後述)。
Flatpak(Flathub)とポータル、権限設定例
Flatpak はサンドボックスで安定した Wayland/portal 動作を得やすい一方、端末やデバイスへの直接アクセスは portal 経由になりがちです。必要なポータル(xdg-desktop-portal)を入れることが前提です。
|
1 2 3 4 |
sudo apt install -y flatpak xdg-desktop-portal xdg-desktop-portal-gnome sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install flathub com.obsproject.Studio |
Flatpak の権限を確認・変更するコマンド例:
|
1 2 3 |
flatpak info --show-permissions com.obsproject.Studio flatpak override --user --filesystem=/dev com.obsproject.Studio # /dev デバイスを直接許可する(必要な場合のみ) |
推奨はまず portal 経由で動作させ、どうしても /dev へ直接アクセスが必要な場合に override を使うことです。
Snap の特徴と confinement / interfaces の扱い
Snap はインストールが簡単ですが、サンドボックスで /dev やホストの音声サービスへのアクセスに制約が出ることがあります。confinement(strict / classic)や接続済み interfaces を確認してください。
|
1 2 3 4 5 6 |
snap info obs-studio snap connections obs-studio sudo snap connect obs-studio:camera sudo snap connect obs-studio:removable-media sudo snap connect obs-studio:alsa |
snap の場合、obs-v4l2sink 等のプラグインがスナップ内に含まれているか、あるいは外部で v4l2loopback に書き出せるかを必ず確認してください。
動作確認で用いたバージョン(例)
検証や手順の参照として、動作確認で一般的に使われるバージョン例を示します。実際は環境で差が出るため、各自で ffmpeg -version / obs --version を確認してください。
- OBS(例): 29.x 系 / 30.x 系(配布元により異なる)
- FFmpeg(例): 5.x / 6.x 系(ソースビルド時は git master も可)
v4l2loopback(仮想カメラ)導入と OBS 連携、Wayland と Xorg の違い
仮想カメラはカーネルモジュールと OBS の出力先が鍵です。Wayland では PipeWire 系の流れや portal の権限も確認してください。
v4l2loopback の導入と基本設定
v4l2loopback-dkms で仮想 /dev/video デバイスを作ります。exclusive_caps=1 を指定すると互換性が上がる場合があります。
|
1 2 3 4 5 |
sudo apt update sudo apt install -y v4l2loopback-dkms v4l-utils sudo modprobe v4l2loopback devices=1 video_nr=10 card_label="OBS Loopback" exclusive_caps=1 ls -l /dev/video10 |
仮想デバイスのフォーマット確認は付録の v4l2 コマンド集を参照してください。
OBS の「Start Virtual Camera」と obs-v4l2sink / obs-virtualcam の関係
OBS の仮想カメラ出力が /dev/video に出るかは、OBS のビルドに含まれるプラグインと環境に依存します。
- obs-v4l2sink プラグイン(または同等の組み込み)が存在すれば、OBS の仮想カメラ出力を /dev/video* に書き出せます。
- Wayland(PipeWire)環境では仮想カメラが PipeWire のストリームとして提供され、アプリ側が PipeWire を読めれば動作します。/dev/video に出すには v4l2loopback + obs-v4l2sink が必要です。
- Snap/Flatpak ではサンドボックスにより /dev へのアクセスが制限されるため、必要なインターフェース接続や flatpak override を行ってください。
プラグインの有無は次のように確認できます(パスは環境に依存します)。
|
1 2 3 |
ls /usr/lib/*/obs-plugins | grep -i v4l2 find / -name 'obs-v4l2sink*' 2>/dev/null || true |
必要なら obs-v4l2sink をソースからビルドし、OBS のプラグインフォルダへインストールします。OBS の開発ヘッダと build-dep を利用すると依存解決が容易です。
Wayland 固有の注意(PipeWire / wireplumber / xdg-desktop-portal)
Wayland での画面共有や音声ルーティングは PipeWire と xdg-desktop-portal の組み合わせで動きます。Ubuntu 22.04 では wireplumber を使うのが安定しています。デスクトップ環境ごとに portal を選んでください。
|
1 2 |
sudo apt install -y pipewire pipewire-pulse wireplumber xdg-desktop-portal xdg-desktop-portal-gnome |
KDE なら xdg-desktop-portal-kde、Sway 等の wlroots 系なら xdg-desktop-portal-wlr を選びます。PipeWire を PulseAudio 互換にするには pipewire-pulse を有効化し、必要に応じて pulseaudio.service をユーザ側で置き換えます(操作は慎重に)。
ハードウェアエンコードの検証(NVENC / QSV / VAAPI)
ハードウェアエンコードは GPU、ドライバ、ffmpeg のビルド設定が揃って初めて動作します。短時間の実測コマンドでエンコーダ名とエラーを確認してください。
NVENC(NVIDIA) の実行例と期待される出力
事前条件: NVIDIA プロプライエタリドライバ、nv-codec-headers を導入済み。
短時間テスト(5 秒):
|
1 2 3 4 5 6 |
ffmpeg -hide_banner -loglevel info \ -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \ -f lavfi -i sine=frequency=440:duration=5 \ -c:v h264_nvenc -preset p2 -b:v 2M \ -c:a aac -b:a 128k -y /tmp/test_nvenc.mp4 |
期待される確認ポイント:
ffmpeg -hide_banner -encoders | grep nvencにh264_nvencが表示される。- エンコードログ内に
Using NVENCやh264_nvencに関する初期化ログが出る。 - 典型的なエラー:
Unknown encoder 'h264_nvenc'(FFmpeg に NVENC サポートなし)やFailed to create encoder(ドライバ/ヘッダ不整合)。
GPU 使用状況の確認は nvidia-smi -l 1 で行います。
VAAPI(Intel / AMD) の実行例と期待される出力
事前条件: libva と適切なドライバ(intel-media-va-driver または i965-va-driver)。
短時間テスト(5 秒):
|
1 2 3 4 5 |
ffmpeg -hide_banner -loglevel info \ -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \ -vf 'format=nv12,hwupload' -c:v h264_vaapi -b:v 2M \ -c:a aac -b:a 128k -y /tmp/test_vaapi.mp4 |
期待される確認ポイント:
ffmpeg -hide_banner -encoders | grep vaapiにh264_vaapi表示。vainfoが有効な VAAPI プロファイルを返す。- 典型的なエラー:
Error setting up VAAPIやfailed to upload frameはドライバ/権限の問題を示します。
QSV(Intel Quick Sync) の実行例と期待される出力
事前条件: Intel oneVPL / libmfx 等を導入し、QSV が FFmpeg に組み込まれていること。
短時間テスト(5 秒):
|
1 2 3 4 5 |
ffmpeg -hide_banner -loglevel info \ -init_hw_device qsv=hw -filter_hw_device hw \ -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \ -c:v h264_qsv -b:v 2M -c:a aac -y /tmp/test_qsv.mp4 |
期待される確認ポイント:
ffmpeg -hide_banner -encoders | grep qsvにh264_qsv表示。- 典型的なエラー:
Unknown encoder 'h264_qsv'(ビルド未対応)やqsv: no supported adapters found(環境依存)。
各 hwenc のエラーはドライバのバージョン不整合やヘッダの未導入が原因であることが多いです。ログメッセージを元に不足ライブラリやバージョンを照合してください。
運用とセキュリティ(Secure Boot、DKMS、更新運用)
DKMS はカーネル更新でモジュールを再ビルドしますが、Secure Boot 有効時は署名が必須です。PPA 導入後の更新監視やロールバック手順も具体的に解説します。
Secure Boot と DKMS モジュール署名(MOK 登録フロー、具体例)
Secure Boot が有効な場合、署名済みのモジュールだけがロードされます。安全に署名して MOK 登録するフローの例です。キーは安全に保管してください。
- 鍵と証明書の作成(PEM と DER を作成):
|
1 2 3 4 5 |
sudo mkdir -p /var/lib/shim-signed cd /var/lib/shim-signed sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform PEM -out MOK.pem -nodes -days 3650 -subj "/CN=Custom Kernel Module Signing/" sudo openssl x509 -outform DER -in MOK.pem -out MOK.der |
- MOK の登録(パスワードを設定して再起動し、MOK 管理画面で登録):
|
1 2 3 |
sudo mokutil --import /var/lib/shim-signed/MOK.der # パスワードを設定して表示に従い再起動。ブート時の MOK Manager で登録を行う。 |
- モジュールの署名(modinfo でモジュールパスを確認して署名):
|
1 2 3 |
MODULE_PATH=$(modinfo -n v4l2loopback) sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/MOK.priv /var/lib/shim-signed/MOK.pem "$MODULE_PATH" |
- 署名確認:
|
1 2 |
modinfo -F signer "$MODULE_PATH" || true |
注意点:
- カーネルアップデートや DKMS による再ビルドの都度、モジュールを再署名する必要があります。自動化するには DKMS の post-build スクリプトで sign-file を呼ぶ方法がありますが、運用上の鍵管理に注意してください。
- 物理的に安全な環境で MOK パスワードを入力する必要があります。
- 別の選択肢として UEFI 設定で Secure Boot を無効化する方法がありますが、プラットフォームのセキュリティを低下させるリスクがあります。無効化手順はマザーボードの UEFI 設定画面で Secure Boot を Off にする操作です。
PPA 導入後の更新監視とロールバック(ppa-purge)
PPA 導入後は更新の影響を監視し、問題があればロールバックできる体制を用意してください。
|
1 2 3 |
sudo apt install -y ppa-purge sudo ppa-purge ppa:obsproject/obs-studio |
重要環境では apt-mark hold obs-studio ffmpeg で一時固定したうえで、検証環境でアップデートテストを行ってから本番へ反映する運用を推奨します。
sudo ワンライナー回避の考え方
外部スクリプトを root 権限で即実行するワンライナーは、供給元に信頼性がない場合リスクが高くなります。リポジトリやスクリプトの中身を確認し、可能ならパッケージ管理(apt/snap/flatpak)や自前のビルド環境で運用してください。
付録:検証コマンド集と短時間テスト
以下は導入後に段階的に実行する代表的なコマンド集です。問題切り分け時に役立ちます。
環境・セッション確認
|
1 2 3 4 |
lsb_release -a uname -r echo $XDG_SESSION_TYPE |
GPU / ドライバ確認
|
1 2 3 4 5 |
lspci -nnk | grep -iA3 vga sudo lshw -c video command -v nvidia-smi && nvidia-smi || true vainfo || true |
ffmpeg 確認
|
1 2 3 4 |
ffmpeg -version ffmpeg -hide_banner -encoders | grep -E 'nvenc|vaapi|qsv|h264|hevc|av1|libx264|libx265' ffmpeg -hide_banner -hwaccels |
v4l2 / 仮想カメラ確認
|
1 2 3 4 5 6 |
sudo apt install -y v4l2loopback-dkms v4l-utils sudo modprobe v4l2loopback devices=1 video_nr=10 exclusive_caps=1 ls -l /dev/video* v4l2-ctl --list-devices v4l2-ctl --list-formats-ext -d /dev/video10 |
OBS ログ確認
|
1 2 3 |
ls -t ~/.config/obs-studio/logs | head -n1 tail -n 200 ~/.config/obs-studio/logs/$(ls -t ~/.config/obs-studio/logs | head -n1) |
DKMS / Secure Boot 状態
|
1 2 3 |
sudo dkms status mokutil --sb-state |
MOK 登録とモジュール署名(フロー例)
|
1 2 3 4 5 6 7 8 9 10 |
sudo mkdir -p /var/lib/shim-signed cd /var/lib/shim-signed sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform PEM -out MOK.pem -nodes -days 3650 -subj "/CN=Custom Kernel Module Signing/" sudo openssl x509 -outform DER -in MOK.pem -out MOK.der sudo mokutil --import /var/lib/shim-signed/MOK.der # パスワードを設定 # 再起動して MOK Manager で登録 MODULE_PATH=$(modinfo -n v4l2loopback) sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/MOK.priv /var/lib/shim-signed/MOK.pem "$MODULE_PATH" modinfo -F signer "$MODULE_PATH" || true |
NVENC / VAAPI / QSV の短時間エンコード例(5 秒、テスト用)
NVENC:
|
1 2 3 4 5 6 |
ffmpeg -hide_banner -loglevel info \ -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \ -f lavfi -i sine=frequency=440:duration=5 \ -c:v h264_nvenc -preset p2 -b:v 2M \ -c:a aac -b:a 128k -y /tmp/test_nvenc.mp4 |
VAAPI:
|
1 2 3 4 5 |
ffmpeg -hide_banner -loglevel info \ -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \ -vf 'format=nv12,hwupload' -c:v h264_vaapi -b:v 2M \ -c:a aac -b:a 128k -y /tmp/test_vaapi.mp4 |
QSV:
|
1 2 3 4 5 |
ffmpeg -hide_banner -loglevel info \ -init_hw_device qsv=hw -filter_hw_device hw \ -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \ -c:v h264_qsv -b:v 2M -c:a aac -y /tmp/test_qsv.mp4 |
各コマンドのログに「未知のエンコーダ」「encoder not found」「Failed to create encoder」などの文言が出た場合は、対応するヘッダ/ドライバの未導入やビルドオプションの不足が原因です。
PPA ロールバック(例)
|
1 2 3 |
sudo apt install -y ppa-purge sudo ppa-purge ppa:obsproject/obs-studio |
参考リンク(公式を優先)
- OBS Project(公式): https://obsproject.com/
- OBS GitHub リポジトリ: https://github.com/obsproject/obs-studio
- FFmpeg 公式: https://ffmpeg.org/
- FFmpeg Ubuntu コンパイルガイド: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
- nv-codec-headers (FFmpeg / NVIDIA): https://github.com/FFmpeg/nv-codec-headers
- NVIDIA Video Codec SDK: https://developer.nvidia.com/nvidia-video-codec-sdk
- v4l2loopback(GitHub): https://github.com/umlaeute/v4l2loopback
- obs-v4l2sink(例:プラグイン): https://github.com/po5/obs-v4l2sink
- Ubuntu のカーネルモジュール署名(ドキュメント): https://ubuntu.com/server/docs/kernel-module-signing
- PipeWire 公式: https://pipewire.org/
- xdg-desktop-portal(freedesktop): https://www.freedesktop.org/wiki/Software/xdg-desktop-portal/
- Flatpak ドキュメント: https://docs.flatpak.org/
- Snapcraft ドキュメント: https://snapcraft.io/docs
まとめとして、まずは公式 apt 版で動作確認を行い、Wayland なら PipeWire / xdg-desktop-portal、v4l2loopback を使う場合は DKMS と Secure Boot 署名の方針を決めてから PPA やソースビルドで拡張する流れが実務的です。検証は短時間エンコードやプラグイン有無の確認を順に行ってください。