ffmpeg - 如何使用 avprobe/ffprobe 检测音频采样率?

标签 ffmpeg libav ffprobe avprobe

我正在使用通过 Homebrew 安装的 libav 9.6。

$ avprobe -version
avprobe version 9.6, Copyright (c) 2007-2013 the Libav developers
  built on Jun  8 2013 02:44:19 with Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
avprobe 9.6
libavutil     52.  3. 0 / 52.  3. 0
libavcodec    54. 35. 0 / 54. 35. 0
libavformat   54. 20. 3 / 54. 20. 3
libavdevice   53.  2. 0 / 53.  2. 0
libavfilter    3.  3. 0 /  3.  3. 0
libavresample  1.  0. 1 /  1.  0. 1
libswscale     2.  1. 1 /  2.  1. 1

即使采样率显示在命令行输出的标准输出中,-show_format选项根本不会显示音频文件的采样率信息。

这是 BASH 终端输出:
$ avprobe  -v verbose -show_format -of json  sample.gsm
avprobe version 9.6, Copyright (c) 2007-2013 the Libav developers
  built on Jun  8 2013 02:44:19 with Apple LLVM version 4.2 (clang-425.0.24)
(based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/libav/9.6 --enable-shared
--enable-pthreads --enable-gpl --enable-version3 --enable-nonfree
--enable-hardcoded-tables --enable-avresample --enable-vda --enable-gnutls
--enable-runtime-cpudetect --disable-indev=jack --cc=cc --host-cflags=
--host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame
--enable-libxvid --enable-avplay
  libavutil     52.  3. 0 / 52.  3. 0
  libavcodec    54. 35. 0 / 54. 35. 0
  libavformat   54. 20. 3 / 54. 20. 3
  libavdevice   53.  2. 0 / 53.  2. 0
  libavfilter    3.  3. 0 /  3.  3. 0
  libavresample  1.  0. 1 /  1.  0. 1
  libswscale     2.  1. 1 /  2.  1. 1
[gsm @ 0x7f8012806600] Estimating duration from bitrate, this may be inaccurate
Input #0, gsm, from 'sample.gsm':
  Duration: 00:03:52.32, start: 0.000000, bitrate: 13 kb/s
    Stream #0.0: Audio: gsm, 8000 Hz, mono, s16, 13 kb/s
{  "format" : {
    "filename" : "sample.gsm",
    "nb_streams" : 1,
    "format_name" : "gsm",
    "format_long_name" : "raw GSM",
    "start_time" : "0.000000",
    "duration" : "232.320000",
    "size" : "383328.000000",
    "bit_rate" : "13200.000000"
  }}

和python代码示例:
>>> filename = 'sample.gsm'
>>> result = subprocess.check_output(['avprobe', '-show_format', '-of',
'json', filename])
avprobe version 9.6, Copyright (c) 2007-2013 the Libav developers
  built on Jun  8 2013 02:44:19 with Apple LLVM version 4.2
(clang-425.0.24) (based on LLVM 3.2svn)
[gsm @ 0x7fe0b1806600] Estimating duration from bitrate, this may be
inaccurate
Input #0, gsm, from 'sample.gsm':
  Duration: 00:03:52.32, start: 0.000000, bitrate: 13 kb/s
    Stream #0.0: Audio: gsm, 8000 Hz, mono, s16, 13 kb/s
>>> print result
{  "format" : {
    "filename" : "sample.gsm",
    "nb_streams" : 1,
    "format_name" : "gsm",
    "format_long_name" : "raw GSM",
    "start_time" : "0.000000",
    "duration" : "232.320000",
    "size" : "383328.000000",
    "bit_rate" : "13200.000000"
}}

所以我知道采样率可能是特定于流的显示,在 -show_format 中显示选项结果。但是没有任何其他选项可以检测特定音频流的采样率,即使可以使用 -ar 进行设置也是如此。重新编码时。

我提交了a ticket到 libav,但我只是好奇是否有任何其他方法可以从 libav 探测工具中提取采样率。我很感激事先的回答。

PS:在这种情况下,对于ffmpeg(ffprobe)的上游项目将是相同的问题。

最佳答案

-show_format显示容器级信息——即适用于所有流的内容。采样率是单个流的属性,所以 -show_format 是完全正常的。不显示它。您需要使用 -show_streams .

关于ffmpeg - 如何使用 avprobe/ffprobe 检测音频采样率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128727/

相关文章:

batch-file - 创建递归 ffmpeg 转换器

ffmpeg/ffprobe show_frames 选项

python - 通过 pip 全新安装 OpenCV 后,它会抛出 ImportError : DLL load failed

c++ - 使用 LibAV : avcodec_decode_video2? 将压缩帧解码到内存

ffmpeg - libav MPEGTS 解复用 - 处理循环/不连续性

api - FFMPEG API(使用特定格式编译)

video - 我可以使用 ffmpeg 或 ffprobe 获取 h.264 每帧的引用列表吗?

video - 无法使用 ffmpeg 将视频关键帧间隔更改为 1

ffmpeg - windows上使用ffmpeg将一组png图片转换为一组webp图片

c++ - 如何将实时视频流从 YUV(HDYC) 转换为 RGB