View previous topic :: View next topic |
Author |
Message |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 325
|
(Separately) Posted: Tue Nov 05, 2024 07:04 Post subject: |
|
|
Вообще, математический расчет времени, по моему мнению, должен быть по правилам математического округления, то есть в экселе такой (скопировать и вставить в эксель в A1):
Code: | 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 |
По порядку: вначале округляем миллисекунды в секунды (до целых), далее получаем часы, минуты и секунды. Разный расчет может быть только на этапе округления (в самом начале), Думаю, тут только по правилам математики нужно, остальные отбрасывания или округлвверх дадут не совсем верные варианты. |
|
Back to top |
|
 |
Skif_off
Joined: 28 Nov 2012 Posts: 1244
|
(Separately) Posted: Tue Nov 05, 2024 11:17 Post subject: |
|
|
AkulaBig
Это всё общие/гипотетические рассуждения Покажите пример, когда получение часов, минут и секунд из миллисекунд дадут более точный результат, чем получение секунд и уже из секунд - часов и минут.
Ну и про Unix-time давайте не забывать, там секунды и горя не знают.
Monarch-LFV
Это всё понятно, тут дело в другом, как понимаю: учитывать миллисекунды и округлять или же отбрасывать их. Какие-то программы идут по первому пути, какие-то по второму, что вносит некоторую путаницу: во втором случае всегда знаешь, что у тебя может быть ещё чуток длины, а во втором может быть больше, а может быть и меньше. Фиг знает, насколько длина плюс/минус секунда критична...
Loopback, собственно, принял компромисное решение
Loopback wrote: | Верну исходный вариант с обрезкой по умолчанию и добавлю опцию, как округлять. Кому под вывод какой программы нужно подгонять - пусть и меняет... |
или терпит ) |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1529
|
(Separately) Posted: Tue Nov 05, 2024 11:53 Post subject: |
|
|
Skif_off wrote: | Это всё понятно, тут дело в другом, как понимаю: учитывать миллисекунды и округлять или же отбрасывать их. Какие-то программы идут по первому пути, какие-то по второму, что вносит некоторую путаницу: во втором случае всегда знаешь, что у тебя может быть ещё чуток длины, а во втором может быть больше, а может быть и меньше. |
Верно, нет никакой разницы, как считать. Можно начинать с часов, можно с секунд, результат будет тот же. Разница в результате плюс-минус одна секунда идёт исключительно от метода учёта миллисекунд. Либо отсекаем, либо округляем, во втором случае может появиться дополнительная секунда. Алгоритм-то простейший, не знаю, что тут можно столько обсуждать.
В любом случае, просто сделаю метод округления опциональным. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 782
|
(Separately) Posted: Tue Nov 05, 2024 12:29 Post subject: |
|
|
AkulaBig wrote: | Неудачный пример получился. foobar в свойствах показывает только с миллисекундами. Я другого вида отображения и в стандартной версии не нашел. А в линейке показывает округленный до секунда. И вопрос остается. |
Наоборот, удачный пример, как раз то, что нам нужно. В списке воспроизведения foobar2000 округляет до секунды, а в свойствах файла - показывает точную информацию о времени без округления:
Quote: | 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 миллисекунд.
Что с этим остатком делать? Да что хотите, то с ним и делаете - вам решать
Лирическое отступление:
Меня сейчас больше интересует другое. Если открыть этот файл в плагине TCMediaInfo, то получается Duration, hh:mm:ss.fff = 00:08:16.526. Разница в две единицы! (О, ужас ужасный! ) Сначала не понял. Глянул в MediaInfo, а там есть такая строчка - Frame rate: 38.281 FPS (1152 SPF). Перемножаем 38281 × 1152 = 44 099 712. Т.е. 44099,712 сэмплов в секунду. Делим общее количество сэмплов 21896687 на 44099,712 и получаем 496,52675736295057890627494347355
Вывод:
Короче, чувствую, что занимаюсь чем-то не тем. А вы уверены, что оно вам надо?
Добавлено спустя 19 минут:
Да, забыл написать, что MediaInfo показывает:
Code: | 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%) |
Т.е. без округления, что еще раз подчеркивает разницу в предпочтениях. Имхо, это даже хорошо, потому что видя эту разницу в разных местах (проигрывателях, свойствах файла и т.д.) сразу можно понять, что у этого файла есть спорный остаток. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 334
|
(Separately) Posted: Tue Nov 05, 2024 16:18 Post subject: |
|
|
Orion9 wrote: |
Поскольку Sample rate = 44100 Hz (сэмплов в секуду), берем 21896687 и делим на 44100. Получаем 496,52351473922902494331065759637, т.е. 496 секунд (8 минут, 16 секунд) и остаток, который округлился до 524 миллисекунд.
|
Познавательный пост у вас получился. Я со своей стороны тоже поразбирался и вот что получается.
Основная фишка в том, что секунды, в отличии от часов и минут, могут быть дробными. Поэтому единственно правильный формат продолжительности 11:11:11.111. Очень удобный онлайн-преобразователь для этого https://www.convert-me.com/ru/convert/time/millisecond/millisecond-to-dhms.html?u=millisecond&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 все по той-же ссылке. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 782
|
(Separately) Posted: Tue Nov 05, 2024 19:15 Post subject: |
|
|
AkulaBig
Если вам интересно, то можете как-нибудь почитать о том, как оцифровывают и кодируют звук. Помню, несколько лет назад я немного окунулся в эту тему, пытаясь понять, как работает ReplayGain и почему при его использовании (или использовании MP3Gain) не происходит потери качества. Но что-то лезть в эти дебри меня больше как-то не тянет
Хотел найти ту статью, которую я тогда читал, но так и не нашел. Но было что-то примерно этого (если кому-то интересно):
https://habr.com/ru/articles/503786/
https://habr.com/ru/articles/103635/
А холивар на счет последней секунды нет смысла устриавать - пусть большие дядьки сами там решают. Как по мне, то в последней секунде все-равно ничего интересного не бывает  |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 334
|
(Separately) Posted: Tue Nov 05, 2024 20:05 Post subject: |
|
|
Orion9 wrote: |
Если вам интересно, то можете как-нибудь почитать о том, как оцифровывают и кодируют звук. |
Меня интересует одинаковое отображение параметров для всех программ и типов файлов, но не получится. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 782
|
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 334
|
(Separately) Posted: Wed Nov 06, 2024 13:21 Post subject: |
|
|
Orion9 wrote: |
Вынужден согласиться - не получится. Это же типичный холивар "с какого конца яйцо лучше бить". |
Вы меня не поняли. Дело не в этом. Я выше писал, что файлы ogg и opus (возможно и другие, я пишу только про которые я тестировал) показывают продолжительность в Вин Свойства другие значения. То-есть если настроить, чтобы mp3 отображались правильно, то эти расширения показываются неправильно. И наоборот. То-есть невозможно настроить, чтобы все расширения показывались в одном стиле.
Добавлено спустя 6 минут:
А вообще может все-же мы чего-то до конца не понимаем. Я очень сомневаюсь, что мелко-мягкие используют неправильный алгоритм. Но, конечно, это дискуссионный вопрос. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 782
|
(Separately) Posted: Thu Nov 07, 2024 00:17 Post subject: |
|
|
AkulaBig wrote: | Вы меня не поняли. Дело не в этом. Я выше писал, что файлы ogg и opus (возможно и другие, я пишу только про которые я тестировал) показывают продолжительность в Вин Свойства другие значения. То-есть если настроить, чтобы mp3 отображались правильно, то эти расширения показываются неправильно. И наоборот. То-есть невозможно настроить, чтобы все расширения показывались в одном стиле. |
Я и правда ничего не понял
Но если у вас много коротких аудио (видео) файлов, где последняя секунда играет какую-то роль, то можно сделать дополнительный набор колонок, где миллисекунды будут вынесены в отдельный соседний ряд либо будут отображаться как-то по-другому. Можно сделать еще подсветку файлов в обычном наборе, т.е. раскрасить файлы, у которых > 500 миллисекунд в остатке.
В общем, есть варианты ) |
|
Back to top |
|
 |
