J'ai besoin de lire des fichiers MP4 sur mon win7 qui, en dehors des minutes et des secondes, devrait afficher les millisecondes.
J'ai actuellement GOM, VLC et MPC-HC. (Notez que je souhaite utiliser un lecteur vidéo léger régulier et ne pas avoir à charger le fichier dans un programme de montage vidéo tel que sony vegas, etc.).
Le plus proche que je pourrais obtenir est en utilisant MPC-HC, en ajoutant un fichier srt (subs) fictif pour la vidéo et en activant l'option Subresync (comme indiqué sur https://trac.mpc-hc.org/ticket/3700 ). Cela montre le format désiré de mm:ss.SSS
. Mais la création d'un dummy srt (qui doit contenir au moins 1 entrée de sous-titre pour que l'option Subresync soit activée) soit lourde.
Existe-t-il une autre solution?
Vous l'avez presque eu. Media Player Classic (MPC-HC), cette option est déjà intégrée. Cliquez avec le bouton droit de la souris sur l'horodatage en bas à droite et choisissez Haute précision
D'autres joueurs comme VLC, SMPlayer, Mplayer, KMPlayer n'ont pas cette option. Malgré le fait que KMPlayer a littéralement un millier d'options de configuration
Mais le contournement des sous-titres fonctionne avec n'importe quel joueur. Cela a été démontré pour VLC
Voici le code (en python) pour générer le fichier de sous-titres pour la solution de contournement des sous-titres:
def generateSRTFile(fileName, duration): """ Generate SRT (subtitle) file for micro second display in video fileName: "Movie1.srt" duration: "00:12:54" NOTE: ignored seconds to make the program more simplified """ # get the hours, min, sec from duration time_split = duration.split(':') hours = int(time_split[0]) minutes = int(time_split[1]) seconds = 59 # int(time_split[2]) millisecs = [x*10 for x in range(0,100)] # open a file to write f = open(name=fileName, mode='w', buffering=1) # iterate to print to file blockNo = 1 for h in range(hours+1): for m in range(minutes+1): for s in range(seconds+1): for ms in millisecs: f.write(subtitle(h, m, s, ms, blockNo)) blockNo += 1 # close the file return f.close() def subtitle(h, m, s, ms, bn): """ Returns the subtitle block for the given parametes h: hours, m: minutes, s: seconds, ms: milli seconds, bn: block number """ block = "" block += formatToString(bn) + "\n" time_line = formatToString(h)+":"+formatToString(m)+":"+formatToString(s)+"," block += time_line+formatToString(ms, 3) + " --> " + time_line + \ formatToString(ms+10 if ms!=990 else 999, 3) + "\n" block += "time " + time_line + formatToString(ms ,3) + "\n\n" return block def formatToString(num, length=2): """ Format given number to given length. ie num = 5 and length = 2. Result = "05" """ # number of digits in num digits = len(str(num)) # mathematical equivalent for finding digits #n = num #digits = 0 #if n==0: #digits = 1 #else: #while n: #n = n/10 #digits += 1 # find how much shorter is num than length if digits >= length: strNum = str(num) else: diff = length-digits strNum = "" for i in range(diff): strNum += "0" strNum += str(num) # return return strNum if __name__=="__main__": generateSRTFile(fileName='/home/inblueswithu/Downloads/default.srt', duration="00:05:56")