回答:
あなたがJPEGファイルについて話しているなら、ユーティリティjpeginfoはまさにあなたが探しているものです。さまざまな種類のJPEGエラーと破損についてファイルをチェックし、エラーコード(スクリプト作成に最も役立つもの)を返すか、エラーのあるファイルを削除することができます。
これを最初のファイル転送の一部として使用して、手動チェックに頼らずにすべてが正常にコピーされるようにします。(その後、チェックサムが通常のバックアップ/ビットロット保護の一部として変更されないことを確認します。)
このプログラムはコマンドラインであり、ソースコードとして提供されますが、Linuxディストリビューションまたは開発環境が適切に設定されているMacで簡単にビルドおよび使用できる必要があります。CygwinまたはMinGWを使用してWindowsでも実行できると確信しています。(たとえば、その整合性を保証することはできませんが、このブログ投稿は合法であると思われ、コンパイル済みのダウンロードが含まれています。)自分でビルドするには:
$ git clone https://github.com/tjko/jpeginfo.git
Cloning into 'jpeginfo'...
[...]
Checking connectivity... done
$ cd jpeginfo/
$ ./configure && make
これにより、jpeginfo
適切な場所で実行するか、必要に応じてコピーする(おそらくを使用してmake install
)コマンドを作成する必要があります。
次に、次のように実行します。
$ ./jpeginfo -c *.jpg
test1.jpg 1996 x 2554 24bit Exif P 6582168 [OK]
test2.jpg 1996 x 2554 24bit Exif P 6582116 Premature end of JPEG file [WARNING]
test3.jpg Corrupt JPEG data: 1 extraneous bytes before marker 0xe2 1996 x 2554 24bit Exif P 6582169 [WARNING]
ここで、test1.jpgはまったく問題なく、test2.jpgの最後から数バイトを削除し、test3.jpgのヘッダーのランダムなバイトをいくつか変更しました。
RAWファイルがある場合は、DNG ValidationのAmerican Society of Media Photographersのこのページ、またはAdobeのDNGコンバーターを使用した独自のRAW形式のバッチ検証に関するデータ検証の詳細に関するページをご覧ください。(残念ながら、これはGUI操作であり、必ずしも簡単にスクリプト化できるとは限りません。)
DNGの1.2バージョンをネイティブに出力するカメラを使用している場合、これにはさらに優れています。これには、画像データの組み込みMD5チェックサムが含まれています。残念ながら、これは通常の画像メタデータと一緒に保存されていないようです-または少なくともexiftoolとexiv2はそれを認識せず、一般に1.2 DNGファイルを読み取ります-私が知る限り、Adobeの検証ツールもそれを利用する唯一の方法です。
ImageVerifierはあなたが望むことをしました。残念ながら、ダウンロードできなくなり、サポートは2017年12月31日に終了しました(IngestamaticおよびImageVerifierの販売終了を参照)。
ImageVerifier(略してIV)は、フォルダーの階層を走査して、検証する画像ファイルを探します。TIFF、JPEGを検証できます。PSD、DNG、および非DNG raw(NEF、CR2など)。
IVは、多数の画像を処理するように設計されています。100,000以上の画像があるフォルダ階層は問題ないはずです。1回のテスト実行で、IVは14時間実行されました。
IVが実行する検証には、構造チェックとハッシュチェックの2種類があります。
これがカメラから画像をダウンロードすることではなく、コンピューター間の転送である場合、ファイルの整合性に対する一般的なアプローチはチェックサムです。
残念ながら、私が知る限り、一般的な「エンドユーザー」の画像形式(jpeg、png、gifなど)は、それ自体では整合性チェックされません。しかし、自動処理を暗示するという質問を理解しているように、チェックサムツール(CRC32、MD5など)をワークフローに統合することは、実行可能なソリューションになる可能性があります。チェックサムを保存する一般的な方法は、次のような拡張子を追加しただけで、同じファイル名のファイルを作成することですimg123.jpg → img123.jpg.md5
。
このアプローチには、(たとえば)サイドカーファイルの整合性や、同様のメカニズムで転送したいその他のファイルの整合性もチェックできるという利点もあります。また、今後もチェックサムファイルを保持する場合。(そして、私の限られた知識の範囲で、PS、LR、または他の一般的なツールに統合されないという欠点があります。)
check_media_integrityを単純なpythonスクリプトcheck_mi.py
として開発しました。GitHubからダウンロードできます。
https://github.com/ftarlao/check-media-integrity
ガイドのイントロを引用します。
check-miは、メディアファイル(画像、ビデオ、オーディオ)の整合性を自動的にチェックするPython 2.7スクリプトです。単一のファイルまたはフォルダーとサブフォルダー内のファイルのセットの整合性を再帰的に確認できます。最後に、オプションで不良ファイルのリストをパスと詳細とともにCSV形式で出力できます。
このツールは、共通ライブラリ(Pillow、ImageMagik、FFmpeg)を使用してファイルの整合性をテストし、メディアファイルを効果的にデコードできるかどうかをチェックします。警告、画像、音声、およびビデオ形式は、ツールが破損したすべてのファイルを検出できないため、欠陥および破損に対して非常に回復力があります。
check-miは、100%の信頼性で、壊れたヘッダー/メタデータ、切り捨てられた画像ファイル(strict_level> 0)、およびデバイスI / Oエラーを見つけることができます。
check-miは、通常、すべての小さな損傷を検出することはできません。たとえば、異なる値で上書きされたメディアファイルの小さな部分です。詳細に、私はstrict_level 1を小さなランダム化実験でテストし、単一の5MB jpeg画像で実行しました:
画像ファイルの一部(間隔)をゼロで上書きする場合、50%の確率で損傷を検出するために間隔サイズ= 1024KBytesが必要です。画像ファイルの一部(間隔)を異なるランダムな値で上書きすると、4096バイトから1024Kバイトの範囲の間隔サイズで約85%の検出率が得られます。
Pillow、Wand、FFmpegをデコードする際により厳格にするよう指示する方法を知っている場合は、教えてください。
受け入れられている答えは、jpeginfoの使用に関するものです。jpeginfoは、Cで書かれた非常に古くメンテナンスされていないツールです(また、あまりモジュール化も拡張もできません)。また、このツールは特定のEXIFデータポイントを探すだけのようです(5分間ソースコードをざっと見てください)。
IMOは、file-typeと呼ばれる優れたツールで、非常に使いやすいです。基本的に、サンプルコードをコピーして貼り付け、コードの作成方法がわからない場合はファイル名を変更します。特定の既知のファイルタイプに関連付けられているマジックナンバーをチェックし、どの種類のファイルを扱っているかを知らせます。
私はまだこれ以上の保護層を探しています。たとえば、任意のデータがEXIFメタデータを超えて(または)格納されている場合、またはマジックナンバーの後に格納されている場合、セキュリティ上の問題が発生する可能性があります。セキュリティ対策を引き続き検討し、この回答を後で更新したいと考えています。
以下は、怠zyな人のためにWebページからコピーされたサンプルコードです。
// Node.js
const readChunk = require('read-chunk');
const fileType = require('file-type');
const buffer = readChunk.sync('unicorn.png', 0, fileType.minimumBytes);
fileType(buffer);
//=> {ext: 'png', mime: 'image/png'}
参考までに、このツールは絶えず更新されています(ここでの最初の回答では3日前が最後の更新でした)。現在、毎週3,691,850回ダウンロードされています。