[wlx/wdx] TCMediaInfo

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Monarch-LFV
Сообщения: 360
Зарегистрирован: Пн июл 22, 2019 13:20

Сообщение Monarch-LFV »

Вообще, математический расчет времени, по моему мнению, должен быть по правилам математического округления, то есть в экселе такой (скопировать и вставить в эксель в A1):

Код: Выделить всё

119400
=ОКРУГЛ(A1/1000;0)
=ЦЕЛОЕ(A2/3600)
=ЦЕЛОЕ(A2/60)-A3*60
=A2-A3*3600-A4*60

119600
=ОКРУГЛ(A7/1000;0)
=ЦЕЛОЕ(A8/3600)
=ЦЕЛОЕ(A8/60)-A9*60
=A8-A9*3600-A10*60
По порядку: вначале округляем миллисекунды в секунды (до целых), далее получаем часы, минуты и секунды. Разный расчет может быть только на этапе округления (в самом начале), Думаю, тут только по правилам математики нужно, остальные отбрасывания или округлвверх дадут не совсем верные варианты.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

AkulaBig
Это всё общие/гипотетические рассуждения ;) Покажите пример, когда получение часов, минут и секунд из миллисекунд дадут более точный результат, чем получение секунд и уже из секунд - часов и минут.
Ну и про Unix-time давайте не забывать, там секунды и горя не знают.

Monarch-LFV
Это всё понятно, тут дело в другом, как понимаю: учитывать миллисекунды и округлять или же отбрасывать их. Какие-то программы идут по первому пути, какие-то по второму, что вносит некоторую путаницу: во втором случае всегда знаешь, что у тебя может быть ещё чуток длины, а во втором может быть больше, а может быть и меньше. Фиг знает, насколько длина плюс/минус секунда критична...

Loopback, собственно, принял компромисное решение
Loopback писал(а):Верну исходный вариант с обрезкой по умолчанию и добавлю опцию, как округлять. Кому под вывод какой программы нужно подгонять - пусть и меняет...
или терпит :))
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Skif_off писал(а):Это всё понятно, тут дело в другом, как понимаю: учитывать миллисекунды и округлять или же отбрасывать их. Какие-то программы идут по первому пути, какие-то по второму, что вносит некоторую путаницу: во втором случае всегда знаешь, что у тебя может быть ещё чуток длины, а во втором может быть больше, а может быть и меньше.
Верно, нет никакой разницы, как считать. Можно начинать с часов, можно с секунд, результат будет тот же. Разница в результате плюс-минус одна секунда идёт исключительно от метода учёта миллисекунд. Либо отсекаем, либо округляем, во втором случае может появиться дополнительная секунда. Алгоритм-то простейший, не знаю, что тут можно столько обсуждать.

В любом случае, просто сделаю метод округления опциональным.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Неудачный пример получился. foobar в свойствах показывает только с миллисекундами. Я другого вида отображения и в стандартной версии не нашел. А в линейке показывает округленный до секунда. И вопрос остается.
Наоборот, удачный пример, как раз то, что нам нужно. :) В списке воспроизведения foobar2000 округляет до секунды, а в свойствах файла - показывает точную информацию о времени без округления:
Donna Summer - I Feel Love (Extended Mix) 8:17
-
Duration : 8:16.524 (21 896 687 samples)
Поскольку Sample rate = 44100 Hz (сэмплов в секуду), берем 21896687 и делим на 44100. Получаем 496,52351473922902494331065759637, т.е. 496 секунд (8 минут, 16 секунд) и остаток, который округлился до 524 миллисекунд.

Что с этим остатком делать? Да что хотите, то с ним и делаете - вам решать :lol:

Лирическое отступление:

Меня сейчас больше интересует другое. Если открыть этот файл в плагине TCMediaInfo, то получается Duration, hh:mm:ss.fff = 00:08:16.526. Разница в две единицы! (О, ужас ужасный! :lol:) Сначала не понял. Глянул в MediaInfo, а там есть такая строчка - Frame rate: 38.281 FPS (1152 SPF). Перемножаем 38281 × 1152 = 44 099 712. Т.е. 44099,712 сэмплов в секунду. Делим общее количество сэмплов 21896687 на 44099,712 и получаем 496,52675736295057890627494347355

Вывод:

Короче, чувствую, что занимаюсь чем-то не тем. А вы уверены, что оно вам надо? :lol:

Добавлено спустя 19 минут:

Да, забыл написать, что MediaInfo показывает:

Код: Выделить всё

Format                                   : MPEG Audio
File size                                : 18.9 MiB
Duration                                 : 8 min 16 s
Overall bit rate mode                    : Constant
Overall bit rate                         : 320 kb/s
Track name                               : I Feel Love (Extended Mix)
Track name/Position                      : 01
Performer                                : Donna Summer


