やりたいこと
dockerコンテナ上でffmpegを使って、動画ファイルの圧縮や動画形式の変換を行う方法をまとめます。
Dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
wget \
xz-utils
WORKDIR /tmp
RUN wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz \
&& tar xvf ./ffmpeg-git-amd64-static.tar.xz \
&& cp ./ffmpeg*amd64-static/ffmpeg /usr/local/bin/
CMD /bin/bash
Dockerイメージのビルド
$ ls ./ffmpeg-docker/
Dockerfile
$ docker build -t ffmpeg:latest ./ffmpeg-docker/
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu:20.04
(略)
Successfully tagged ffmpeg:latest
私の環境ではdockerのバージョンはDocker version 20.10.18, build b40c2f6でした。
Dockerコンテナの起動
処理したい動画の入っているディレクトリをコンテナ側にマウントします。
$ docker run --rm -ti -v {ホスト側マウント元ディレクトリ}:{コンテナ側マウント先ディレクトリ} ffmpeg:latest /bin/bash
動画の圧縮・変換
私のiPhone 15 proで撮影した.MOVの動画ファイルをmp4に変換、また圧縮を行ってみます。
$ ffmpeg -i input.MOV -crf 23 output.mp4
(略)
[libx264 @ 0x7d40b80] ref B L0: 85.7% 11.1% 3.1%
[libx264 @ 0x7d40b80] ref B L1: 95.1% 4.9%
[libx264 @ 0x7d40b80] kb/s:1888.54
[aac @ 0x9179d40] Qavg: 405.099
$ ls -lh input.MOV | awk '{print $5}'
22M
$ls -lh output.mp4 | awk '{print $5}'
4.5M
22MBの動画ファイルが4.5MBになり、問題なく再生できました。crfの数値を上げると動画の品質が下がり、ファイルサイズが小さくなります。