Страница 57 из 74

Добавлено: Пн июл 29, 2024 14:05
Loopback
Destiny писал(а):Вы тогда для WLX вариации плагина сможете подключить поддержку действий для
нажатых клавиш?
Можно добавлять горячие клавиши, если есть какая-то необходимость.

Добавлено: Ср сен 18, 2024 10:26
AkulaBig
Здравствуйте. Плагин в режиме показа длительности проигрывания hh:mm:ss секунды показывает без округления. Насколько я понимаю, это можно исправить скриптом. Как правильно записать этот скрипт и можно-ли это сделать в оф версии плагина?

Добавлено: Ср сен 18, 2024 11:41
Loopback
День добрый.

А почему он вообще должен секунды округлять? И до чего округлять?

Да, и "режим показа длительности" - это же wdx-колонка имеется в виду или что?

Добавлено: Чт сен 19, 2024 06:50
AkulaBig
Округлять миллисекунды до секунд при формате без миллисекунд. То-есть если длительность миллисекунд более 500, то при показе без миллисекунд, секунды должны округляться, по правилам математики, в большую сторону. Я не мог понять, почему длительность при сравнении с anytag.wdx отличается на 1 сек. Выбрал формат с миллисекундами и все стало ясно. Плагин миллисекунды просто отбрасывает при показе секунд в формате без миллисекунд, а должен учитывать.

Добавлено: Чт сен 19, 2024 12:02
Loopback
Теперь ясно. Да, это баг в функции TimingFormat.

Вот исправленная версия.

Добавлено: Чт сен 19, 2024 14:45
AkulaBig
Спасибо большое. Совсем другое дело.

Добавлено: Пт сен 20, 2024 00:34
Loopback
Недоглядел в предыдущей версии, округление неправильно работало при граничных значениях немного меньших 500мс.

Версия от 20.09.24

Добавлено: Пт сен 20, 2024 05:14
AkulaBig
Loopback писал(а):Недоглядел в предыдущей версии, округление неправильно работало при граничных значениях немного меньших 500мс.
Обратил внимание, но тревожить уже не стал :oops:

Добавлено: Вс сен 22, 2024 11:54
AkulaBig
Я извиняюсь, но если возможно, просил-бы вас переделать и скрипты продолжительности:
<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>
А то получается стандартные форматы показывает правильно, а скрипты неправильно. Понятно, что вы можете сказать, исправьте это сами. Но лично мне не понятно, можно-ли вообще написать скрипт с правильным алгоритмом.

Добавлено: Вс сен 22, 2024 16:35
Loopback
В принципе эти скрипты сделаны для демонстрации и практической пользы не имеют.

Ок, вот вариант учитывающий округление:

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

			<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>

Добавлено: Вс сен 22, 2024 17:58
AkulaBig
Loopback писал(а):В принципе эти скрипты сделаны для демонстрации и практической пользы не имеют.
Ну да, это понятно.
Loopback писал(а): Ок, вот вариант учитывающий округление:
Спасибо большое.
У нас на руборде разгорелся жесточайший спор об округлении до секунд продолжительности типа 02:36,499. Я считаю, что правильно как у вас сейчас 02:37. Также в плагине anytag.wdx. Но в некоторых плагинах 02:36. Вот теперь можно по формуле пересчитать, сколько-же получится.

Добавлено: Вс сен 22, 2024 18:57
Loopback
Плагин округляет самым распространенным методом "до ближайшего целого": если дробная часть меньше 0.5 - то в минус, если больше или равно 0.5 - в плюс. Значение 02:36,499 по этому методу округляется до 02:36, я не знаю откуда взялось 2:37.

Миллисекунда - это тысячная доля секунды, поэтому число секунд представляем как десятичную дробь 156.499. Округление этого числа до целого даст 156 -> 02:36.

К слову с кодом перемудрил, всё еще проще, отделять дробную часть вообще ни к чему:

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

         <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>
Но тут, конечно, многое зависит от предпочтений, округлять можно вверх, вниз (как по-сути и было раньше), банковский вариант и еще всякая экзотика, но во всех языках с которыми я работаю округление идет по этому правилу.

Добавлено: Вс сен 22, 2024 19:11
AkulaBig
Проверил первый вариант. По нему получается 02:36. А стандартный вывод в плагине выдает 02:37. Сейчас второй вариант проверю.

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

И по второму варианту получилось 2:36. А не могли-бы вы внести изменения в плагин, чтобы стандартные форматы, формируемые плагином, соответствовали скриптам?

Добавлено: Вс сен 22, 2024 19:53
Loopback
AkulaBig
У меня выдает 2:36. Версия от 20 сентября, MediaInfo 24.06, единицы кроме пользовательского скрипта без изменений.

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

<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>

Добавлено: Вс сен 22, 2024 20:08
AkulaBig
Блин, извиняюсь. Мой косяк. Я потестил исправления от 20.09, а сборку собрал с изменениями от 19.09. Все отлично. Спасибо большое.