Skif_off
Joined: 28 Nov 2012 Posts: 1244
|
(Separately) Posted: Thu Nov 07, 2024 02:30 Post subject: |
|
|
AkulaBig wrote: | Свойства Windows показывает неправильно, MediaInfo показывает неправильно. ... чтобы mp3 отображались правильно |
Не бывает "правильно" или "неправильно", есть два подхода: одни приложения традиционно отбрасывают миллисекунды, другие традиционно округляют.
Если найдёте пример программы, которая округляет, например, по десятой доле секунды, отбрасывая сотые и тысячные, тогда можно поговорить о "неправильно".
P.S. MediaInfo и как минимум WinXP выкатили плюс/минус 20 лет назад и вряд ли регулярно переделывали туда-сюда отображение длятельности, тут либо сделать как удобнее для себя в файловом менеджере, либо смириться стойко и мужественно переносить суровую реальность бытия, либо писать письма в Спортлото MediaArea и MS. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 782
|
(Separately) Posted: Thu Nov 07, 2024 12:47 Post subject: |
|
|
Quote: | Я очень сомневаюсь, что мелко-мягкие используют неправильный алгоритм. |
Ну, на мелко-мягких я ориентироваться не стал бы. У них расширение файла в Проводнике не показывается по-умолчанию, а вы хотите, чтобы они миллисекунды в свойствах файла отображали что ли?
Ну вот открыл сейчас вкладку "Подробно", а там продолжительность - 0:08:16. Ну как же так? Взяли и съели 524 миллисекунды. А ведь это целых 23108 сэмплов! А у меня, между прочим, каждый сэмпл на счету
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
Можно продолжать и продолжать... "Округлить нельзя обрезать", - подумал Гулливер, вставляя запятую  |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 334
|
(Separately) Posted: Thu Nov 07, 2024 13:56 Post subject: |
|
|
Orion9 wrote: | Я и правда ничего не понял
|
Добавлено спустя 10 минут:
Skif_off wrote: | Не бывает "правильно" или "неправильно", есть два подхода |
Не бывает разных подходов в алгебре. Алгебра построена на аксиомах, а не на теоремах.
Skif_off wrote: |
Если найдёте пример программы, которая округляет, например, по десятой доле секунды, отбрасывая сотые и тысячные, тогда можно поговорить о "неправильно".
|
Я выше выложил калькулятор. Выбирайте там понравившееся значимое число и увидите результат. Он всегда округляется.
И я-бы настаивал на правильном варианте, если-бы файлы ogg и opus не показывали другие значения. То-есть нельзя выбрать один правильный вариант. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 782
|
(Separately) Posted: Thu Nov 07, 2024 19:36 Post subject: |
|
|
AkulaBig, теперь понял. Как сейчас модно говорить: для форматов opus и ogg мелко-мягкие использую бодипозитивный таймпозитивный подход
То, что у них в рамках одной задачи нет единого подхода "что делать с остатком миллисекунд", только добавляет в холивар. Но даже если такой поход и существовал, эталоном он не стал бы. Имхо, все-равно нашлись бы программы, которые по-своему округляли или обрезали этот остаток.
Я сконвертировал вышеуказанный 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, должны уметь раскладывать все по полочкам с максимальным объемом информации - секунды, миллисекунды, сэмплы, фреймы и т.д. - что они и делают. А формат вывода остается за пользователем.
Только выбор, как оказалось, этот не такой простой  |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1529
|
(Separately) Posted: Thu Nov 07, 2024 19:38 Post subject: |
|
|
Добавил опцию TimingRounding, управляющую округлением в TimingFormat. Три варианта, крути-верти
Значения: 0 - метод по умолчанию (округляет до меньшего, как в MediaInfo), 1 - округление до ближайшего, 2 - округление до большего (ну мало ли кому и такое понадобится). Такие же значения можно передавать напрямую в TimingFormat третьим параметром. В общем, всё есть в приложенной или онлайн справке.
Если будет время покопаться в конфиге, через пару недель выложу на wincmd.ru.
Версия от 07.11.24 |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|