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 =四万四千一分之一
等等
等等...
[/流]
这应该很容易解析,无论您使用何种语言来使此过程自动化.
如果它是本地路径中的正常视频文件,则可以执行以下操作来查找视频是否包含音频文件。
通过使用,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:由于这是一个古老的问题,我正在写此答案以帮助其他一些人,可能对他们有帮助。
找到了一个解决这个问题的办法。这似乎回答了我提出的问题。
ffprobe -i input.mp4 -show_streams 2>&1 | grep 'Stream #0:1'
Run Code Online (Sandbox Code Playgroud)