FFMPEG : GPUで爆速エンコード

QuickTime形式で録画したデータ(.mov)をFFMPEGでエンコードしてサイズを減らしたい。
あと、GPUを使って爆速で処理したい。

元のデータは、Macbook ProでQuickTime Playerで録画したもので、細かいオプション指定ができない。

ffmpeg00

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

gpuenc001

> 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分未満で完了する。すばらしい。

ffmpeg02

チューニング

エンコード画像が若干荒い(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
-->