Docker + ffmpeg 動画から画像を抜き出す
ffmpegは動画の加工・変換などいろいろできるすごいやつ。
これにより動画から画像を抜き出したい。
しかし、インストールして環境が汚れるのは恐怖。
なのでDockerを使い、コンテナ上でffmpegを扱う。
Dockerは前回(DockerをWindows10で使う)インストールした。
1. Dockerイメージ ダウンロード
コマンドプロンプトから
1 | docker search ffmpeg |
と打つとDocker Hub(Dockerイメージが置いてあるとこ)にある、名前にffmpeg
と付いたDockerイメージを検索できる。
検索した結果jrottenberg/ffmpeg
が一番メジャーっぽいのでこれを使う。
1 | docker pull jrottenberg/ffmpeg |
と打つとjrottenberg/ffmpeg
イメージがダウンロードできる。
1 | docker images |
で確認。
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
表示された。ちゃんとある。
続いてちゃんと動くか試す。
1 | docker run --rm jrottenberg/ffmpeg |
と打つ。ちゃんと動くとjrottenberg/ffmpeg
で使えるコマンドの説明がたくさん表示される。--rm
はコンテナの実行終了時にコンテナを消してくれるオプション。
2 コンテナ内とファイル共有
Dockerを使ってコンテナ上でアプリを起動した場合、その空間はコンテナ外から切り離されているため通常はコンテナの外にあるファイルを扱えない。
今回はffmpeg
を使って動画を加工したいのでそれだと困る。
なのでDockerの設定を変更してローカルファイルを扱えるようにする。
まずはDockerの設定画面を開く。
デスクトップ右下のクジラをクリック。
「Settings」をクリック。
「Resources」→「FILE SHARING」にコンテナと共有したいフォルダを設定。
今回はC:\Docker
とした。
「Apply & Restart」を押すと設定が変更される。
3. ffmpeg 動画から画像抜き出し
1 | docker run --rm -v C:/Docker/ffmpeg:/ffmpeg jrottenberg/ffmpeg -i /ffmpeg/test.mp4 -r 1 -f image2 /ffmpeg/img%03d.jpg |
とすると、画像がばーっと出てくる。
-v 「共有したいフォルダ」:「コンテナで使うフォルダ」
としたので、コンテナの中で「共有したいフォルダ」の中のファイルが扱える。jrottenberg/ffmpeg -i /ffmpeg/test.mp4 -r 1 -f image2 /ffmpeg/img%03d.jpg
の-i
はなんか絶対いるやつ。/ffmpeg/test.mp4
は入力ファイル名。-r 1
は1秒に1枚切り出すという指定。-f image2
は画像に変換するという指定。/ffmpeg/img%03d.jpg
は出力ファイル名、%03d
の部分が3桁の連番になってくれる。