Как изменить неправильную длину песни mp3 в python

Я использую мутаген для изменения метаданных файла: «temp.mp3».

Песня длится 3 часа.

Когда я пытаюсь:

from mutagen.mp3 import MP3
audio = MP3('temp.mp3')
print audio.info.length
audio.info.length = 180
print audio.info.length
audio.save()
audio = MP3('temp.mp3')
print audio.info.length

Я получаю следующий вывод:

424.791857143
180
424.791857143

Таким образом, похоже, что метод сохранения mp3 не записывает информацию, которую я храню в info.length. Как мне сделать это хранилище данных файлом?


person Nezo    schedule 25.03.2014    source источник


Ответы (1)


Это было задано давно, но я столкнулся с той же проблемой.

После тщательного поиска в Google я нашел этот ответ, в котором используется кодировщик ffmpeg для исправления неправильного метаданные.

Вот решение, которое, надеюсь, сэкономит кому-то время.


Мы можем использовать ffmpeg для копирования файла и автоматического исправления ошибочных метаданных с помощью этой команды:

ffmpeg -v quiet -i "sound.mp3" -acodec copy "fixed_sound.mp3"

Модификатор -v quiet не позволяет выводить подробности команды на консоль.

Чтобы проверить, есть ли у вас ffmpeg, запустите ffmpeg -version в командной строке. (Если нет, вы можете загрузить его отсюда: https://ffmpeg.org/)


Ниже я написал функцию, которая должна помочь!

import os

def fix_duration(filepath):
    ##  Create a temporary name for the current file.
    ##  i.e: 'sound.mp3' -> 'sound_temp.mp3' 
    temp_filepath = filepath[ :len(filepath) - len('.mp3')] + '_temp' + '.mp3'

    ##  Rename the file to the temporary name.
    os.rename(filepath, temp_filepath)

    ##  Run the ffmpeg command to copy this file.
    ##  This fixes the duration and creates a new file with the original name.
    command = 'ffmpeg -v quiet -i "' + temp_filepath + '" -acodec copy "' + filepath + '"'
    os.system(command)

    ##  Remove the temporary file that had the wrong duration in its metadata.
    os.remove(temp_filepath)

person Chris Pavlopoulos    schedule 19.05.2020