2017-10-09 63 views
1

J'essaie de tronquer un fichier audio de 30%, si le fichier audio était de 4 minutes, après l'avoir tronqué, il devrait être d'environ 72 secondes. J'ai écrit le code ci-dessous pour le faire, mais il ne renvoie qu'une taille de fichier de 0 octet. S'il vous plaît dites-moi où je me suis trompé?Comment puis-je tronquer un fichier audio mp3 de 30%?

def loadFile(): 
    with open('music.mp3', 'rb') as in_file: 
     data = len(in_file.read()) 
     with open('output.mp3', 'wb') as out_file: 
      ndata = newBytes(data) 
      out_file.write(in_file.read()[:ndata]) 

def newBytes(bytes): 
    newLength = (bytes/100) * 30 
    return int(newLength) 

loadFile() 

Répondre

2

Vous essayez de lire votre fichier une deuxième fois, ce qui ne donnera aucune donnée, par ex. len(in_file.read(). Au lieu de cela, lisez le fichier entier dans une variable, puis calculez la longueur de celle-ci. La variable peut ensuite être utilisée une deuxième fois.

def newBytes(bytes): 
    return (bytes * 70)/100 

def loadFile(): 
    with open('music.mp3', 'rb') as in_file: 
     data = in_file.read() 

    with open('output.mp3', 'wb') as out_file: 
     ndata = newBytes(len(data)) 
     out_file.write(data[:ndata]) 

De même, il vaut mieux multiplier d'abord, puis diviser pour éviter d'avoir à travailler avec des nombres à virgule flottante.

+0

Merci beaucoup. – answerSeeker

0

Vous ne pouvez pas tronquer de manière fiable un fichier MP3 en fonction de sa taille en octets et vous vous attendez à ce qu'il soit tronqué de manière équivalente en durée audio.

Les images MP3 peuvent changer de débit. Bien que votre méthode fonctionne en quelque sorte, elle ne sera pas très précise. En outre, vous allez certainement casser les cadres en laissant des pépins à la fin du fichier. Vous perdrez également les tags ID3v1 (si vous les utilisez encore ... mieux vaut utiliser ID3v2 de toute façon).

Envisagez d'exécuter FFmpeg avec -acodec copy à la place. Cela va simplement copier les octets tout en maintenant l'intégrité du fichier, et en assurant une bonne coupe nette où vous le souhaitez.