QuickTime形式で録画したデータ(.mov)をFFMPEGでエンコードしてサイズを減らしたい。
あと、GPUを使って爆速で処理したい。
元のデータは、Macbook ProでQuickTime Playerで録画したもので、細かいオプション指定ができない。
CPUのみ
CPU=100%で張り付く。速度はx1.2
ぐらい?
-c:a copy
はオーディオのエンコードはやらない
> ffmpeg -i input.mov -c:a copy output.mp4
GPUのみ
GPUエンコードオプション-vcodec h264_nvenc
を付与した場合。CPU=40%、GPU=100%で爆速でエンコードする。速度はx16
ぐらい?
使用したGPUは、NVIDIA GeForce RTX3070
> ffmpeg -i input.mov -c:a copy -vcodec h264_nvenc output.mp4
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 241 kb/s (default)
Metadata:
creation_time : 2021-07-18T16:59:44.000000Z
handler_name : Core Media Audio
frame=163684 fps=876 q=32.0 size= 762880kB time=00:45:39.78 bitrate=2281.0kbits/s dup=1000 drop=592 speed=14.7x
2時間データが、10分未満で完了する。すばらしい。
チューニング
エンコード画像が若干荒い(2000kb/s)、品質をUPさせたい。
ffmpeg -i input.mov -vcodec h264_nvenc -b_strategy 2 -bf 2 -crf 18 -maxrate 10M -c:a copy output_x.mp4
速度はx14
ぐらい?で若干処理が遅くなっている。
おまけ)動画のカット
一番わかりやすいサイト
https://nico-lab.net/cutting_ffmpeg/
-ss
や-to
は片方を省略可能。書式が違うのが注意。
ffmpeg -ss [duration] -to [hh:mm:ss] -i xxx.mov -c copy input.mov
時間の設定は、オリジナル動画でカットしたい位置のタイムスタンプを指定する。
ffmpeg -to 02:00:00 -i xxx.mov -c copy input.mov