LINUX.ORG.RU

Неправильно определяется битрейт MP3


0

1

Хочу из внешней программы передать своему скрипту битрейт файла MP3. Чтобы определить битрейт, можно использовать

file file.mp3
exiftool -AudioBitrate file.mp3
mpg321 -t file.mp3
ffmpeg -i file.mp3

Проблема в следующем. Обычно битрейт определяется правильно, однако наткнулся на альбом, в котором битрейт MP3 определяется правильно только с помощью ffmpeg -i. В итоге средний битрейт у MP3 файлов должен быть ~256 Кб/с (видимо, VBR), однако только ffmpeg -i показывает правильное значение, все остальные - 128 Кб/с. Вопрос заключается в следующем.

1) Как сделать так, чтобы, например, exiftool выдавало верные значения?

2) Если невозможно, то как передать результат ffmpeg -i скрипту? У меня ffmpeg -i file.mp3 | grep 44100 | cut -c 57-60 ничего не дает, ffmpeg показывает вывод на экран и все, grep и cut не выдают ничего. ffmpeg -i file.mp3 > tmp_file дает пустой файл.

Deleted

ffmpeg -i file.mp3 > tmp_file дает пустой файл

тогда так

[ megabaks@desktop ] ~ $ ffmpeg -i /var/ftp/stuff/music/\[PKG\ 09\]\ Hellfish\ \&\ Micropoint\ -\ Motordog\ \ Healing\ Mod\ \[2001\]/01\ hellfish\ vs\ micropoint\ -\ motordog.mp3 &> TEST
[ megabaks@desktop ] ~ $ cat TEST 
FFmpeg version 0.6.90-rc0, Copyright (c) 2000-2011 the FFmpeg developers
  built on Apr 30 2011 18:40:17 with gcc 4.5.2
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-shared --cc=i686-pc-linux-gnu-gcc --disable-static --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-doc --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-libfaac --enable-nonfree --disable-indev=v4l --disable-indev=v4l2 --disable-indev=oss --disable-indev=jack --enable-x11grab --disable-outdev=oss --enable-libfreetype --enable-pthreads --enable-libdirac --enable-libschroedinger --enable-libvpx --disable-altivec --disable-avx --disable-mmx2 --disable-amd3dnow --disable-amd3dnowext --cpu=core2 --enable-hardcoded-tables
  libavutil    50. 40. 0 / 50. 40. 0
  libavcodec   52.117. 0 / 52.117. 0
  libavformat  52.104. 0 / 52.104. 0
  libavdevice  52.  4. 0 / 52.  4. 0
  libavfilter   1. 76. 0 /  1. 76. 0
  libswscale    0. 13. 0 /  0. 13. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mp3 @ 0x829aa40] max_analyze_duration reached
[mp3 @ 0x829aa40] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from '/var/ftp/stuff/music/[PKG 09] Hellfish & Micropoint - Motordog  Healing Mod [2001]/01 hellfish vs micropoint - motordog.mp3':
  Metadata:
    title           : Motordog
    album           : Motordog / Healing Mod
    genre           : Electronic
    date            : 2001
    track           : 01/02
    artist          : Hellfish Vs Micropoint
    ALBUM ARTIST    : Hellfish Vs Micropoint
    DISCOGS_ARTIST_LINK: Hellfish
    DISCOGS_CATALOG : PKG 09
    DISCOGS_COUNTRY : France
    DISCOGS_LABEL   : Psychik Genocide
    DISCOGS_LABEL_LINK: Psychik%20Genocide
    DISCOGS_ORIGINAL_TRACK_NUMBER: 01
    DISCOGS_RELEASE_ID: 21871
    DISCOGS_RELEASED: 2001
  Duration: 00:05:10.05, start: 0.000000, bitrate: 192 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 192 kb/s
At least one output file must be specified
[ megabaks@desktop ] ~ $ 

megabaks ★★★★
()

Вывод текста ffmpeg -i идёт на stderr, а не на stdout

ffmpeg -i file.mp3 2>&1 | grep ...
# or
ffmpeg -i file.mp3 2> tmp_file
Deleted
()

а на лету...

[ megabaks@desktop ] ~ $ ffmpeg -i /var/ftp/stuff/music/\[PKG\ 09\]\ Hellfish\ \&\ Micropoint\ -\ Motordog\ \ Healing\ Mod\ \[2001\]/01\ hellfish\ vs\ micropoint\ -\ motordog.mp3 &>/dev/stdout | grep Stream
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 192 kb/s
[ megabaks@desktop ] ~ $ 

megabaks ★★★★
()

> ffmpeg показывает вывод на экран и все, grep и cut не выдают ничего
ffmpeg ... 2>&1 | grep ... | cut ...

AITap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.