Можно добавлять горячие клавиши, если есть какая-то необходимость.Destiny писал(а):Вы тогда для WLX вариации плагина сможете подключить поддержку действий для
нажатых клавиш?
[wlx/wdx] TCMediaInfo
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Округлять миллисекунды до секунд при формате без миллисекунд. То-есть если длительность миллисекунд более 500, то при показе без миллисекунд, секунды должны округляться, по правилам математики, в большую сторону. Я не мог понять, почему длительность при сравнении с anytag.wdx отличается на 1 сек. Выбрал формат с миллисекундами и все стало ясно. Плагин миллисекунды просто отбрасывает при показе секунд в формате без миллисекунд, а должен учитывать.
Недоглядел в предыдущей версии, округление неправильно работало при граничных значениях немного меньших 500мс.
Версия от 20.09.24
Версия от 20.09.24
Я извиняюсь, но если возможно, просил-бы вас переделать и скрипты продолжительности:
<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>
А то получается стандартные форматы показывает правильно, а скрипты неправильно. Понятно, что вы можете сказать, исправьте это сами. Но лично мне не понятно, можно-ли вообще написать скрипт с правильным алгоритмом.
<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>
А то получается стандартные форматы показывает правильно, а скрипты неправильно. Понятно, что вы можете сказать, исправьте это сами. Но лично мне не понятно, можно-ли вообще написать скрипт с правильным алгоритмом.
В принципе эти скрипты сделаны для демонстрации и практической пользы не имеют.
Ок, вот вариант учитывающий округление:
Ок, вот вариант учитывающий округление:
Код: Выделить всё
<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>
Ну да, это понятно.Loopback писал(а):В принципе эти скрипты сделаны для демонстрации и практической пользы не имеют.
Спасибо большое.Loopback писал(а): Ок, вот вариант учитывающий округление:
У нас на руборде разгорелся жесточайший спор об округлении до секунд продолжительности типа 02:36,499. Я считаю, что правильно как у вас сейчас 02:37. Также в плагине anytag.wdx. Но в некоторых плагинах 02:36. Вот теперь можно по формуле пересчитать, сколько-же получится.
Плагин округляет самым распространенным методом "до ближайшего целого": если дробная часть меньше 0.5 - то в минус, если больше или равно 0.5 - в плюс. Значение 02:36,499 по этому методу округляется до 02:36, я не знаю откуда взялось 2:37.
Миллисекунда - это тысячная доля секунды, поэтому число секунд представляем как десятичную дробь 156.499. Округление этого числа до целого даст 156 -> 02:36.
К слову с кодом перемудрил, всё еще проще, отделять дробную часть вообще ни к чему:
Но тут, конечно, многое зависит от предпочтений, округлять можно вверх, вниз (как по-сути и было раньше), банковский вариант и еще всякая экзотика, но во всех языках с которыми я работаю округление идет по этому правилу.
Миллисекунда - это тысячная доля секунды, поэтому число секунд представляем как десятичную дробь 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>
Проверил первый вариант. По нему получается 02:36. А стандартный вывод в плагине выдает 02:37. Сейчас второй вариант проверю.
Добавлено спустя 8 минут:
И по второму варианту получилось 2:36. А не могли-бы вы внести изменения в плагин, чтобы стандартные форматы, формируемые плагином, соответствовали скриптам?
Добавлено спустя 8 минут:
И по второму варианту получилось 2:36. А не могли-бы вы внести изменения в плагин, чтобы стандартные форматы, формируемые плагином, соответствовали скриптам?
AkulaBig
У меня выдает 2:36. Версия от 20 сентября, MediaInfo 24.06, единицы кроме пользовательского скрипта без изменений.
У меня выдает 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>