生活を良くします - 怠惰なプログラミング

生活を良くします-怠惰なプログラミング

外資系でエンジニアをやっています。便利なサービスや商品、プログラミングで作ったものなどを紹介していきます

ffmpegで画像の山から動画を作る or 動画から静止画を取り出す ~ Youtuber向け?

ffmpegとは

無料で使えるソフトウェア

FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスはコンパイル時のオプションによりLGPLかGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。
FFmpeg - Wikipedia

ダウンロードするだけでターミナルで使えるようにようになる、無料のソフトウェアです。

実際に開始何秒から何秒まで、一秒間に何フレームずつ切り出すか選択できるなどかなり便利になっています。

インストール方法

このサイト:Download FFmpegからダウンロード可能です。

このサイトに行ったら、使っているOSごとにダウンロード方法を選びましょう。

左がLinux、真ん中がwindows、右がMacでした。

f:id:what_a_day:20161205235604j:plain
出典:Download FFmpeg

ここからダウンロードできますので、解凍しましょう。


windowsでは、このような画像が出ると思います。

f:id:what_a_day:20161206001007p:plain
出典:
Builds - Zeranoe FFmpeg

ここで各自versionなどを選んでダウンロードを選択すると、ffmpeg-3.2-win32-static.zipファイルがダウンロードできます。

このzipファイルをクリックすると解凍されて

「ffmpeg-3.2-win32-static」というフォルダが出てきます。

さらにそのフォルダをクリックすると「bin」というフォルダがあり、同じようにクリックします。

すると、ffmpeg.exeというファイルがあるのでそれをクリックします。これでダウンロードは完成。

コマンドラインを立ち上げてffmpegと打ってみましょう。

コマンドラインの出し方は、全アプリ検索から「コマンドライン」などと打てば出ると思います。Macがメインなので詳しくないです。


それ以外の方法としては、homebrewを持っている人はターミナルから一瞬でダウンロードできます。
これが一番おすすめです。

 brew install ffmpeg

これが一番楽です。何も考えなくて良い方法です。

動画から切り出す方法

シンプルな方法

一番簡単な基本形

/*これでmovie.mov から movie.mp4に変換できます*/
ffmprg -i movie.mov  movie.mp4



ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

foo.aviを自分の切り出したい動画のロケーションに置き換えれば完成。形式を.wavなどにしたりすることも可能。

foo-%03d.jpeg:なので動画からたくさんの画像が切り出される。

%03dより、foo-001.jpeg、foo-002.jpeg、foo-003.jpeg、、、画像の名前がこのようになる。


自分が使っているコマンド例

ffmpeg -ss 5 -i "動画のファイル" -f image2 -vcodec mjpeg -qscale 1 -qmin 1 -qmax 1 -r 24 -t 300 "画像の置き場所/%01d.png"

オプションの解説

-ss 5

動画開始5秒後から動画から切り出し開始。

-f image2

切り出した後のファイルの種類の選択。image2は画像を

-r 24

一秒間に24フレーム切り出す。一秒を1/24にしていると思われる。24という数字を変えることで一秒に切り出せる枚数を変えることができる。

-t 300

300秒後まで切り出しを続ける。これを変えることで何秒後まで切り出しを続けるかを変更できる。

-qscale 1 -qmin 1 -qmax 1

ーqscaleは単純に画質くらいに思っていればいいかと思います。qmax、qminは最新のドキュメントに項目がなくなっていたのでもしかしたら必要ないかもしれません。

エラーには出てない気がします。

画像の山から動画を作る方法

ffmpeg -f image2 -r 12 -i foo-%03d.jpeg  foo.avi

foo-001.jpeg、foo-002.jpeg、foo-003.jpegという画像を用意します。それで上のコマンドを実行するとfoo-001.jpeg、foo-002.jpeg、foo-003.jpeg、、画像を集めてつなぎ合わせて動画にしてくれます。


形式変換

ffmpeg -i /tmp/test.yuv /tmp/out.avi

.yuvから.aviに形式を変更できます。

pythonなどを使ってforループで回しながら大量の形式変換を行いたいときなどは便利です。

import os
for i in range(30):
    if os.path.isdir("/Users/akitaka/Desktop/movie/dsc"+str(i)):
        os.system("ffmpeg  -i "/tmp/test.yuv"+ str(i) + ".AVI  "/tmp/out"+str(i)".avi"

おそらく雰囲気はこんな感じかな。

まとめ

  • ffmpegは動画から画像を切り分けることができる
  • ffmpegは画像から動画を作り出せる
  • ffmpegは形式変換にも便利