Je dois lire des fichiers MP4 sur mon win7 qui, mis à part les minutes et les secondes, devrait afficher les millisecondes.
J'ai actuellement GOM, VLC et MPC-HC. (Notez que je souhaite utiliser un lecteur vidéo léger ordinaire sans avoir à charger le fichier dans un programme de montage vidéo tel que sony vegas, etc.).
Le mieux que je puisse faire est d’utiliser MPC-HC, d’ajouter un fichier factice srt (subs) pour la vidéo et d’activer l’option Subresync (comme indiqué à https: //trac.mpc- hc.org/ticket/3700 ). Cela montre le format souhaité de mm:ss.SSS
. Mais créer un pseudonyme factice (qui devrait contenir au moins une entrée de sous-titre pour que l'option Sous-synchronisation soit activée) est fastidieux.
Y a-t-il une autre solution?
Vous l'avez presque eu. Media Player Classic (MPC-HC) a déjà cette option intégrée. Faites un clic droit sur l’horodatage en bas à droite et choisissez Haute précision
Les autres joueurs comme VLC, SMPlayer, Mplayer, KMPlayer n'ont pas cette option. Malgré le fait que KMPlayer a littéralement mille options de configuration
Mais la solution de contournement des sous-titres fonctionne avec n’importe quel joueur. Ici démontré pour VLC
Voici le code (en python) permettant de 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.
i.e 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")