Audio
Format                                   : MPEG Audio
Format version                           : Version 1
Format profile                           : Layer 3
Format settings                          : Joint stereo
Duration                                 : 8 min 16 s
Bit rate mode                            : Constant
Bit rate                                 : 320 kb/s
Channel(s)                               : 2 channels
Sampling rate                            : 44.1 kHz
Frame rate                               : 38.281 FPS (1152 SPF)
Compression mode                         : Lossy
Stream size                              : 18.9 MiB (100%)
Т.е. без округления, что еще раз подчеркивает разницу в предпочтениях. Имхо, это даже хорошо, потому что видя эту разницу в разных местах (проигрывателях, свойствах файла и т.д.) сразу можно понять, что у этого файла есть спорный остаток.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Поскольку Sample rate = 44100 Hz (сэмплов в секуду), берем 21896687 и делим на 44100. Получаем 496,52351473922902494331065759637, т.е. 496 секунд (8 минут, 16 секунд) и остаток, который округлился до 524 миллисекунд.
Познавательный пост у вас получился. Я со своей стороны тоже поразбирался и вот что получается.
Основная фишка в том, что секунды, в отличии от часов и минут, могут быть дробными. Поэтому единственно правильный формат продолжительности 11:11:11.111. Очень удобный онлайн-преобразователь для этого https://www.convert-me.com/ru/convert/t ... d&v=247532
Изображение
Как видно на скрине. На преобразователе есть кнопочка, которой можно выбрать количество значащих цифр. И при значащей цифре 1 мы получаем округленные секунды. Это округление сделано по законам математики и по другому быть не должно. То-есть TCMediaInfo 1.1.0.2 показывает продолжительность совершенно правильно.
А дальше пошла жарешка. Свойства Windows показывает неправильно, MediaInfo показывает неправильно. Да плюс к этому есть еще проблема разных форматов. То-есть понятно, что в Винде нет кодеков для для ogg, opus и я не могу посмотреть свойства в чистой Винде. А вот при установке К-Lite Codec Pack свойства показываются и они НЕ совпадают с TCMediaInfo:
Изображение
Так что я предлагаю смириться. Пользоваться исходной TCMediaInfo 1.1.0. Только попрошу разобраться с отображением колонок и русификацией.
Себе я сделал кастомную колонку hh:mm:ss с округлением секунд. Думаю она будет полезной. Файл TCMediaInfo.xml все по той-же ссылке.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Если вам интересно, то можете как-нибудь почитать о том, как оцифровывают и кодируют звук. Помню, несколько лет назад я немного окунулся в эту тему, пытаясь понять, как работает ReplayGain и почему при его использовании (или использовании MP3Gain) не происходит потери качества. Но что-то лезть в эти дебри меня больше как-то не тянет :)

Хотел найти ту статью, которую я тогда читал, но так и не нашел. Но было что-то примерно этого (если кому-то интересно):
https://habr.com/ru/articles/503786/
https://habr.com/ru/articles/103635/

А холивар на счет последней секунды нет смысла устриавать - пусть большие дядьки сами там решают. :lol: Как по мне, то в последней секунде все-равно ничего интересного не бывает :mrgreen:
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Если вам интересно, то можете как-нибудь почитать о том, как оцифровывают и кодируют звук.
Меня интересует одинаковое отображение параметров для всех программ и типов файлов, но не получится.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Меня интересует одинаковое отображение параметров для всех программ и типов файлов, но не получится.
Вынужден согласиться - не получится. Это же типичный холивар "с какого конца яйцо лучше бить". Нет здесь хорошего и правильного решения. Округлишь в большую сторону - добавишь несуществующие миллисекунды. Округлишь в меньшую - потеряешь существующие миллисекунды. Обрежешь до целого - еще больше потеряешь миллисекунды. На этой дилемме ведь не один чип может сгореть :lol: Хотя это смотря какой чип ) Надо будет у Алисы спросить, что она на этот счет думает :mrgreen:

[cut="P.S."]И все-таки правильно разбивать яйцо с тупого конца :mrgreen:[/cut]
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Вынужден согласиться - не получится. Это же типичный холивар "с какого конца яйцо лучше бить".
Вы меня не поняли. Дело не в этом. Я выше писал, что файлы ogg и opus (возможно и другие, я пишу только про которые я тестировал) показывают продолжительность в Вин Свойства другие значения. То-есть если настроить, чтобы mp3 отображались правильно, то эти расширения показываются неправильно. И наоборот. То-есть невозможно настроить, чтобы все расширения показывались в одном стиле.

Добавлено спустя 6 минут:

А вообще может все-же мы чего-то до конца не понимаем. Я очень сомневаюсь, что мелко-мягкие используют неправильный алгоритм. Но, конечно, это дискуссионный вопрос.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Вы меня не поняли. Дело не в этом. Я выше писал, что файлы ogg и opus (возможно и другие, я пишу только про которые я тестировал) показывают продолжительность в Вин Свойства другие значения. То-есть если настроить, чтобы mp3 отображались правильно, то эти расширения показываются неправильно. И наоборот. То-есть невозможно настроить, чтобы все расширения показывались в одном стиле.
Я и правда ничего не понял :lol:

Но если у вас много коротких аудио (видео) файлов, где последняя секунда играет какую-то роль, то можно сделать дополнительный набор колонок, где миллисекунды будут вынесены в отдельный соседний ряд либо будут отображаться как-то по-другому. Можно сделать еще подсветку файлов в обычном наборе, т.е. раскрасить файлы, у которых > 500 миллисекунд в остатке.

В общем, есть варианты )
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

AkulaBig писал(а):Свойства Windows показывает неправильно, MediaInfo показывает неправильно. ... чтобы mp3 отображались правильно
Не бывает "правильно" или "неправильно", есть два подхода: одни приложения традиционно отбрасывают миллисекунды, другие традиционно округляют.
Если найдёте пример программы, которая округляет, например, по десятой доле секунды, отбрасывая сотые и тысячные, тогда можно поговорить о "неправильно".

P.S. MediaInfo и как минимум WinXP выкатили плюс/минус 20 лет назад и вряд ли регулярно переделывали туда-сюда отображение длятельности, тут либо сделать как удобнее для себя в файловом менеджере, либо [s]смириться[/s] стойко и мужественно переносить суровую реальность бытия, либо писать письма в [s]Спортлото[/s] MediaArea и MS.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Я очень сомневаюсь, что мелко-мягкие используют неправильный алгоритм.
Ну, на мелко-мягких я ориентироваться не стал бы. У них расширение файла в Проводнике не показывается по-умолчанию, а вы хотите, чтобы они миллисекунды в свойствах файла отображали что ли? :lol:

Ну вот открыл сейчас вкладку "Подробно", а там продолжительность - 0:08:16. Ну как же так? Взяли и съели 524 миллисекунды. А ведь это целых 23108 сэмплов! А у меня, между прочим, каждый сэмпл на счету :mrgreen:

MPC-BE - 0:08:17
MPC-HC - 0:08:16
foobar2k - 0:08:17
PotPlayer - 0:08:16
ExifTool - 0:08:17 (approx)
MMedia - 496 seconds (8:16)
Mp3Tag -0:08:17

Можно продолжать и продолжать... "Округлить нельзя обрезать", - подумал Гулливер, вставляя запятую :mrgreen:
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Я и правда ничего не понял :lol:
Изображение

Добавлено спустя 10 минут:
Skif_off писал(а):Не бывает "правильно" или "неправильно", есть два подхода
Не бывает разных подходов в алгебре. Алгебра построена на аксиомах, а не на теоремах.
Skif_off писал(а): Если найдёте пример программы, которая округляет, например, по десятой доле секунды, отбрасывая сотые и тысячные, тогда можно поговорить о "неправильно".
Я выше выложил калькулятор. Выбирайте там понравившееся значимое число и увидите результат. Он всегда округляется.
И я-бы настаивал на правильном варианте, если-бы файлы ogg и opus не показывали другие значения. То-есть нельзя выбрать один правильный вариант.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig, теперь понял. Как сейчас модно говорить: для форматов opus и ogg мелко-мягкие использую [s]бодипозитивный[/s] таймпозитивный подход :lol:

То, что у них в рамках одной задачи нет единого подхода "что делать с остатком миллисекунд", только добавляет в холивар. Но даже если такой поход и существовал, эталоном он не стал бы. Имхо, все-равно нашлись бы программы, которые по-своему округляли или обрезали этот остаток.

Я сконвертировал вышеуказанный mp3 в ogg и opus - как все программы показывали по-своему, так и показывают. И это не смотря на то, что количество сэмплов изменилось в большую сторону.

mp3 - 8:16.524 (21 896 687 samples)
ogg -8:16.941 (21 915 119 samples)
opus - 8:16.941 (23 853 191 samples)

Что конкретно происходит при конвертации, разбираться не хочется. Но что касается отображения, то, возможно, в списке воспроизведения проигрывателей и есть смысл округлять остаток для удобства пользователей, которым, как правило, не нужна никакая точность. Но такие программы, как MediaInfo, должны уметь раскладывать все по полочкам с максимальным объемом информации - секунды, миллисекунды, сэмплы, фреймы и т.д. - что они и делают. А формат вывода остается за пользователем.

Только выбор, как оказалось, этот не такой простой :lol:
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Добавил опцию TimingRounding, управляющую округлением в TimingFormat. Три варианта, крути-верти :)

Значения: 0 - метод по умолчанию (округляет до меньшего, как в MediaInfo), 1 - округление до ближайшего, 2 - округление до большего (ну мало ли кому и такое понадобится). Такие же значения можно передавать напрямую в TimingFormat третьим параметром. В общем, всё есть в приложенной или онлайн справке.

Если будет время покопаться в конфиге, через пару недель выложу на wincmd.ru.

Версия от 07.11.24
Ответить