首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实战经验:查看视频中是否包含音频信息方法集锦

实战经验:查看视频中是否包含音频信息方法集锦

原创
作者头像
liuzhen007
发布2025-10-28 00:20:25
发布2025-10-28 00:20:25
1200
举报
文章被收录于专栏:流媒体音视频流媒体音视频

前言

在视频处理工作中,经常需要确认视频文件是否包含有效的音频信息。本文档详细介绍使用FFmpeg工具集以及其他来检测视频中音频信息的多种方法,包括直接检测音频流信息和间接通过静音检测来分析音频内容。

正文

1、利用 ffprobe

使用 ffprobe 命令可以直接检测视频文件中的音频流信息:

代码语言:txt
复制
ffprobe /path/to/video.mp4 -select_streams a -show_streams

参数说明:

  • -select_streams a:仅选择音频流进行分析
  • -show_streams:显示流的详细信息

输出内容包含:

  • 音频编码格式(codec_name)
  • 采样率(sample_rate)
  • 声道数(channels)
  • 比特率(bit_rate)
  • 视频时长时间(duration)

示例:

代码语言:txt
复制
ffprobe version 7.1.1 Copyright (c) 2007-2025 the FFmpeg developers
  built with Apple clang version 15.0.0 (clang-1500.1.0.2.5)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.1.1_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.101 / 61. 19.101
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'f0.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf61.7.100
  Duration: 00:00:26.54, start: 0.976009, bitrate: 9472 kb/s
  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1080x1920 [SAR 1:1 DAR 9:16], 9624 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 191 kb/s (default)
      Metadata:
        handler_name    : SoundHandler
        vendor_id       : [0][0][0][0]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_tag_string=mp4a
codec_tag=0x6134706d
sample_fmt=fltp
sample_rate=44100
channels=2
channel_layout=stereo
bits_per_sample=0
initial_padding=0
id=0x2
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/44100
start_pts=43042
start_time=0.976009
duration_ts=1170434
duration=26.540454
bit_rate=191817
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1143
nb_read_frames=N/A
nb_read_packets=N/A
extradata_size=5
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
DISPOSITION:multilayer=0
TAG:language=und
TAG:handler_name=SoundHandler
TAG:vendor_id=[0][0][0][0]
[/STREAM]

如果不想看到冗余的ffmpeg信息,可以使用如下命令:

代码语言:txt
复制
ffprobe /path/to/video.mp4 -select_streams a -show_streams -v quiet

如此将只输出媒体流信息部分,当然这里指定了音频流。

尽管上述信息说明了视频文件中包含音频流信息,但是需要明确一点:有音频流信息,不一定有音频帧

所以,需要查看音频帧信息是否存在,命令如下:

代码语言:txt
复制
ffprobe /path/to/video.mp4 -select_streams a -show_frames -v quiet

此命令将显示所有音频帧的详细信息,包括时间戳、大小等元数据。

示例:(音频帧比较多,只展示前两帧信息)

代码语言:txt
复制
[FRAME]
media_type=audio
stream_index=1
key_frame=1
pts=43042
pts_time=0.976009
pkt_dts=43042
pkt_dts_time=0.976009
best_effort_timestamp=43042
best_effort_timestamp_time=0.976009
duration=1024
duration_time=0.023220
pkt_pos=244692
pkt_size=21
sample_fmt=fltp
nb_samples=1024
channels=2
channel_layout=stereo
[/FRAME]
[FRAME]
media_type=audio
stream_index=1
key_frame=1
pts=44066
pts_time=0.999229
pkt_dts=44066
pkt_dts_time=0.999229
best_effort_timestamp=44066
best_effort_timestamp_time=0.999229
duration=1024
duration_time=0.023220
pkt_pos=277109
pkt_size=6
sample_fmt=fltp
nb_samples=1024
channels=2
channel_layout=stereo
[/FRAME]

至此,可以确定视频文件中确实存在音频帧,但是还要明确一点:尽管有音频帧,但是不一定就有音量

因此,最准确的方式是打印音频音量信息,命令如下:

代码语言:bash
复制
ffprobe -f lavfi -i "amovie=/path/to/video.mp4,astats=metadata=1:reset=1" -show_entries frame_tags=lavfi.astats.Overall.RMS_level -of csv=p=0 

示例:

代码语言:txt
复制
-inf
-inf
-inf
-inf
-inf
-inf
-inf
-169.933353
-24.784556
-22.219754
-25.271574
-29.499041
-30.013181
-22.694111
-19.742841
-28.077050
-31.218229
-34.254561

上面的数值说明音频帧确实存在音量,非静音数据。

2、间接查看音频信息

可以反其道而行之,查看静音区间,如果没有静音区间说明有声音。

代码语言:txt
复制
ffmpeg -i /path/to/video.mp4 -af "silencedetect=noise=-60dB:d=0.5" -f null - 2>&1 | grep "silence"

参数说明:

  • noise=-60dB:静音阈值(RMS低于此值视为静音)
  • d=0.5:最小静音持续时间(秒)

示例:

代码语言:txt
复制
[silencedetect @ 0x6000016a8120] silence_start: 0
[silencedetect @ 0x6000016a8120] silence_end: 3.082358 | silence_duration: 3.082358
[silencedetect @ 0x6000016a8120] silence_start: 3.221474
[silencedetect @ 0x6000016a8120] silence_end: 4.080975 | silence_duration: 0.859501
[silencedetect @ 0x6000016a8120] silence_start: 4.221474
[silencedetect @ 0x6000016a8120] silence_end: 5.08254 | silence_duration: 0.861066
[silencedetect @ 0x6000016a8120] silence_start: 5.221474
[silencedetect @ 0x6000016a8120] silence_end: 6.082744 | silence_duration: 0.86127
[silencedetect @ 0x6000016a8120] silence_start: 6.221474
[silencedetect @ 0x6000016a8120] silence_end: 7.081905 | silence_duration: 0.860431

上述信息说明视频文件中的音频存在间隔性的静音区间。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 1、利用 ffprobe
    • 2、间接查看音频信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档