我正在试图弄清楚视频中是否有音频,以便使用ffmpeg提取mp3。当视频不包含音频通道时,ffmpeg会创建一个空的mp3文件,我用它来判断视频中是否存在音频。我确信有更好的方法来识别视频中是否存在音频。 avprobe会帮忙吗?任何人都可以指出我的资源或解决方案吗?
编辑:令人惊讶的是,运行最新版本的ffprobe的服务器上的相同命令无法运行。它抛出错误说
无法识别的选项'select_stream'
无法为选项'select_stream'设置值'a'
有任何想法如何纠正这个问题?
答案 0 :(得分:20)
我会使用FFprobe(它随FFMPEG一起发布):
ffprobe -i INPUT -show_streams -select_streams a -loglevel error
如果没有音频,它什么也没输。如果有音频流,那么你会得到类似的东西:
[STREAM]
索引= 0
codec_name = MP3
codec_long_name = MP3(MPEG音频第3层)
轮廓=未知
codec_type =音频
codec_time_base =四万四千一分之一
等
等...
[/ STREAM]
这应该很容易解析,无论您使用哪种语言来使这个过程自动化。
答案 1 :(得分:5)
如果是来自本地路径的普通视频文件,您可以执行以下操作来查找视频是否包含音频文件。
使用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:由于这是一个老问题,我写这个答案是为了帮助其他人,对他们有所帮助。答案 2 :(得分:2)
找到一轮即将解决这个问题。这似乎回答了我提出的问题。
ffprobe -i input.mp4 -show_streams 2>&1 | grep 'Stream #0:1'
答案 3 :(得分:1)
如果您只想知道是否有音频并且不关心流细节,可以运行以下命令,该命令将提取输入文件中音频流的持续时间。如果响应为null / whitespace,则输入文件中没有音频。
命令:
{{1}}
答案 4 :(得分: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