View previous topic :: View next topic |
Author |
Message |
790
Joined: 09 Aug 2008 Posts: 319
|
(Separately) Posted: Wed Jun 07, 2023 12:54 Post subject: |
|
|
Duration в контент-варианте плагина, запутался с нулями. Заменил h, mm, sec на ":"
Code: | <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
Можно ли написать, например:
Code: |
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); |
Вроде, работает. Наверно, есть какие-нибудь решения попроще? _________________ TC 11.03, Win10x64
Cuda уехал text, он был ещё вчераа... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1402
|
(Separately) Posted: Wed Jun 07, 2023 23:11 Post subject: |
|
|
790
Для простой работы с ведущими нулями есть встроенная функция TimingFormat, но напрямую такое она не решит. Для этого в библиотеку функций "Common" я добавлял скриптовую функцию FormatDuration, которая делает требуемое, кроме секунд без минут (мне кажется, что тогда теряется ощущение, что это именно время). Её можно использовать так:
Code: |
<column name="Duration">
...
<unit name="Custom" type="script">
<![CDATA[
uses 'Common';
Output:=FormatDuration(Duration);
]]>
</unit>
</column>
|
Чтобы добиться одиночных секунд, надо поменять код функции FormatDuration на такой:
Code: |
// 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;
|
|
|
Back to top |
|
|
790
Joined: 09 Aug 2008 Posts: 319
|
(Separately) Posted: Thu Jun 08, 2023 02:24 Post subject: |
|
|
Спасибо!!
Loopback wrote: |
мне кажется, что тогда теряется ощущение, что это именно время |
Всё верно! Да и файлов таких у себя не нашёл (в "серьёзных" форматах аудио).
Только убрал из TimingFormat одну h, чтобы не было ведущего 0 в "часах".
Почему-то format DTS-ES (Matrix) и DTS 96/24 отображаются как простой DTS и 6ch. (а там 7, потому ещё Cb - центральный задний) в контекст-плагине, а в листерном всё нормально. (С Dolby EX, наверно, такая же ситуация будет, но мне не проверить - нет таких)
Code: | 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
|
_________________ TC 11.03, Win10x64
Cuda уехал text, он был ещё вчераа... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1402
|
(Separately) Posted: Thu Jun 08, 2023 23:17 Post subject: |
|
|
790
Данные одного поля никак не могут быть разными в wdx/wlx плагинах, у них один источник данных - библиотека MediaInfo. Если что-то различается, значит это разные поля (в частности, следует обращать внимание на поля с суффиксами /string, /string1 и т.д., они могут существенно различаться), либо применена какая-то обработка скриптом (но единственное что есть в конфигурации, связанное с каналами - функция FormatChannels, которая просто добавляет локализованное слово "каналов" к их числу).
Переключите в WLX режим просмотра в "Вывод без обработки", найдите имя поля, которое выводит нужную информацию, и сравните с именем поля, данные из которого выводится в колонку. |
|
Back to top |
|
|
790
Joined: 09 Aug 2008 Posts: 319
|
(Separately) Posted: Fri Jun 09, 2023 14:54 Post subject: |
|
|
Спасибо, всё получилось.
В листере:
Code: |
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
|
Добавил в колонки:
Code: |
<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 _________________ TC 11.03, Win10x64
Cuda уехал text, он был ещё вчераа... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1402
|
(Separately) Posted: Fri Jun 09, 2023 22:51 Post subject: |
|
|
790 wrote: | чтобы при отсутствии/наличии данных в 'Channel(s)_Original' использовал/не использовал данные из 'Channel(s)' |
Сделать скриптовую колонку, с проверкой на пустой результат. Как-то примерно так:
Code: |
Output:=Get('Channel(s)_Original', 'Audio');
if Output = '' then Output:=Get('Channel(s)', 'Audio');
|
790 wrote: | Что такое Format_Settings_Mode : 16 ? |
Не знаю, это надо адресовать автору MediaInfo
Вроде это какие-то специфические настройки кодека. В теме по этому полю было обсуждение. Для mp3 тут может выводиться, например, joint stereo, что имеет смысл. Что такое 16 - понятия не имею. |
|
Back to top |
|
|
790
Joined: 09 Aug 2008 Posts: 319
|
(Separately) Posted: Mon Jun 12, 2023 00:28 Post subject: |
|
|
Loopback wrote: |
Сделать скриптовую колонку, с проверкой на пустой результат. Как-то примерно так:
Code: |
Output:=Get('Channel(s)_Original', 'Audio');
if Output = '' then Output:=Get('Channel(s)', 'Audio');
|
|
"Как-то примерно так" не получилось, не врубился. В общем, скопировал скрипт из параметра "Frame Size" и заменил на своё:
Code: | <column name="Channels" type="script"><![CDATA[if (AudioChannelsOriginal = '') then Output:=AudioChannels else Output:=AudioChannelsOriginal;]]></column> |
По аналогии ещё добавил:
Code: |
<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', так понятней Спасибо за науку! _________________ TC 11.03, Win10x64
Cuda уехал text, он был ещё вчераа... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1402
|
(Separately) Posted: Mon Jun 12, 2023 16:53 Post subject: |
|
|
790
Да, что-то я начудил тут, Get это же только для листерной части. У вас всё правильно |
|
Back to top |
|
|
790
Joined: 09 Aug 2008 Posts: 319
|
(Separately) Posted: Wed Jun 28, 2023 21:15 Post subject: |
|
|
Code: | 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="*"
Code: | <source name="AudioLangCode" field="Language" context="Audio" stream="*"/> |
без * показывает только код первого языка. (а их бывает больше 2-х)
В общем, как сделать, чтобы при пустом значении Language и AudioStreamCount > 1, не рисовались пустые слэши / / , а было написано просто число аудио-потоков; а при наличии AudioLangCode показывались сами эти "коды", даже если код один?
Типа так:
Code: |
<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 не пустое, там эти слэши мешают чтоли? _________________ TC 11.03, Win10x64
Cuda уехал text, он был ещё вчераа... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1402
|
(Separately) Posted: Fri Jun 30, 2023 23:03 Post subject: |
|
|
790 wrote: | Во втором параметре ни слова про /, однако, он там всё-таки есть? |
Это разные вещи. Эти слеши (или другие символы, заданные в ключе MultiSeparator) добавляет сам плагин, при использовании вывода из всех потоков с помощью "*" - нужно же их чем-то разделять.
790 wrote: | В общем, как сделать, чтобы при пустом значении Language и AudioStreamCount > 1, не рисовались пустые слэши / / , а было написано просто число аудио-потоков; а при наличии AudioLangCode показывались сами эти "коды", даже если код один? |
Если число потоков больше 1, то Language одного потока может быть пустой, а другой нет. По идее об отсутствии нужно судить только по факту, когда пустые все. Не знаю, может надо было бы изначально возвращать пустую строку, если все составляющие пустые. С другой стороны пусть это не очень красиво выглядит, зато видно, что значений несколько и они пустые.
Думаю, в качестве решения, пусть и немного корявого, можно заменить пробелы и слеши на пустую строку и проверить результат, если он пустой - возвращать число потоков.
Code: |
<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>
|
|
|
Back to top |
|
|
790
Joined: 09 Aug 2008 Posts: 319
|
(Separately) Posted: Sat Jul 01, 2023 02:51 Post subject: |
|
|
Да, так работает! Правда не всегда влезает в строку, если языков в файле много.
Так что я сделел так, удалил stream="*" вообще и далее:
Code: |
<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", зачастую приходится удалять ненужные. _________________ TC 11.03, Win10x64
Cuda уехал text, он был ещё вчераа... |
|
Back to top |
|
|
jentoso
Joined: 20 Dec 2007 Posts: 365
|
(Separately) Posted: Sat Sep 02, 2023 19:14 Post subject: |
|
|
Использую кнопку для просмотра в Lister
Code: | TOTALCMD#BAR#DATA
%COMMANDER_EXE%
%P%N /S=L:Ptcmediainfo
WCMICONS.DLL,414
Просмотр MediaInfo Plugin
0
-1
|
Сам плагин настроен так, чтобы не хватал все файлы, а только по требованию
Code: | 10=%COMMANDER_PATH%\plugins\WDX\TCMediaInfo\TCMediaInfo.wlx
10_detect="ext="XXX"" |
Почему-то в TC x64 данная кнопка не срабатывает, просто открывается внутренний Lister.
P.S. Еще заметил, что после закрытия Lister, процессы TOTALCMD.EXE и TOTALCMD64.EXE остаются в памяти. Данная проблема была в плагине Autorun, проблему решил. _________________ TC 11.03 combo, Windows 10 x64 |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1402
|
(Separately) Posted: Sun Sep 03, 2023 22:28 Post subject: |
|
|
jentoso wrote: | Почему-то в TC x64 данная кнопка не срабатывает, просто открывается внутренний Lister. |
У меня и в 32-битном не работал... Но причину нашёл - проблема в расширении wdx для листерного плагина. При этом при нажатии кнопки плагин вообще тоталом не загружался. Если сделать копию плагина с именем TCMediaInfo.wlx и указать его в ListerPlugins, то всё начинает работать. Полагаю, это можно считать багом тотала, учитывая что по F3 всё работает и c расширением wdx, то и в таком сценарии должно работать.
В x64 тоже работает, если сделать копию TCMediaInfo.wdx64 в TCMediaInfo.wlx64.
Не знаю, может всё же стоит сделать пару сопутствующих файлов-врапперов wlx/wlx64 (как в Imagine), чтобы исключить такие проблемы. |
|
Back to top |
|
|
jentoso
Joined: 20 Dec 2007 Posts: 365
|
(Separately) Posted: Sun Sep 03, 2023 22:45 Post subject: |
|
|
Loopback wrote: | В x64 тоже заработало, если сделать копию в TCMediaInfo.wlx64. |
Сделал копию TCMediaInfo.wdx64 и переименовал в TCMediaInfo.wlx64, все работает.
А я уже и не помню, почему для 32-битной версии переименовал копию в wlx, а для 64 не догадался. _________________ TC 11.03 combo, Windows 10 x64 |
|
Back to top |
|
|
burav
Joined: 07 Oct 2011 Posts: 22
|
(Separately) Posted: Wed Sep 13, 2023 11:10 Post subject: |
|
|
Добрый день!
Подскажите, почему у одного файла русские тэги в листерном плагине отображаются кракозябрами, у другого - нормально, хотя в контентном плагине оба файла отображаются правильно?
Спасибо |
|
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
|