ffmpeg-docker-containers について
Docker コンテナで FFmpeg を実行するための実用スキルガイドです。動画処理パイプラインやサービス向けに、イメージ選択、ハードウェアアクセラレーション、デプロイ方法を扱います。
主な機能
- 01FFmpeg Docker イメージの種類の比較
- 02コンテナ内でのトランスコード実行
- 03NVIDIA、Intel、AMD GPU の設定
- 04Compose と Kubernetes のデプロイ
- 05リソース制限とマウントボリュームの調整
活用シーン
- 01CI/CD パイプラインでの FFmpeg バージョン統一
- 02本番トランスコードサービスの運用
- 03Kubernetes での動画処理ジョブの実行
- 04GPU アクセラレーションを使うコンテナ処理の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill ffmpeg-docker-containersインストール後、Claude Code で/ffmpeg-docker-containersを入力して読み込まれたか確認します。
詳細
重要なガイドライン
Windows のファイルパス要件
必須:Windows ではファイルパスに常にバックスラッシュを使用してください
Windows で Edit または Write ツールを使用する場合、ファイルパスにはスラッシュ(/)ではなく、バックスラッシュ(\)を必ず使用してください。
クイックリファレンス
| イメージ | サイズ | GPU | コマンド |
|---|---|---|---|
jrottenberg/ffmpeg:7.1-alpine320 | ~100MB | なし | docker run --rm -v $(pwd):/data jrottenberg/ffmpeg:7.1-alpine320 -i /data/input.mp4 /data/output.mp4 |
jrottenberg/ffmpeg:7.1-nvidia2404 | ~1.5GB | NVIDIA | docker run --gpus all --rm -v $(pwd):/data jrottenberg/ffmpeg:7.1-nvidia2404 ... |
jrottenberg/ffmpeg:7.1-vaapi2404 | ~300MB | Intel/AMD | --device /dev/dri:/dev/dri を追加 |
linuxserver/ffmpeg:latest | ~150MB | なし | LinuxServer.io がメンテナンス |
このスキルを使用する場面
コンテナ化された FFmpeg のデプロイには、次のような場面で使用します。
- 一貫した FFmpeg バージョンが必要な CI/CD パイプライン
- FFmpeg の要件がユーザーごとに異なるマルチユーザーシステム
- 本番環境のトランスコードサービス
- Kubernetes の動画処理ジョブ
- GPU パススルー構成
Docker コンテナでの FFmpeg(2025)
GPU サポート、最適化、本番環境向けのパターンを含む、Docker コンテナで FFmpeg を実行するための完全ガイドです。
FFmpeg に Docker を使用する理由
メリット
- 分離:ホストシステム上での依存関係の競合がありません
- 再現性:どこでも同じ FFmpeg バージョンを使用できます
- 移植性:プラットフォーム間で同じように動作します
- 簡単な更新:イメージタグを変更するだけで FFmpeg のバージョンを切り替えられます
- CI/CD との統合:パイプラインで一貫したビルドを実現できます
- GPU アクセス:NVIDIA、Intel、AMD のハードウェアアクセラレーションを利用できます
Docker を使用する場面
- FFmpeg の要件が異なるマルチユーザー環境
- 特定の FFmpeg ビルドが必要な CI/CD パイプライン
- 本番環境のトランスコードサービス
- コンテナ化されたマイクロサービスアーキテクチャ
- システムの FFmpeg に含まれていない特定のコーデックや機能が必要な場合
人気の FFmpeg Docker イメージ
jrottenberg/ffmpeg(推奨)
最も人気があり、メンテナンスが行き届いた FFmpeg Docker イメージです。
利用可能なバリアント:
| タグ | ベース | サイズ | 用途 |
|---|---|---|---|
7.1-ubuntu2404 | Ubuntu 24.04 LTS | ~250MB | 本番環境、フル機能 |
7.1-alpine320 | Alpine 3.20 | ~100MB | 最小構成、高速な起動 |
7.1-nvidia2404 | Ubuntu + CUDA | ~1.5GB | NVIDIA GPU |
7.1-vaapi2404 | Ubuntu + VAAPI | ~300MB | Intel/AMD GPU(Linux) |
7.1-scratch | Scratch | ~80MB | 最小構成、静的バイナリ |
8.0-ubuntu2404 | Ubuntu 24.04 LTS | ~250MB | 最新の FFmpeg 8.0 |
# Pull specific version
docker pull jrottenberg/ffmpeg:7.1-ubuntu2404
# Latest (not recommended for production)
docker pull jrottenberg/ffmpeg:latest
linuxserver/ffmpeg
一時的なコマンドラインでの使用向けに設計されています。
docker pull linuxserver/ffmpeg:latest
mwader/static-ffmpeg
静的コンパイルされた FFmpeg バイナリです。
docker pull mwader/static-ffmpeg:7.1
基本的な使い方
シンプルなトランスコード
# Mount current directory and run FFmpeg
docker run --rm \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /data/input.mp4 \
-c:v libx264 \
-c:a aac \
/data/output.mp4
Windows(PowerShell)
# Windows PowerShell
docker run --rm `
-v ${PWD}:/data `
jrottenberg/ffmpeg:7.1-ubuntu2404 `
-i /data/input.mp4 `
-c:v libx264 `
/data/output.mp4
Windows(Git Bash/MINGW)
# Git Bash requires MSYS_NO_PATHCONV to prevent path conversion
MSYS_NO_PATHCONV=1 docker run --rm \
-v "$(pwd)":/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /data/input.mp4 \
-c:v libx264 \
/data/output.mp4
絶対パスを使用する
# Linux/macOS
docker run --rm \
-v /home/user/videos:/input:ro \
-v /home/user/output:/output \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /input/video.mp4 \
/output/converted.mp4
# Windows
docker run --rm \
-v C:\Videos:/input:ro \
-v C:\Output:/output \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /input/video.mp4 \
/output/converted.mp4
Docker での GPU アクセラレーション
NVIDIA GPU(Docker + NVIDIA Container Toolkit)
要件:
- NVENC をサポートする NVIDIA GPU
- NVIDIA ドライバー 450 以上
- NVIDIA Container Toolkit のインストール
NVIDIA Container Toolkit をインストールする:
# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
NVIDIA GPU を使用して実行する:
docker run --rm --gpus all \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-nvidia2404 \
-hwaccel cuda \
-hwaccel_output_format cuda \
-i /data/input.mp4 \
-c:v h264_nvenc \
-preset p4 \
/data/output.mp4
特定の GPU を選択する:
# Use GPU 0 only
docker run --rm --gpus '"device=0"' \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-nvidia2404 \
-hwaccel cuda -i /data/input.mp4 -c:v h264_nvenc /data/output.mp4
# Use multiple GPUs
docker run --rm --gpus '"device=0,1"' \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-nvidia2404 \
...
Intel QSV/VAAPI(Linux)
# Intel GPU with VAAPI
docker run --rm \
--device=/dev/dri:/dev/dri \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-vaapi2404 \
-hwaccel vaapi \
-hwaccel_device /dev/dri/renderD128 \
-hwaccel_output_format vaapi \
-i /data/input.mp4 \
-vf 'format=nv12|vaapi,hwupload' \
-c:v h264_vaapi \
/data/output.mp4
AMD GPU(Linux VAAPI)
docker run --rm \
--device=/dev/dri:/dev/dri \
--device=/dev/kfd:/dev/kfd \
--group-add video \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-vaapi2404 \
-hwaccel vaapi \
-hwaccel_device /dev/dri/renderD128 \
-i /data/input.mp4 \
-c:v h264_vaapi \
/data/output.mp4
カスタム FFmpeg イメージのビルド
最小構成のカスタム Dockerfile
FROM ubuntu:24.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
build-essential \
pkg-config \
yasm \
nasm \
git \
wget \
libx264-dev \
libx265-dev \
libvpx-dev \
libfdk-aac-dev \
libmp3lame-dev \
libopus-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /tmp/ffmpeg
RUN wget -O ffmpeg.tar.bz2 https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2 && \
tar xjf ffmpeg.tar.bz2 --strip-components=1
RUN ./configure \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libopus \
--disable-doc \
--disable-debug && \
make -j$(nproc) && \
make install
# Production stage
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
libx264-164 \
libx265-209 \
libvpx9 \
libfdk-aac2 \
libmp3lame0 \
libopus0 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/
COPY --from=builder /usr/local/bin/ffprobe /usr/local/bin/
ENTRYPOINT ["ffmpeg"]
NVIDIA サポートを有効にしてビルドする
FROM nvidia/cuda:12.4-devel-ubuntu24.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
# Install build dependencies
RUN apt-get update && apt-get install -y \
build-essential \
pkg-config \
yasm \
nasm \
git \
wget \
libx264-dev \
libx265-dev \
&& rm -rf /var/lib/apt/lists/*
# Install nv-codec-headers
RUN git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && \
cd nv-codec-headers && \
make install
# Build FFmpeg
WORKDIR /tmp/ffmpeg
RUN wget -O ffmpeg.tar.bz2 https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2 && \
tar xjf ffmpeg.tar.bz2 --strip-components=1
RUN ./configure \
--enable-gpl \
--enable-nonfree \
--enable-cuda-nvcc \
--enable-libnpp \
--enable-nvenc \
--enable-nvdec \
--enable-cuvid \
--enable-libx264 \
--enable-libx265 \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 && \
make -j$(nproc) && \
make install
# Production stage
FROM nvidia/cuda:12.4-runtime-ubuntu24.04
RUN apt-get update && apt-get install -y \
libx264-164 \
libx265-209 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/
COPY --from=builder /usr/local/bin/ffprobe /usr/local/bin/
ENTRYPOINT ["ffmpeg"]
Docker Compose のパターン
シンプルなトランスコードサービス
version: '3.8'
services:
ffmpeg:
image: jrottenberg/ffmpeg:7.1-ubuntu2404
volumes:
- ./input:/input:ro
- ./output:/output
command: >
-i /input/video.mp4
-c:v libx264 -crf 23
-c:a aac -b:a 128k
/output/converted.mp4
GPU アクセラレーション対応サービス
version: '3.8'
services:
ffmpeg-gpu:
image: jrottenberg/ffmpeg:7.1-nvidia2404
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
volumes:
- ./input:/input:ro
- ./output:/output
command: >
-hwaccel cuda
-hwaccel_output_format cuda
-i /input/video.mp4
-c:v h264_nvenc
/output/output.mp4
監視フォルダーでの処理
version: '3.8'
services:
ffmpeg-watcher:
image: jrottenberg/ffmpeg:7.1-ubuntu2404
volumes:
- ./watch:/watch
- ./done:/done
entrypoint: ["/bin/sh", "-c"]
command:
- |
while true; do
for f in /watch/*.mp4; do
[ -e "$$f" ] || continue
filename=$$(basename "$$f")
ffmpeg -i "$$f" -c:v libx264 -crf 23 "/done/$$filename"
rm "$$f"
done
sleep 5
done
restart: unless-stopped
Kubernetes へのデプロイ
FFmpeg ジョブ
apiVersion: batch/v1
kind: Job
metadata:
name: ffmpeg-transcode
spec:
template:
spec:
containers:
- name: ffmpeg
image: jrottenberg/ffmpeg:7.1-ubuntu2404
command:
- ffmpeg
- -i
- /input/video.mp4
- -c:v
- libx264
- /output/output.mp4
volumeMounts:
- name: input
mountPath: /input
readOnly: true
- name: output
mountPath: /output
volumes:
- name: input
persistentVolumeClaim:
claimName: input-pvc
- name: output
persistentVolumeClaim:
claimName: output-pvc
restartPolicy: Never
GPU 対応 Pod(NVIDIA)
apiVersion: v1
kind: Pod
metadata:
name: ffmpeg-gpu
spec:
containers:
- name: ffmpeg
image: jrottenberg/ffmpeg:7.1-nvidia2404
resources:
limits:
nvidia.com/gpu: 1
command:
- ffmpeg
- -hwaccel
- cuda
- -i
- /input/video.mp4
- -c:v
- h264_nvenc
- /output/output.mp4
volumeMounts:
- name: input
mountPath: /input
- name: output
mountPath: /output
volumes:
- name: input
hostPath:
path: /data/input
- name: output
hostPath:
path: /data/output
パフォーマンスの最適化
ボリュームマウントのベストプラクティス
# Read-only input for security
docker run --rm \
-v $(pwd)/input:/input:ro \
-v $(pwd)/output:/output \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /input/video.mp4 /output/output.mp4
# Use tmpfs for temp files
docker run --rm \
--tmpfs /tmp:size=1G \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /data/input.mp4 /data/output.mp4
リソース制限
# Limit CPU and memory
docker run --rm \
--cpus="4" \
--memory="4g" \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-threads 4 \
-i /data/input.mp4 /data/output.mp4
並列処理
# Process multiple files in parallel
for f in *.mp4; do
docker run --rm -d \
--cpus="2" \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i "/data/$f" "/data/converted_$f"
done
トラブルシューティング
よくある問題
出力時にアクセス拒否が発生する:
# Check file ownership
ls -la output/
# Run with current user
docker run --rm \
--user $(id -u):$(id -g) \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /data/input.mp4 /data/output.mp4
GPU が検出されない:
# Verify NVIDIA runtime
docker run --rm --gpus all nvidia/cuda:12.4-base-ubuntu24.04 nvidia-smi
# Check Docker GPU support
docker info | grep -i gpu
パス変換の問題(Git Bash):
# Set MSYS_NO_PATHCONV
MSYS_NO_PATHCONV=1 docker run ...
# Or add to ~/.bashrc
export MSYS_NO_PATHCONV=1
メモリ不足:
# Increase memory limit
docker run --rm --memory="8g" --memory-swap="8g" ...
# Use streaming mode
docker run --rm \
-v $(pwd):/data \
jrottenberg/ffmpeg:7.1-ubuntu2404 \
-i /data/input.mp4 \
-f segment -segment_time 60 \
/data/output_%03d.mp4
デバッグコマンド
# Enter container shell
docker run --rm -it \
--entrypoint /bin/bash \
jrottenberg/ffmpeg:7.1-ubuntu2404
# Check FFmpeg version and capabilities
docker run --rm jrottenberg/ffmpeg:7.1-ubuntu2404 -version
docker run --rm jrottenberg/ffmpeg:7.1-ubuntu2404 -encoders
docker run --rm jrottenberg/ffmpeg:7.1-ubuntu2404 -hwaccels
ベストプラクティス
- イメージのバージョンを固定する -
latestではなく、特定のタグを使用します - 入力ファイルには読み取り専用のマウントを使用する
- ホストのリソース枯渇を防ぐため、リソースを制限する
- カスタムイメージにはマルチステージビルドを使用する
- コンテナーのログ記録にはstdout/stderr に出力する
- 長時間実行するサービスにはヘルスチェックを設定する
--rmフラグを使用してコンテナーをクリーンアップする- セキュリティ - 可能な場合は、root 以外のユーザーとして実行します
このガイドでは、Docker FFmpeg のパターンを説明します。ハードウェアアクセラレーションの詳細については、ハードウェアアクセラレーションのスキルを参照してください。
コメント
Markdown 対応