私はエンコーディングの初心者です。ロスレスモード(-qp 0)でx264を読み取って試しましたが、新しいビデオで、すべてのピクセルにソースファイルと同じ情報が含まれていることを確認したいと思います(YUV 420にあるため、私の知る限り、色変換は回避できます)。私はそれを確認できるようにしたいのです。なぜなら、誰かがその無損失を言っているだけではそれを信じないからです。
ロスレスエンコーディングの他のコーデックを提案する回答を歓迎します。コーデックに対する唯一の要件は、最高の圧縮率の1つであり、圧縮レベルを調整するために異なる計算時間(プラセボからx264での非常に高速な範囲など)を選択できるようにしますそして私のニーズに合わせて時間を計算します。ただし、元の質問は、2つのビデオのフレームごとに差分を計算して3番目のファイルにエクスポートして、自分で見られるようにする方法に関するものであることに注意してください。知識は(可能であり、深刻な制限がない場合)、将来的にも私にとって役立つと思います。
FFmpeg MD5 muxer を使用して、デコード結果がまったく同じ出力になることを示すことができます。
元の入力からビデオストリームのMD5ハッシュを取得します。
$ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 -
MD5=5ee3ae1ee5feaf30618938290225f682
ロスレス出力に変換します:
$ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
ロスレスビデオのMD5ハッシュを比較します。
$ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 -
MD5=5ee3ae1ee5feaf30618938290225f682
ノート:
ロスレスエンコーダでも同じハッシュを取得できない場合があります。色空間やクロマサブサンプリングなどのMD5ハッシュを変更する可能性のあるさまざまな属性が変更される可能性があります。
非可逆形式で出力すると、MD5ハッシュが変化することがわかります。
FFmpegでサポートされているその他のロスレス圧縮ビデオエンコーダーには、ffv1、ffvhuff、huffyuv、utvideoがあります。
各フレームのハッシュを表示するには、 framemd5 muxer を参照してください。
非可逆出力の違いを表示します。
ブレンドフィルター を使用して、違いを視覚的に比較できます。
ffplay
の使用ffplay -f lavfi \
"movie=original.mkv[org]; \
movie=encoded.mkv[enc]; \
[org][enc]blend=all_mode=difference"
blendは遅く、CPUと入力によっては、このコマンドがリアルタイムで再生されない場合があります。または、ffmpeg
を使用してビデオを出力し、以下に示すように視聴することもできます。
difference
以外にも、ニーズに合うモードがあります。 ドキュメント を参照してください。
ffmpeg
の使用ffmpeg -i original.mkv -i encoded.mkv \
-filter_complex "blend=all_mode=difference" \
-c:v libx264 -crf 18 -c:a copy output.mkv
,format=yuv420p
をフィルターチェーンの最後(difference
の直後)に移動して、非FFmpegベースのプレーヤーで出力を表示します。ffmpegのオーバーレイフィルターでビデオの違いを表示する を参照してください。