基本的なコマンドやiphoneの縦撮りを変換するtransposeの指定などに関するメモ
基本的なコマンドライン
> ffmpeg -i [入力ファイル] [オプション] [出力ファイル+拡張子]
指定した動画の情報をダンプする
> ffmpeg -i xxx.m4v
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'xxx.m4v':
Metadata:
major_brand : M4V
minor_version : 512
compatible_brands: isomiso2avc1
date : 2014-03-25T08:13:34+0900
encoder : Lavf55.34.101
Duration: 00:00:10.31, start: 0.046440, bitrate: 830 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 568x320, 729 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
rotate : 90
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 96 kb/s (default)
Metadata:
handler_name : SoundHandler
iPhoneなどで縦向き状態で録画したファイルの向きを変える
基本的に動画は、横長
で再生されるのが暗黙的な決まりになっており、縦長状態で再生できるのは、Apple製品(OSXやiOS)だけである。ついつい縦長で録画し、ほかのプレイヤーで再生すると、90deg回転した状態で再生されて残念な気分になる。
ffmpegの-vf
オプションで、transpose=nを指定して変換すると、一般的なプレイヤーでも縦長で再生される。transposeで設定する値は以下になる
# 0 = 90CounterCLockwise and Vertical Flip (default)
# 1 = 90Clockwise
# 2 = 90CounterClockwise
# 3 = 90Clockwise and Vertical Flip
> ffmpeg -i in.mov -vf "transpose=1" out.mov
動画から音声だけ抽出
> ffmpeg -i in.mov -acodec copy out.mp4
動画から画像を抽出する
サムネイル作成などに使えそう
-ss
は開始秒、-vframes
はフレーム数(枚数)を指定できる
以下だと、開始10秒から3フレーム分のjpeg画像が1.jpeg,2.jpeg,3.jpegと出力される。
> ffmpeg -i in.mov -ss 10 -vframes 3 %d.jpeg
アスペクト比を指定したエンコード
アスペクト比(-aspect)とサイズ(-s)を指定する
両方指定したほうが処理速度が速くなるとの報告あり
インタレース解除はPCで再生すると輪郭が波打ったりした場合に追加するオプション
画質が若干劣化するとの報告あり。波打たない動画に追加しても問題なし(劣化する話は別)
# -s 解像度
# -vsync 音ズレ防止
# -b:v ビットレート
# -deinterlace インタレース解除
> ffmpeg -i in.mov -threads 2 -deinterlace -top -1 -b:v 2048k -aspect 16:9 -s 1440x1080 -y -vsync 1 out.m4v
2pass設定でのエンコード
サイズはそのままに画質が向上するらしい・・・
1パス処理を2回やるので&&で連結する
-pass [n] nは1回目は1、2回目は2を設定する
-passlogfile ファイル名を指定する。2回目は1回目のログを参考に処理するようになる
> ffmpeg -i in.mov -threads 2 -deinterlace -top -1 -b:v 2048k -aspect 16:9 -s 1440x1080 -pass 1 -passlogfile "passlog" -y -vsync 1 -an out.m4v && ffmpeg -i in.mov -threads 2 -deinterlace -top -1 -b:v 2048k -aspect 16:9 -s 1440x1080 -pass 2 -passlogfile "passlog" -y -vsync 1 out.m4v
bitrate目安
fact :0.1~0.3
bitrate [kbps] = fact * fps * width * height / 1024
fact = 0.3, 1440×1080 => 13.6Mbps (デジカメのデフォルトに近い)
fact = 0.15, 1440×1080 => 6.8Mbps (エンコードサイズ)