Ffmpeg/ffprobeを子プロセスとして実行し(コマンドラインで実行するのと同様)、コマンド出力を解析してファイルに関するメタデータを取得したり、ファイルのトランスコーディングを実行したりするアプリがあります。そして私のアプリは特定のファイルがDRM保護されているかどうかを知る必要があります。
注-私は この質問 を見てきました。 DRM保護を決定するための出力のプログラムによる解析には対応していません。これは、出力の人間による解析のみを対象としています。
Ffprobeを実行できることはすでに知っています。出力を目でスキャンして、出力のどこかに「DRM保護が検出されました...デコードが失敗する可能性があります」のようなものが表示されれば、ファイルが保護されていることがわかります。このサンプル出力を参照してください。
ffprobe -hide_banner CelticWoman-OnlyAWomansHeart.wma
[asf @ 0x7f9bab000000] DRM protected stream detected, decoding will likely fail!
Input #0, asf, from 'CelticWoman-OnlyAWomansHeart.wma':
Metadata:
...
ただし、上記の出力には2つの問題があります。
1-それはマシンフレンドリーではありません。いくつかの単語を探すために、大量の出力をスキャンする必要があります。このような出力の解析は、機械の消費ではなく人間の消費を目的としているため、非効率的です。
2-上記の出力が異なるファイルタイプ間で一貫しているかどうかはわかりません。つまり、上記のサンプル出力は、ASFコンテナー内のWMAファイル用です。これがFLACまたはDTSまたは他の種類のファイルである場合はどうなりますか?使用する言語は同じであるため、アプリは毎回それを解析して検出できますか?
必要なのは、アプリが実行できるある種の出力プロパティです確実かつ予測可能に解析 ...「drm-protected = true」のようなキーと値のペアメディアファイルタイプ間で一貫しています
つまり、ffprobe/ffmpegのどのオプションが、ファイルにDRM保護があるかどうかを示すマシン解析可能なキーと値のペアを提供しますか?
どうもありがとう !
このようなオプションを使用する
ffprobe -v quiet -print_format json -show_format -show_streams
これは最初にここに投稿されました https://Gist.github.com/nrk/2286511
jsonを解析するために「jq」で使用されているこの例は次のとおりです。
ffprobe -v quiet -print_format json -show_format -show_streams songFile.mp3 | jq .streams[0].codec_tag_string
これにより、DRMで保護されたストリームのストリームコーデックまたは「drms」が返されます。これは、「jq」を使用して選択された最初のストリームの出力のみを返すことに注意してください