FFmpegを使用して、静止画(input.jpg≈1MB)と音楽(input.wav≈20MB)でミュージックビデオを作成しました。ロスレスHEVCコーデック(output.mkv≈70MB)で生成されたビデオとFFV1コーデック(output.mkv≈10GB)で生成されたビデオの間で、ファイルサイズにこのような大きな違いが生じるのはなぜですか?
発行されたコマンド
ffmpeg -loop 1 -i input.jpg -i input.wav \
-c:v hevc -crf 0 -c:a flac -s 3840x2160 -r 60 -shortest output.mkv
ffmpeg -loop 1 -i input.jpg -i input.wav \
-c:v ffv1 -c:a flac -s 3840x2160 -r 60 -shortest output.mkv
ロスレスHEVCに提供されているパラメーターが正しくない(実際にはロスレスではないという意味で)か、FFV1がひどいコーデックであるように見えます。
FFV1はイントラコード化されているため、各フレームは他のフレームとは独立して圧縮されます。 HEVCは通常相互コード化されています。
Libx265を使用していると仮定すると、真のロスレスモードには-x265-params lossless=1
を追加する必要があります(-crf 0
は追加しません)。エンコードの最後に、x265はlossless compression ratio
を表示する行を出力する必要があります。
x265はx264よりも優れた内部予測を備えており、FFV1を期待しているため、可逆圧縮の方が効率的です。ただし、デコードにはより多くのリソースが必要です。