2013-08-08 10 views
5

Я использую libav 9.6, установленный через Homebrew.Как определить частоту дискретизации аудио с помощью avprobe/ffprobe?

$ 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" 
    }} 

И пример питон код:

>>> 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).

ответ

8

-show_format показывает информацию на уровне контейнера - то есть материал, который применяется ко всем потокам. Частота выборки - это свойство одного потока, поэтому совершенно нормально, что -show_format не отображает его. Вам нужно использовать -show_streams.

+0

Отлично! Спасибо за объяснение Антона! '-show_streams' работает :) – Devy