видеоплеер, который показывает миллисекунды

Мне нужно воспроизвести файлы MP4 на моем win7, который, кроме минут и секунд, должен отображать миллисекунды.

в настоящее время у меня есть GOM, VLC и MPC-HC. (Обратите внимание, что я хочу использовать обычный легкий видеоплеер и не загружать файл в программу для редактирования видео, такую как sony vegas и т. д.).

самое близкое, что я мог бы получить, - это использовать MPC-HC, добавив фиктивный файл srt (subs) для видео и включив опцию Subresync (как показано на рисунке https://trac.mpc-hc.org/ticket/3700). Это показывает желаемый формат mm:ss.SSS. Но создание фиктивного srt (который должен содержать по крайней мере 1 запись субтитров для включения опции Subresync) является громоздким.

есть ли другое решение?

12
задан cherouvim
26.12.2022 3:14 Количество просмотров материала 2959
Распечатать страницу

2 ответа

У тебя почти получилось. Media Player Classic (MPC-HC)уже имеет эту опцию. Щелкните правой кнопкой мыши на временной метке в правом нижнем углу и выберите высокая точность

enter image description here

другие игроки, такие как VLC, SMPlayer, Mplayer, KMPlayer не имеют этой опции. Несмотря на то, что KMPlayer имеет буквально тысячу опций конфигурации

но обходной путь субтитров работает с любым игроком. здесь показали для VLC

10
отвечен nixda 2022-12-27 11:02

вот код (на python) для создания файла субтитров для обхода проблемы субтитров:

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")
1
отвечен inblueswithu 2022-12-27 13:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх