Ffmpegを使用してmp3を抽出するために、ビデオにオーディオが含まれているかどうかを調べようとしています。ビデオにオーディオチャネルが含まれていない場合、ffmpegは空のmp3ファイルを作成します。これを使用して、最初にオーディオがビデオに存在するかどうかを確認します。ビデオに音声が含まれているかどうかを識別するためのより良い方法があると確信しています。 avprobeはこれに役立ちますか?誰かが私にリソースまたはおそらく解決策を教えてもらえますか?
編集:驚いたことに、ffprobeの最新ビルドを実行しているサーバーで同じコマンドが実行されません。エラーが発生します
認識されないオプション 'select_stream'
オプション 'select_stream'の値 'a'の設定に失敗しました
これを修正する方法はありますか?
私はFFprobeを使用します(FFMPEGに付属しています):
ffprobe -i INPUT -show_streams -select_streams a -loglevel error
音声がない場合は何も出力されません。オーディオストリームがある場合は、次のようになります。
[ストリーム]
インデックス= 0
codec_name = mp3
codec_long_name = MP3(MPEGオーディオレイヤー3)
プロファイル=不明
codec_type = audio
codec_time_base = 1/44100
等
等...
[/ストリーム]
これは、このプロセスを自動化するために使用している言語に関係なく、解析するのに十分簡単なはずです。
ローカルパスからの通常のビデオファイルの場合は、次のようにして、ビデオにオーディオファイルがあるかどうかを確認できます。
MediaMetadataRetriever を調べる必要があります
METADATA_KEY_HAS_AUDIO
を使用すると、ビデオに音声が含まれているかどうかを確認できます。
private boolean isVideoHaveAudioTrack(String path) {
boolean audioTrack =false;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(path);
String hasAudioStr = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO);
if(hasAudioStr.equals("yes")){
audioTrack=true; }
else{
audioTrack=false; }
return audioTrack;
}
ここでパスはビデオファイルのパスです。
PS:それは古い質問なので、私はそれが助けになるかもしれない他の何人かの人々を助けるためにこの答えを書いています。
この問題を解決するためのラウンドアバウトを見つけました。これは私が尋ねた質問に答えているようです。
ffprobe -i input.mp4 -show_streams 2>&1 | grep 'Stream #0:1'
ffprobe -v fatal # set log level to fatal
-of default=nw=1:nk=1 # use default format and hide wrappers and keys
-show_streams # show info about media streams
-select_streams a # show only audio streams
-show_entries stream=codec_type # show only stream.codec_type entries
video.mp4 # input file
メディアファイルには、オーディオストリームが含まれています。
audio
1
0
0
0
0
0
0
0
0
0
0
0
und
SoundHandler
メディアファイルにオーディオストリームが含まれていないと、空の結果に戻ります。
メディア以外のファイルも空の結果を返します。メディア以外のファイルやその他のエラーの場合にエラーメッセージを返したい場合は、代わりに-v error
を使用してください。
ffprobe -v error # set log level to error
-of default=nw=1:nk=1 # use default format and hide wrappers and keys
-show_streams # show info about media streams
-select_streams a # show only audio streams
-show_entries stream=codec_type # show only stream.codec_type entries
video.mp4 # input file
したがって、空の結果の代わりにこれを使用します。
non-media-file.Zip: Invalid data found when processing input
オーディオがあるかどうかだけを知りたいが、ストリームの詳細を気にしない場合は、次のコマンドを実行できます。これにより、入力ファイルにオーディオストリームの継続時間が抽出されます。応答がnull /空白の場合、入力ファイルには音声が含まれていません。
コマンド:
ffprobe -v error -of flat=s_ -select_streams 1 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1