Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Methode zur Bestimmung, ob ein Video im MP3-Format vorliegt, mithilfe von Python

Einführung in die Methode zur Bestimmung, ob ein Video im MP3-Format vorliegt, mithilfe von Python

巴扎黑
巴扎黑Original
2017-08-18 17:10:172171Durchsuche

Im Projekt wird das MP3-Format für die Soundeffektwiedergabe verwendet. Wenn ich auf eine MP3-Datei stoße, die im Programm nicht abgespielt werden kann, stelle ich schließlich fest, dass es sich um eine Datei im WAV-Format handelt, die jedoch mit mp3 endet. Um das MP3-Format einer Ressource zu bestimmen, ist die Verwendung des .mp3-Suffixes definitiv unzuverlässig. Wir wissen, dass die Erweiterung anhand des Codierungsformats wie folgt beurteilt werden kann.

  1. MP3-Kodierung

MP3-Datei ist ein Streaming-Media-Dateiformat, daher gibt es keinen Dateiheader. Formatformate mit Dateiheadern wie AVI und WAV sind leicht zu beurteilen. Sie beginnen alle mit RIFF. Vergleichen Sie einfach die RIFF-Zeichenfolgen, um herauszufinden, ob es sich um AVI oder WAV handelt, während mp3 nur das Codierungsformat analysieren kann. Hier finden Sie eine kurze Einführung in die MP3-Kodierungsregeln. Weitere Informationen finden Sie in diesem Artikel

MP3-Dateien sind im Allgemeinen in drei Teile unterteilt: TAG_V2 (ID3V2), Audiodaten, TAG_V1 (ID3V1)

a) ID3V2 steht am Anfang der Datei, beginnend mit ID3, und enthält Informationen wie Autor, Komponist, Album usw. Die Länge ist nicht festgelegt, erweitert den Informationsumfang von ID3V1 und ist optional

b) Eine Reihe von Frames mit Audiodaten. In der Mitte der Datei wird die Anzahl durch die Dateigröße und die Framelänge bestimmt. Die Länge ist möglicherweise nicht festgelegt Jeder Frame ist in einen Frame-Header unterteilt. Der Frame-Header zeichnet die Bitrate, die Abtastrate, die Version und andere Informationen des MP3 auf, und jeder Frame ist unabhängig voneinander.

c). ID3V1 steht am Ende der Datei, beginnt mit TAG und enthält Informationen wie Autor, Komponist, Album usw. Die Länge beträgt 128 Byte und ist optional.

ID3V2

enthält Informationen wie Autor, Komponist, Album usw. Die Länge ist nicht festgelegt, wodurch sich die Informationsmenge von ID3V1 erweitert.

Rahmen

.

.

.

Rahmen

Eine Reihe von Rahmen, deren Anzahl wird durch die Datei bestimmt. Bestimmt durch Größe und Frame-Länge

Die Länge jedes FRAMEs ist möglicherweise nicht festgelegt oder kann festgelegt sein und wird durch die Bitrate bestimmt

Jeder FRAME ist in zwei Teile geteilt Teile: Frame-Header und Dateneinheit

Der Frame-Header zeichnet die Bitrate, Abtastrate, Version und andere Informationen von MP3 auf, und jeder Frame ist unabhängig voneinander.

ID3V1

enthält Autor, Komponist, Album und andere Informationen und ist 128 Byte lang.

Mit anderen Worten: Anhand der Anfangsinformationen in den drei Strukturen TAG_V2 (ID3V2), Audiodaten und TAG_V1 (ID3V1) können Sie feststellen, ob es sich um eine MP3-codierte Datei handelt.

2.Python-Code

# coding: utf-8
import os
#mp3filePath是否是mp3格式的
def isMp3Format(mp3filePath):
 #读取文件内字符串
 f = open(mp3filePath, "r");
 fileStr = f.read();
 f.close();
 head3Str = fileStr[:3];
 #判断开头是不是ID3
 if head3Str == "ID3":
  return True;
 #判断结尾有没有TAG
 last32Str = fileStr[-32:];
 if last32Str[:3] == "TAG":
  return True;
 #判断第一帧是不是FFF开头, 转成数字
 # fixme 应该循环遍历每个帧头,这样才能100%判断是不是mp3
 ascii = ord(fileStr[:1]);
 if ascii == 255:
  return True;
 return False;
#遍历folderPath看看是不是都是mp3格式的,
#是就true,不是就是false, 并返回是mp3的list,不是MP3的list
def isMp3FolderTraverse(folderPath):
 mp3List = [];
 notMp3List = [];
 isAllMpFormat = True;
 for dirpath, dirnames, filenames in os.walk(folderPath):
  for filename in filenames:
   path = dirpath + os.sep + filename;
   isMp3 = isMp3Format(path);
   #判断是不是mp3结尾的 并且 是mp3格式的
   if isMp3 == False and str.endswith(path, ".mp3") == True:
    # print("--warning: file " + path + " is not mp3 format!--");
    notMp3List.append(path);
    isAllMpFormat = False;
   else:
    mp3List.append(path);
 return isAllMpFormat, mp3List, notMp3List;
if __name__ == '__main__':
 isMp3Format("s_com_click1.mp3");
 isAllMp3, mp3List, notMp3List = isMp3FolderTraverse("sound");
 print isAllMp3;
 print mp3List;
 print notMp3List;

Das obige ist der detaillierte Inhalt vonEinführung in die Methode zur Bestimmung, ob ein Video im MP3-Format vorliegt, mithilfe von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn