Страница 49 из 74
Добавлено: Ср июн 07, 2023 11:54
790
Duration в контент-варианте плагина, запутался с нулями. Заменил h, mm, sec на ":"
Код: Выделить всё
<column name="Duration">
<unit name="hh:mm:ss" type="script">Output:=TimingFormat('%h:%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)+':';
if (Min <> 0) then Output:=Output+String(Min)+':';
if (Sec <> 0) then Output:=Output+String(Sec);
]]>
</unit>
</column>
Хотелось бы использовать пользовательский режим, чтобы продолжительность трека отображалась в виде 0:00:00 (если есть "часы") или 0:00 (если нет "часов") или 00 (если нет "минут"). Но получается, что если продолжительность 10:08, то будет показано как 10:8, а если 1:00:05, то будет 1:5
Можно ли написать, например:
Код: Выделить всё
if (Hour <> 0) then Output:=String(Hour)+':';
if (Min = 0) or (Min > 9) then Output:=Output+String(Min)+':';
if (Min > 0) and (Min < 10) then Output:=Output+'0'+String(Min)+':';
if (Sec > 9) then Output:=Output+String(Sec) else Output:=Output+'0'+String(Sec);
Вроде, работает. Наверно, есть какие-нибудь решения попроще?
Добавлено: Ср июн 07, 2023 22:11
Loopback
790
Для простой работы с ведущими нулями есть встроенная функция TimingFormat, но напрямую такое она не решит. Для этого в библиотеку функций "Common" я добавлял скриптовую функцию FormatDuration, которая делает требуемое, кроме секунд без минут (мне кажется, что тогда теряется ощущение, что это именно время). Её можно использовать так:
Код: Выделить всё
<column name="Duration">
...
<unit name="Custom" type="script">
<![CDATA[
uses 'Common';
Output:=FormatDuration(Duration);
]]>
</unit>
</column>
Чтобы добиться одиночных секунд, надо поменять код функции FormatDuration на такой:
Код: Выделить всё
// automatically format duration
function FormatDuration(nDuration);
begin
Result:='';
If not StrIsNumber(nDuration) then Exit;
nDuration := Number(nDuration);
if nDuration > 3600000 then
Result:=TimingFormat('%hh:%mm:%ss', nDuration)
else if nDuration < 60000 then
Result:=TimingFormat('%ss', nDuration)
else
Result:=TimingFormat('%mm:%ss', nDuration);
end;
Добавлено: Чт июн 08, 2023 01:24
790
Спасибо!!
Loopback писал(а):
мне кажется, что тогда теряется ощущение, что это именно время
Всё верно! Да и файлов таких у себя не нашёл (в "серьёзных" форматах аудио).
Только убрал из TimingFormat одну h, чтобы не было ведущего 0 в "часах".
Почему-то format DTS-ES (Matrix) и DTS 96/24 отображаются как простой DTS и 6ch. (а там 7, потому ещё Cb - центральный задний) в контекст-плагине, а в листерном всё нормально. (С Dolby EX, наверно, такая же ситуация будет, но мне не проверить - нет таких)
Код: Выделить всё
ID : 2
Format : DTS ES
Format/Info : Digital Theater Systems
Commercial name : DTS-ES Matrix
Codec ID : A_DTS
....
Channel(s) : 6 channels
Channel(s)_Original : 7 channels
ChannelLayout_Original : C L R Ls Rs Cb LFE
Sampling rate : 48.0 kHz
Bit depth : 24 bits
Добавлено: Чт июн 08, 2023 22:17
Loopback
790
Данные одного поля никак не могут быть разными в wdx/wlx плагинах, у них один источник данных - библиотека MediaInfo. Если что-то различается, значит это разные поля (в частности, следует обращать внимание на поля с суффиксами /string, /string1 и т.д., они могут существенно различаться), либо применена какая-то обработка скриптом (но единственное что есть в конфигурации, связанное с каналами - функция FormatChannels, которая просто добавляет локализованное слово "каналов" к их числу).
Переключите в WLX режим просмотра в "Вывод без обработки", найдите имя поля, которое выводит нужную информацию, и сравните с именем поля, данные из которого выводится в колонку.
Добавлено: Пт июн 09, 2023 13:54
790
Спасибо, всё получилось.
В листере:
Код: Выделить всё
Format : DTS
Format/String : DTS ES
...
Format_Commercial : DTS-ES Matrix
Format_Commercial_IfAny : DTS-ES Matrix
...
Format_AdditionalFeatures : ES
...
Channel(s) : 6
Channel(s)_Original : 7
Добавил в колонки:
Код: Выделить всё
<source name="AudioChannelsOriginal" field="Channel(s)_Original" context="Audio"/>
<source name="AudioFormatAdditionalFeatures" field="Format_AdditionalFeatures" context="Audio"/>
<source name="AudioFormatString" field="Format/String" context="Audio"/>
......
<column name="Audio Additional string">AudioFormatString</column>
<column name="Audio Additional Features">AudioFormatAdditionalFeatures</column>
<column name="Channels Original" coltype="ft_numeric_32">AudioChannelsOriginal</column>
Теперь пытаюсь разобраться, чтобы при отсутствии/наличии данных в 'Channel(s)_Original' использовал/не использовал данные из 'Channel(s)'
Что такое Format_Settings_Mode : 16 ?
Я не понимаю, но это не BitDepth
Добавлено: Пт июн 09, 2023 21:51
Loopback
790 писал(а): чтобы при отсутствии/наличии данных в 'Channel(s)_Original' использовал/не использовал данные из 'Channel(s)'
Сделать скриптовую колонку, с проверкой на пустой результат. Как-то примерно так:
Код: Выделить всё
Output:=Get('Channel(s)_Original', 'Audio');
if Output = '' then Output:=Get('Channel(s)', 'Audio');
790 писал(а):Что такое Format_Settings_Mode : 16 ?
Не знаю, это надо адресовать автору MediaInfo
Вроде это какие-то специфические настройки кодека. В теме по этому полю было обсуждение. Для mp3 тут может выводиться, например, joint stereo, что имеет смысл. Что такое 16 - понятия не имею.
Добавлено: Вс июн 11, 2023 23:28
790
Loopback писал(а):
Сделать скриптовую колонку, с проверкой на пустой результат. Как-то примерно так:
Код: Выделить всё
Output:=Get('Channel(s)_Original', 'Audio');
if Output = '' then Output:=Get('Channel(s)', 'Audio');
"Как-то примерно так" не получилось, не врубился. В общем, скопировал скрипт из параметра "Frame Size" и заменил на своё:
Код: Выделить всё
<column name="Channels" type="script"><![CDATA[if (AudioChannelsOriginal = '') then Output:=AudioChannels else Output:=AudioChannelsOriginal;]]></column>
По аналогии ещё добавил:
Код: Выделить всё
<column name="Sampling Rate" coltype="ft_numeric_floating">
<unit name="KHz" type="script"><![CDATA[if (AudioSamplingRate <> '') then Output:=Format('%f', AudioSamplingRate/1000);]]></unit>
</column>
...
<column name="Resolution" type="script"><![CDATA[if (AudioResolution = '') then Output:='-' else Output:=AudioResolution;]]></column>
В общем, человеку, воспитанному на 'Atari Basic', так понятней

Спасибо за науку!
Добавлено: Пн июн 12, 2023 15:53
Loopback
790
Да, что-то я начудил тут, Get это же только для листерной части. У вас всё правильно

Добавлено: Ср июн 28, 2023 20:15
790
Код: Выделить всё
allprops.txt:
Audio_Language_List: Audio languages in this file separated by /
Language: Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn)
Во втором параметре ни слова про /, однако, он там всё-таки есть?
Во втором source есть stream="*"
Код: Выделить всё
<source name="AudioLangCode" field="Language" context="Audio" stream="*"/>
без * показывает только код первого языка. (а их бывает больше 2-х)
В общем, как сделать, чтобы при пустом значении Language и AudioStreamCount > 1, не рисовались пустые слэши / / , а было написано просто число аудио-потоков; а при наличии AudioLangCode показывались сами эти "коды", даже если код один?
Типа так:
Код: Выделить всё
<column name="Audio Language Code" type="script">
<![CDATA[if (AudioLangCode = '') then
begin
if (AudioStreamCount < 2) then Output:='' else Output:=AudioStreamCount;
end
else Output:=AudioLangCode
]]>
</column>
но так не получается, потому что, видимо, значение AudioLangCode не пустое, там эти слэши мешают чтоли?
Добавлено: Пт июн 30, 2023 22:03
Loopback
790 писал(а):Во втором параметре ни слова про /, однако, он там всё-таки есть?
Это разные вещи. Эти слеши (или другие символы, заданные в ключе MultiSeparator) добавляет сам плагин, при использовании вывода из всех потоков с помощью "*" - нужно же их чем-то разделять.
790 писал(а):В общем, как сделать, чтобы при пустом значении Language и AudioStreamCount > 1, не рисовались пустые слэши / / , а было написано просто число аудио-потоков; а при наличии AudioLangCode показывались сами эти "коды", даже если код один?
Если число потоков больше 1, то Language одного потока может быть пустой, а другой нет. По идее об отсутствии нужно судить только по факту, когда пустые все. Не знаю, может надо было бы изначально возвращать пустую строку, если все составляющие пустые. С другой стороны пусть это не очень красиво выглядит, зато видно, что значений несколько и они пустые.
Думаю, в качестве решения, пусть и немного корявого, можно заменить пробелы и слеши на пустую строку и проверить результат, если он пустой - возвращать число потоков.
Код: Выделить всё
<column name="Audio Language Code" type="script">
<![CDATA[
TestStr := StrReplace(AudioLangCode, '/', '');
TestStr := StrReplace(TestStr, ' ', '');
if (TestStr = '') then
begin
if (AudioStreamCount < 2) then Output:='' else Output:=AudioStreamCount;
end
else Output:=AudioLangCode;
]]>
</column>
Добавлено: Сб июл 01, 2023 01:51
790
Да, так работает! Правда не всегда влезает в строку, если языков в файле много.
Так что я сделел так, удалил stream="*" вообще и далее:
Код: Выделить всё
<column name="Audio Language Code" type="script">
<![CDATA[if (AudioLangCode = '') then
begin
if (AudioStreamCount < 2) then Output:='' else Output:=AudioStreamCount;
end
else
begin
if (AudioStreamCount<2) then Output:=AudioLangCode else Output:=AudioLangCode+' +'+String(AudioStreamCount-1);
end
]]>
</column>
и так оно работает:
Если там нет кодов и 1 аудио-поток, то будет пусто;
Если там нет кодов, а потоков >1, то будет число потоков;
Если там 1 код и 1 поток, то будет 1 код;
Если там 1 код и потоков >1, то будет первый код +N кодов и я буду знать, что надо глянуть в листере, что там ещё за языки и/или форматы звука.
Мой телек не позволяет мне переключать аудио-дорожки, и хотя, как правило, первым идёт "ru", зачастую приходится удалять ненужные.
Добавлено: Сб сен 02, 2023 18:14
jentoso
Использую кнопку для просмотра в Lister
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_EXE%
%P%N /S=L:Ptcmediainfo
WCMICONS.DLL,414
Просмотр MediaInfo Plugin
0
-1
Сам плагин настроен так, чтобы не хватал все файлы, а только по требованию
Код: Выделить всё
10=%COMMANDER_PATH%\plugins\WDX\TCMediaInfo\TCMediaInfo.wlx
10_detect="ext="XXX""
Почему-то в TC x64 данная кнопка не срабатывает, просто открывается внутренний Lister.
P.S. Еще заметил, что после закрытия Lister, процессы TOTALCMD.EXE и TOTALCMD64.EXE остаются в памяти. Данная проблема была в плагине Autorun, проблему решил.
Добавлено: Вс сен 03, 2023 21:28
Loopback
jentoso писал(а):Почему-то в TC x64 данная кнопка не срабатывает, просто открывается внутренний Lister.
У меня и в 32-битном не работал... Но причину нашёл - проблема в расширении wdx для листерного плагина. При этом при нажатии кнопки плагин вообще тоталом не загружался. Если сделать копию плагина с именем TCMediaInfo.wlx и указать его в ListerPlugins, то всё начинает работать. Полагаю, это можно считать багом тотала, учитывая что по F3 всё работает и c расширением wdx, то и в таком сценарии должно работать.
В x64 тоже работает, если сделать копию TCMediaInfo.wdx64 в TCMediaInfo.wlx64.
Не знаю, может всё же стоит сделать пару сопутствующих файлов-врапперов wlx/wlx64 (как в Imagine), чтобы исключить такие проблемы.
Добавлено: Вс сен 03, 2023 21:45
jentoso
Loopback писал(а):В x64 тоже заработало, если сделать копию в TCMediaInfo.wlx64.
Сделал копию TCMediaInfo.wdx64 и переименовал в TCMediaInfo.wlx64, все работает.
А я уже и не помню, почему для 32-битной версии переименовал копию в wlx, а для 64 не догадался.
Добавлено: Ср сен 13, 2023 10:10
burav
Добрый день!
Подскажите, почему у одного файла русские тэги в листерном плагине отображаются кракозябрами, у другого - нормально, хотя в контентном плагине оба файла отображаются правильно?

Спасибо