查找视频文件中是否包含音频

Kar*_*tos 16 audio video ffmpeg ffprobe avprobe

我试图弄清楚视频中是否有音频,以便使用ffmpeg提取mp3.当视频不包含音频通道时,ffmpeg会创建一个空的mp3文件,我用它来判断视频中是否存在音频.我确信有更好的方法来识别视频中是否存在音频.avprobe会帮忙吗?有人能指出我的资源或可能是解决方案吗?

编辑:令人惊讶的是,运行最新版本的ffprobe的服务器上的相同命令无法运行.它抛出一个错误说

无法识别的选项'select_stream'

无法为选项'select_stream'设置值'a'

任何想法如何纠正这个?

AJ2*_*J29 21

我会使用FFprobe(它与FFMPEG一起使用):

ffprobe -i INPUT -show_streams -select_streams a -loglevel error
Run Code Online (Sandbox Code Playgroud)

如果没有音频,它什么也没输.如果有音频流,那么你会得到类似的东西:

[流]

索引= 0

codec_name = MP3

codec_long_name = MP3(MPEG音频层3)

简介=未知

codec_type =音频

codec_time_base =四万四千一分之一

等等

等等...

[/流]

这应该很容易解析,无论您使用何种语言来使此过程自动化.

  • 这对我来说似乎不起作用.我得到的输出文件没有音频. (4认同)

Kin*_*ses 7

如果它是本地路径中的正常视频文件,则可以执行以下操作来查找视频是否包含音频文件。

您需要查看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;
    }
Run Code Online (Sandbox Code Playgroud)

路径是您的视频文件路径。

PS:由于这是一个古老的问题,我正在写此答案以帮助其他一些人,可能对他们有帮助。


Kar*_*tos 5

找到了一个解决这个问题的办法。这似乎回答了我提出的问题。

ffprobe -i input.mp4 -show_streams 2>&1 | grep 'Stream #0:1'
Run Code Online (Sandbox Code Playgroud)