web-dev-qa-db-ja.com

ffmpegの2つのビデオの違いを比較/表示する方法は?

私はエンコーディングの初心者です。ロスレスモード(-qp 0)でx264を読み取って試しましたが、新しいビデオで、すべてのピクセルにソースファイルと同じ情報が含まれていることを確認したいと思います(YUV 420にあるため、私の知る限り、色変換は回避できます)。私はそれを確認できるようにしたいのです。なぜなら、誰かがその無損失を言っているだけではそれを信じないからです。

ロスレスエンコーディングの他のコーデックを提案する回答を歓迎します。コーデックに対する唯一の要件は、最高の圧縮率の1つであり、圧縮レベルを調整するために異なる計算時間(プラセボからx264での非常に高速な範囲など)を選択できるようにしますそして私のニーズに合わせて時間を計算します。ただし、元の質問は、2つのビデオのフレームごとに差分を計算して3番目のファイルにエクスポートして、自分で見られるようにする方法に関するものであることに注意してください。知識は(可能であり、深刻な制限がない場合)、将来的にも私にとって役立つと思います。

20
polarka

デコードされたデータとMD5ハッシュの比較

FFmpeg MD5 muxer を使用して、デコード結果がまったく同じ出力になることを示すことができます。

  1. 元の入力からビデオストリームのMD5ハッシュを取得します。

    $ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    
  2. ロスレス出力に変換します:

    $ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
    
  3. ロスレスビデオのMD5ハッシュを比較します。

    $ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    

ノート:

  • ロスレスエンコーダでも同じハッシュを取得できない場合があります。色空間やクロマサブサンプリングなどのMD5ハッシュを変更する可能性のあるさまざまな属性が変更される可能性があります。

  • 非可逆形式で出力すると、MD5ハッシュが変化することがわかります。

  • FFmpegでサポートされているその他のロスレス圧縮ビデオエンコーダーには、ffv1、ffvhuff、huffyuv、utvideoがあります。

  • 各フレームのハッシュを表示するには、 framemd5 muxer を参照してください。


目視比較

ブレンドフィルター付き

Viewing the difference of a lossy output非可逆出力の違いを表示します。

ブレンドフィルター を使用して、違いを視覚的に比較できます。

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のオーバーレイフィルターでビデオの違いを表示する を参照してください。

34
llogan