#author("2019-01-21T14:03:43+09:00","default:Miyashita","Miyashita")
#author("2019-02-20T02:46:38+09:00","default:Miyashita","Miyashita")
*ffmpeg メモ [#led7feb7]
[[ffmpeg Documentation>https://ffmpeg.org/ffmpeg.html]]の中から個人的に使用頻度の高いものをメモ.

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

以下,~
snapshot_001.jpg~
snapshot_002.jpg~
snapshot_001.png~
snapshot_002.png~
...~
のような画像ファイルがあるとする.(または.png)
-1秒あたり10枚の画像を挿入してgif動画を作成~
rオプションでフレームレートを指定する.
#codeprettify{{
fps=10 # 10 frames per second
ffmpeg -r $fps -i snapshot_%03d.jpg movie_sample.gif
ffmpeg -r $fps -i snapshot_%03d.png movie_sample.gif
}}
また,デフォルトでは000や001や等の0付近のファイルで,かつ全て連番になっていないと適切なフレーム作成ができないみたい.~
上記の場合,連番になっている全ての画像ファイルが動画に使用される.~
~
~
-画質を落としたくない~
qscaleとq:vがどう違うのかはよく知らない.q:aオプションはオーディオなのでここでは関係なし.
#codeprettify{{
ffmpeg -r $fps -i snapshot_%03d.jpg -qscale 0 movie_sample.gif
ffmpeg -r $fps -i snapshot_%03d.jpg -q:v 1 movie_sample.gif
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段階必要.
#codeprettify{{
ffmpeg -i snapshot_%03d.jpg -vf palettegen palette.jpg
ffmpeg -r $fps -i snapshot_%03d.jpg -i palette.jpg -filter_complex paletteuse movie_sample.gif
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番目のファイルから動画を作成(それ以下は無視)
#codeprettify{{
startnum=11 # 11から
ffmpeg -r $fps -start_number $startnum -i snapshot_%03d.jpg movie_sample.gif
ffmpeg -r $fps -start_number $startnum -i snapshot_%03d.png movie_sample.gif
}}
この場合, snapshot_011.jpg から動画が作成される.それ以下の数値のファイルは無視される.~
この場合, snapshot_011.png から動画が作成される.それ以下の数値のファイルは無視される.~
~
~
-n番目のファイルから始まり, n+50番目のファイルで終わる動画を作成~
#codeprettify{{
ffmpeg -r 10 -start_number n -i snapshot_%03d.jpg -vframes 50 movie_sample.gif
ffmpeg -r 10 -start_number n -i snapshot_%03d.png -vframes 50 movie_sample.gif
}}
vframesオプションは,-iの後に付けなければならない.~
nを51とすれば,snapshot_051.jpgからsnapshot_100.jpgまでを5秒間におさめた動画になる.~
nを51とすれば,snapshot_051.pngからsnapshot_100.pngまでを5秒間におさめた動画になる.~
~
~
-ログ出力のテキストを抑える
loglevel オプションを使うと,出力量を調整できる.
#codeprettify{{
ffmpeg ....... -loglevel quiet
}}
quietは何も出力せず,その他は少ない順に fatal, error, warning などがある.~
~
~
-上書き
保存先に同じ名前のファイルがあるときは,通常 y/n のインプットを求められるが,-y オプションをつけることで強制的に上書きされる.
#codeprettify{{
ffmpeg -y ........................
}}
~
~

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

**動画から静止画を抽出 [#kcbf0b2b]
上記の逆で,動画から静止画を抽出することもできる.~
1秒あたり30フレームのexample.mp4というファイルのコマを一つずつ切り出すことを考える,
#codeprettify(lang-bash){{
file="example.mp4" # ファイル名
startsec=14 # 切り出しの開始時間(秒)
duration=3  # 切り出す時間の長さ(秒),この場合, 14+3=17秒時点まで
fps=30      # fps
output="frame%05d.jpg" # filename output
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.jpg" と指定すると,frame00000.jpg という名前になる.~
出力画像のファイル名は,上記のように "frame%05d.png" と指定すると,frame00000.png という名前になる.~
切り出し開始時間ssオプションで時間を指定したあとにiオプションを置かないとssの設定が反映されなかった.~
さらに,最初のフレーム(0.00秒時)が 00001.jpg になるとわかりにくいので "-start_number 0" をつけているが,これも先の方に置くと正常に動作しない.オプションの配置順が重要らしい.~
さらに,最初のフレーム(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