ffmpeg メモ

ffmpeg Documentationの中から個人的に使用頻度の高いものをメモ.

静止画を繋げて動画作成

様々なオプションがあり使用の都度メモを追加予定.
静止画を動画のそれぞれ1コマのとして利用するために,画像のファイル名が適切にナンバリングされている必要がある.

以下,
snapshot_001.png
snapshot_002.png
...
のような画像ファイルがあるとする.(または.png)

  • 1秒あたり10枚の画像を挿入してgif動画を作成
    rオプションでフレームレートを指定する.
    fps=10 # 10 frames per second
    ffmpeg -r $fps -i snapshot_%03d.png movie_sample.gif
    また,デフォルトでは000や001や等の0付近のファイルで,かつ全て連番になっていないと適切なフレーム作成ができないみたい.
    上記の場合,連番になっている全ての画像ファイルが動画に使用される.


  • 画質を落としたくない
    qscaleとq:vがどう違うのかはよく知らない.q:aオプションはオーディオなのでここでは関係なし.
    ffmpeg -r $fps -i snapshot_%03d.png -qscale 0 movie_sample.gif
    ffmpeg -r $fps -i snapshot_%03d.png -q:v 1 movie_sample.gif


  • パレットの最適化
    上記のように作成したgifの画質が変だったり不自然な線が掛かるときに,パレットの最適化をしたら修正できた.2段階必要.
    ffmpeg -i snapshot_%03d.png -vf palettegen palette.png
    ffmpeg -r $fps -i snapshot_%03d.png -i palette.png -filter_complex paletteuse movie_sample.gif


  • n番目のファイルから動画を作成(それ以下は無視)
    startnum=11 # 11から
    ffmpeg -r $fps -start_number $startnum -i snapshot_%03d.png movie_sample.gif
    この場合, snapshot_011.png から動画が作成される.それ以下の数値のファイルは無視される.


  • n番目のファイルから始まり, n+50番目のファイルで終わる動画を作成
    ffmpeg -r 10 -start_number n -i snapshot_%03d.png -vframes 50 movie_sample.gif
    vframesオプションは,-iの後に付けなければならない.
    nを51とすれば,snapshot_051.pngからsnapshot_100.pngまでを5秒間におさめた動画になる.


  • ログ出力のテキストを抑える loglevel オプションを使うと,出力量を調整できる.
    ffmpeg ....... -loglevel quiet
    quietは何も出力せず,その他は少ない順に fatal, error, warning などがある.


  • 上書き 保存先に同じ名前のファイルがあるときは,通常 y/n のインプットを求められるが,-y オプションをつけることで強制的に上書きされる.
    ffmpeg -y ........................


メモ

convertのgif作成はepsでもできるが,ffmpegはepsではできない.
convertでpngなどに変換してffmpegでアニメーションを作成することならできる.

動画から静止画を抽出

上記の逆で,動画から静止画を抽出することもできる.
1秒あたり30フレームのexample.mp4というファイルのコマを一つずつ切り出すことを考える,

file="example.mp4" # ファイル名
startsec=14 # 切り出しの開始時間(秒)
duration=3  # 切り出す時間の長さ(秒),この場合, 14+3=17秒時点まで
fps=30      # fps
output="frame%05d.png" # filename output
# ffmpeg -iは -ssの後に
ffmpeg -ss $startsec -t $duration -i $file -r $fps -f image2 -start_number 0 -q:v 1 $output

出力画像のファイル名は,上記のように "frame%05d.png" と指定すると,frame00000.png という名前になる.
切り出し開始時間ssオプションで時間を指定したあとにiオプションを置かないとssの設定が反映されなかった.
さらに,最初のフレーム(0.00秒時)が 00001.png になるとわかりにくいので "-start_number 0" をつけているが,これも先の方に置くと正常に動作しない.オプションの配置順が重要らしい.
ffmpegのバージョンは下記の通り.

version 2.8.14-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2019-02-19 (Tue) 17:46:38 (185d)