View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Mon Jul 29, 2024 15:05 Post subject: |
|
|
Destiny wrote: | Вы тогда для WLX вариации плагина сможете подключить поддержку действий для
нажатых клавиш? |
Можно добавлять горячие клавиши, если есть какая-то необходимость. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Wed Sep 18, 2024 11:26 Post subject: |
|
|
Здравствуйте. Плагин в режиме показа длительности проигрывания hh:mm:ss секунды показывает без округления. Насколько я понимаю, это можно исправить скриптом. Как правильно записать этот скрипт и можно-ли это сделать в оф версии плагина? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Wed Sep 18, 2024 12:41 Post subject: |
|
|
День добрый.
А почему он вообще должен секунды округлять? И до чего округлять?
Да, и "режим показа длительности" - это же wdx-колонка имеется в виду или что? |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Thu Sep 19, 2024 07:50 Post subject: |
|
|
Округлять миллисекунды до секунд при формате без миллисекунд. То-есть если длительность миллисекунд более 500, то при показе без миллисекунд, секунды должны округляться, по правилам математики, в большую сторону. Я не мог понять, почему длительность при сравнении с anytag.wdx отличается на 1 сек. Выбрал формат с миллисекундами и все стало ясно. Плагин миллисекунды просто отбрасывает при показе секунд в формате без миллисекунд, а должен учитывать. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Thu Sep 19, 2024 13:02 Post subject: |
|
|
Теперь ясно. Да, это баг в функции TimingFormat.
Вот исправленная версия. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Thu Sep 19, 2024 15:45 Post subject: |
|
|
Спасибо большое. Совсем другое дело. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Fri Sep 20, 2024 01:34 Post subject: |
|
|
Недоглядел в предыдущей версии, округление неправильно работало при граничных значениях немного меньших 500мс.
Версия от 20.09.24 |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Fri Sep 20, 2024 06:14 Post subject: |
|
|
Loopback wrote: | Недоглядел в предыдущей версии, округление неправильно работало при граничных значениях немного меньших 500мс.
|
Обратил внимание, но тревожить уже не стал  |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Sun Sep 22, 2024 12:54 Post subject: |
|
|
Я извиняюсь, но если возможно, просил-бы вас переделать и скрипты продолжительности:
<column name="Duration">
<unit name="hh:mm:ss" type="script">Output:=TimingFormat('%hh:%mm:%ss', Duration);</unit>
<unit name="hh:mm:ss.fff" type="script">Output:=TimingFormat('%hh:%mm:%ss.%fff', Duration);</unit>
<unit name="s" type="script">Output:=Trunc(Duration/1000);</unit>
<unit name="z">Duration</unit>
<unit name="Custom" type="script">
<![CDATA[
// this is an example of using scripts in columns
Output:='';
if Not StrIsNumber(Duration) then Exit;
nDur := Number(Duration);
Hour:=Trunc(nDur/3600000);
Min:=Trunc((nDur-Hour*3600000)/60000);
Sec:=Trunc((nDur-Hour*3600000-Min*60000)/1000);
if (Hour <> 0) then Output:=String(Hour)+' hr ';
if (Min <> 0) then Output:=Output+String(Min) +' min ';
if (Sec <> 0) then Output:=Output+String(Sec) +' sec ';
]]>
</unit>
</column>
А то получается стандартные форматы показывает правильно, а скрипты неправильно. Понятно, что вы можете сказать, исправьте это сами. Но лично мне не понятно, можно-ли вообще написать скрипт с правильным алгоритмом. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Sun Sep 22, 2024 17:35 Post subject: |
|
|
В принципе эти скрипты сделаны для демонстрации и практической пользы не имеют.
Ок, вот вариант учитывающий округление:
Code: |
<unit name="s" type="script">SF:=Number(Duration)/1000;Output:=Integer(SF) + Round(Frac(SF));</unit>
<unit name="z">Duration</unit>
<unit name="Custom" type="script">
<![CDATA[
// this is an example of using scripts in columns
Output:='';
if Not StrIsNumber(Duration) then Exit;
SF:=Number(Duration)/1000;
// whole seconds + rounded MS
Sec:=Integer(SF) + Round(Frac(SF));
Min:=Integer(Sec/60);
Sec:=Sec-Min*60;
Hour:=Integer(Min/60);
Min:=Min-Hour*60;
if (Hour <> 0) then Output:=String(Hour)+' hr ';
if (Min <> 0) then Output:=Output+String(Min) +' min ';
if (Sec <> 0) then Output:=Output+String(Sec) +' sec ';
]]>
</unit>
|
|
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Sun Sep 22, 2024 18:58 Post subject: |
|
|
Loopback wrote: | В принципе эти скрипты сделаны для демонстрации и практической пользы не имеют.
|
Ну да, это понятно.
Loopback wrote: |
Ок, вот вариант учитывающий округление:
|
Спасибо большое.
У нас на руборде разгорелся жесточайший спор об округлении до секунд продолжительности типа 02:36,499. Я считаю, что правильно как у вас сейчас 02:37. Также в плагине anytag.wdx. Но в некоторых плагинах 02:36. Вот теперь можно по формуле пересчитать, сколько-же получится. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Sun Sep 22, 2024 19:57 Post subject: |
|
|
Плагин округляет самым распространенным методом "до ближайшего целого": если дробная часть меньше 0.5 - то в минус, если больше или равно 0.5 - в плюс. Значение 02:36,499 по этому методу округляется до 02:36, я не знаю откуда взялось 2:37.
Миллисекунда - это тысячная доля секунды, поэтому число секунд представляем как десятичную дробь 156.499. Округление этого числа до целого даст 156 -> 02:36.
К слову с кодом перемудрил, всё еще проще, отделять дробную часть вообще ни к чему:
Code: |
<unit name="s" type="script">Output:=Round(Number(Duration)/1000);</unit>
<unit name="z">Duration</unit>
<unit name="Custom" type="script">
<![CDATA[
// this is an example of using scripts in columns
Output:='';
if Not StrIsNumber(Duration) then Exit;
Sec:=Round(Number(Duration)/1000);
Min:=Integer(Sec/60);
Sec:=Sec-Min*60;
Hour:=Integer(Min/60);
Min:=Min-Hour*60;
if (Hour <> 0) then Output:=String(Hour)+' hr ';
if (Min <> 0) then Output:=Output+String(Min) +' min ';
if (Sec <> 0) then Output:=Output+String(Sec) +' sec ';
]]>
</unit>
|
Но тут, конечно, многое зависит от предпочтений, округлять можно вверх, вниз (как по-сути и было раньше), банковский вариант и еще всякая экзотика, но во всех языках с которыми я работаю округление идет по этому правилу. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Sun Sep 22, 2024 20:04 Post subject: |
|
|
Проверил первый вариант. По нему получается 02:36. А стандартный вывод в плагине выдает 02:37. Сейчас второй вариант проверю.
Добавлено спустя 8 минут:
И по второму варианту получилось 2:36. А не могли-бы вы внести изменения в плагин, чтобы стандартные форматы, формируемые плагином, соответствовали скриптам? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Sun Sep 22, 2024 20:53 Post subject: |
|
|
AkulaBig
У меня выдает 2:36. Версия от 20 сентября, MediaInfo 24.06, единицы кроме пользовательского скрипта без изменений.
Code: |
<unit name="hh:mm:ss" type="script">Output:=TimingFormat('%hh:%mm:%ss', Duration);</unit>
<unit name="hh:mm:ss.fff" type="script">Output:=TimingFormat('%hh:%mm:%ss.%fff', Duration);</unit>
|
|
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 367
|
(Separately) Posted: Sun Sep 22, 2024 21:08 Post subject: |
|
|
Блин, извиняюсь. Мой косяк. Я потестил исправления от 20.09, а сборку собрал с изменениями от 19.09. Все отлично. Спасибо большое. |
|
Back to top |
|
 |
|