2

Web からオーディオ ファイルをダウンロードし、ダウンロード プロセスに問題が発生した場合、Python でオーディオ ファイルが不完全であることを効率的に検出するにはどうすればよいですか?

linux でコマンドを使用するfileなど、いくつかのアイデアがあります。

file audio.mp4

しかし、それは mp4 であることを認識します。

audio.mp4: ISO Media, MPEG v4 system, version 2

mplayer でさえ mp4 オーディオ タイプを検出しますが、再生しようとすると失敗します。ただし、mplayerfrom python を起動して失敗したかどうかを確認することは、スケーラブルなソリューションではないと思います。

壊れたファイルのサンプルは次のとおりです: https://www.dropbox.com/s/5rpscb9r1xrrx4t/They

上記のサンプルは、mutagen と mp4file で失敗し、無期限にハングします。それは fileObject.tell() と関係があります。

4

1 に答える 1

2

多くの異なるオーディオ ファイル形式と、オーディオ ファイルである場合もそうでない場合もあるオブジェクトのコンテナー フォーマットがあります。

幸いなことに、さまざまな種類のファイルを扱えるライブラリがあります。また、次の Python ラッパーがあります。

  • ffmpeg や mplayer などのポータブル コマンドライン ツール。
  • libavcodec のようなポータブル ライブラリ (ffmpeg が使用するもの)。
  • Core Audio、QuickTime、Windows Media などのプラットフォーム固有のライブラリ。

ファイル タイプごとに個別のラッパーを使用する場合は、さらに多くの選択肢があります (たとえば、libmp4v2 は MP4 ファイルには適していますが、それ以外には役に立ちません)。

もちろん、大きなトレードオフがあります。より強力なライブラリは、より複雑になるか、より多くの前提条件が必要になることがよくあります。http://pypi.python.org/で検索して、何が表示されるかを確認してください。あなたが望むすべてを行うものを見つけることができるはずです。

非常に単純な例として、mp4fileは任意の MPEG4 コンテナーを解析しようとします。不完全な場合、または無効なアトムがある場合は、例外が発生します。したがって、チェックは 1 行だけmp4file.Mp4File(path)です。成功すれば完了です。例外がスローされる場合は、不完全または無効です。しかしもちろん、これは完全な MPEG4 ビデオ ファイル、またはオーディオもビデオも含まれていない MPEG4 を受け入れ、完全な MP3、または 1 つの破損したメタデータ タグを含む完全な M4A を拒否します。

于 2012-12-07T22:36:35.967 に答える