длительность mp3-файла

Каков самый простой способ определить длину (в секундах) данного mp3-файла без использования внешних библиотек ? (источник python высоко оценил)

6 Solutions collect form web for “длительность mp3-файла”

Вы можете использовать pymad . Это внешняя библиотека, но не попадайте в ловушку Not Invented Here. Любая конкретная причина, по которой вам не нужны внешние библиотеки?

import mad mf = mad.MadFile("foo.mp3") track_length_in_milliseconds = mf.total_time() 

Пятнистый здесь .

Если вы действительно не хотите использовать внешнюю библиотеку, посмотрите здесь и посмотрите, как он это сделал. Предупреждение: это сложно.

Для сторонников Google, вот еще несколько внешних библиотек:

mpg321 -t

ffmpeg -i

midentify (в основном, mplayer) см. Использование mplayer для определения длины аудио / видеофайла

mencoder (передайте ему недопустимые параметры, он выплюнет сообщение об ошибке, а также предоставит вам информацию о файле, например $ mencoder inputfile.mp3 -o fake)

программа mediainfo http://mediainfo.sourceforge.net/ru

ExifTool

команда linux "file"

mp3info

носки

refs: https://superuser.com/questions/36871/linux-command-line-utility-to-determine-mp3-bitrate

http://www.ruby-forum.com/topic/139468

длина mp3 в миллисекундах

(делая это вики для других, чтобы добавить).

и libs: .net: naudio, java: jlayer, c: libmad

Ура!

Простой, разборный бинарный blob для вычисления чего-то, в Python

Это похоже на довольно высокий порядок. Я не знаю Python, но вот какой-то код, который я реорганизовал из другой программы, которую однажды пытался написать.

Примечание. Это на C ++ (извините, это то, что у меня есть). Кроме того, как есть, он будет обрабатывать файлы MPEG 1 Audio Layer 3 с постоянным битрейтом. Это должно охватывать большинство, но я не могу гарантировать никаких гарантий, что это работает во всех ситуациях. Надеюсь, это делает то, что вы хотите, и, надеюсь, рефакторинг его в Python проще, чем делать это с нуля.

 // determines the duration, in seconds, of an MP3; // assumes MPEG 1 (not 2 or 2.5) Audio Layer 3 (not 1 or 2) // constant bit rate (not variable) #include <iostream> #include <fstream> #include <cstdlib> using namespace std; //Bitrates, assuming MPEG 1 Audio Layer 3 const int bitrates[16] = { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 0 }; //Intel processors are little-endian; //search Google or see: http://en.wikipedia.org/wiki/Endian int reverse(int i) { int toReturn = 0; toReturn |= ((i & 0x000000FF) << 24); toReturn |= ((i & 0x0000FF00) << 8); toReturn |= ((i & 0x00FF0000) >> 8); toReturn |= ((i & 0xFF000000) >> 24); return toReturn; } //In short, data in ID3v2 tags are stored as //"syncsafe integers". This is so the tag info //isn't mistaken for audio data, and attempted to //be "played". For more info, have fun Googling it. int syncsafe(int i) { int toReturn = 0; toReturn |= ((i & 0x7F000000) >> 24); toReturn |= ((i & 0x007F0000) >> 9); toReturn |= ((i & 0x00007F00) << 6); toReturn |= ((i & 0x0000007F) << 21); return toReturn; } //How much room does ID3 version 1 tag info //take up at the end of this file (if any)? int id3v1size(ifstream& infile) { streampos savePos = infile.tellg(); //get to 128 bytes from file end infile.seekg(0, ios::end); streampos length = infile.tellg() - (streampos)128; infile.seekg(length); int size; char buffer[3] = {0}; infile.read(buffer, 3); if( buffer[0] == 'T' && buffer[1] == 'A' && buffer[2] == 'G' ) size = 128; //found tag data else size = 0; //nothing there infile.seekg(savePos); return size; } //how much room does ID3 version 2 tag info //take up at the beginning of this file (if any) int id3v2size(ifstream& infile) { streampos savePos = infile.tellg(); infile.seekg(0, ios::beg); char buffer[6] = {0}; infile.read(buffer, 6); if( buffer[0] != 'I' || buffer[1] != 'D' || buffer[2] != '3' ) { //no tag data infile.seekg(savePos); return 0; } int size = 0; infile.read(reinterpret_cast<char*>(&size), sizeof(size)); size = syncsafe(size); infile.seekg(savePos); //"size" doesn't include the 10 byte ID3v2 header return size + 10; } int main(int argCount, char* argValues[]) { //you'll have to change this ifstream infile("C:/Music/Bush - Comedown.mp3", ios::binary); if(!infile.is_open()) { infile.close(); cout << "Error opening file" << endl; system("PAUSE"); return 0; } //determine beginning and end of primary frame data (not ID3 tags) infile.seekg(0, ios::end); streampos dataEnd = infile.tellg(); infile.seekg(0, ios::beg); streampos dataBegin = 0; dataEnd -= id3v1size(infile); dataBegin += id3v2size(infile); infile.seekg(dataBegin,ios::beg); //determine bitrate based on header for first frame of audio data int headerBytes = 0; infile.read(reinterpret_cast<char*>(&headerBytes),sizeof(headerBytes)); headerBytes = reverse(headerBytes); int bitrate = bitrates[(int)((headerBytes >> 12) & 0xF)]; //calculate duration, in seconds int duration = (dataEnd - dataBegin)/(bitrate/8); infile.close(); //print duration in minutes : seconds cout << duration/60 << ":" << duration%60 << endl; system("PAUSE"); return 0; } 

просто используйте mutagen

 $pip install mutagen 

используйте его в оболочке python:

 from mutagen.mp3 import MP3 audio = MP3(file_path) print audio.info.length 

Также взгляните на аудиозапись (некоторые дистрибутивы Linux, включая ubuntu, имеют пакеты), https://github.com/sampsyo/audioread

 audio = audioread.audio_open('/path/to/mp3') print audio.channels, audio.samplerate, audio.duration 

Вы можете подсчитать количество кадров в файле. Каждый кадр имеет начальный код, хотя я не могу вспомнить точное значение стартового кода, и у меня нет спецификации MPEG. Каждый кадр имеет определенную длину, около 40 мс для слоя MPEG1 II.

Этот метод работает для CBR-файлов (Constant Bit Rate), как работает VBR-файлы, это совершенно другая история.

Из приведенного ниже документа:

Для слоя I мы получаем эту формулу:

FrameLengthInBytes = (12 * битRate / SampleRate + Padding) * 4

Для файлов Layer II и III используйте эту формулу:

FrameLengthInBytes = 144 * BitRate / SampleRate + Padding

Информация о заголовке MPEG Audio Frame

  • Сравните два аудиофайла
  • Как преобразовать текст в речь (mp3-файл) в python?
  • Воспроизведение mp3 песни на python
  • Как читать тег ID3 в MP3 с помощью Python?
  • Как вы вставляете альбом в MP3 с помощью Python?
  • Поиск длины mp3-файла
  • Загрузка Mp3 с использованием Python в Windows управляет песней, однако в Linux это не
  • Пиглет не уйдет после игры в mp3
  • Python - лучший язык программирования в мире.