Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[wlx/wdx] TCMediaInfo
Goto page Previous  1, 2, 3 ... 48, 49, 50, 51  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
790



Joined: 09 Aug 2008
Posts: 307

Post (Separately) Posted: Wed Jun 07, 2023 12:54    Post subject: Reply with quote

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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Wed Jun 07, 2023 23:11    Post subject: Reply with quote

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
View user's profile Send private message
790



Joined: 09 Aug 2008
Posts: 307

Post (Separately) Posted: Thu Jun 08, 2023 02:24    Post subject: Reply with quote

Спасибо!!
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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Thu Jun 08, 2023 23:17    Post subject: Reply with quote

790
Данные одного поля никак не могут быть разными в wdx/wlx плагинах, у них один источник данных - библиотека MediaInfo. Если что-то различается, значит это разные поля (в частности, следует обращать внимание на поля с суффиксами /string, /string1 и т.д., они могут существенно различаться), либо применена какая-то обработка скриптом (но единственное что есть в конфигурации, связанное с каналами - функция FormatChannels, которая просто добавляет локализованное слово "каналов" к их числу).

Переключите в WLX режим просмотра в "Вывод без обработки", найдите имя поля, которое выводит нужную информацию, и сравните с именем поля, данные из которого выводится в колонку.
Back to top
View user's profile Send private message
790



Joined: 09 Aug 2008
Posts: 307

Post (Separately) Posted: Fri Jun 09, 2023 14:54    Post subject: Reply with quote

Спасибо, всё получилось.
В листере:
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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Fri Jun 09, 2023 22:51    Post subject: Reply with quote

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 Smile

Вроде это какие-то специфические настройки кодека. В теме по этому полю было обсуждение. Для mp3 тут может выводиться, например, joint stereo, что имеет смысл. Что такое 16 - понятия не имею.
Back to top
View user's profile Send private message
790



Joined: 09 Aug 2008
Posts: 307

Post (Separately) Posted: Mon Jun 12, 2023 00:28    Post subject: Reply with quote

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', так понятней Very Happy Спасибо за науку!
_________________
TC 11.03, Win10x64

Cuda уехал text, он был ещё вчераа...
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Mon Jun 12, 2023 16:53    Post subject: Reply with quote

790
Да, что-то я начудил тут, Get это же только для листерной части. У вас всё правильно Smile
Back to top
View user's profile Send private message
790



Joined: 09 Aug 2008
Posts: 307

Post (Separately) Posted: Wed Jun 28, 2023 21:15    Post subject: Reply with quote

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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Fri Jun 30, 2023 23:03    Post subject: Reply with quote

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
View user's profile Send private message
790



Joined: 09 Aug 2008
Posts: 307

Post (Separately) Posted: Sat Jul 01, 2023 02:51    Post subject: Reply with quote

Да, так работает! Правда не всегда влезает в строку, если языков в файле много.
Так что я сделел так, удалил 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
View user's profile Send private message
jentoso



Joined: 20 Dec 2007
Posts: 347

Post (Separately) Posted: Sat Sep 02, 2023 19:14    Post subject: Reply with quote

Использую кнопку для просмотра в 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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1280

Post (Separately) Posted: Sun Sep 03, 2023 22:28    Post subject: Reply with quote

jentoso wrote:
Почему-то в TC x64 данная кнопка не срабатывает, просто открывается внутренний Lister.

У меня и в 32-битном не работал... Но причину нашёл - проблема в расширении wdx для листерного плагина. При этом при нажатии кнопки плагин вообще тоталом не загружался. Если сделать копию плагина с именем TCMediaInfo.wlx и указать его в ListerPlugins, то всё начинает работать. Полагаю, это можно считать багом тотала, учитывая что по F3 всё работает и c расширением wdx, то и в таком сценарии должно работать.

В x64 тоже работает, если сделать копию TCMediaInfo.wdx64 в TCMediaInfo.wlx64.

Не знаю, может всё же стоит сделать пару сопутствующих файлов-врапперов wlx/wlx64 (как в Imagine), чтобы исключить такие проблемы.
Back to top
View user's profile Send private message
jentoso



Joined: 20 Dec 2007
Posts: 347

Post (Separately) Posted: Sun Sep 03, 2023 22:45    Post subject: Reply with quote

Loopback wrote:
В x64 тоже заработало, если сделать копию в TCMediaInfo.wlx64.

Сделал копию TCMediaInfo.wdx64 и переименовал в TCMediaInfo.wlx64, все работает.
А я уже и не помню, почему для 32-битной версии переименовал копию в wlx, а для 64 не догадался.
_________________
TC 11.03 combo, Windows 10 x64
Back to top
View user's profile Send private message
burav



Joined: 07 Oct 2011
Posts: 22

Post (Separately) Posted: Wed Sep 13, 2023 11:10    Post subject: Reply with quote

Добрый день!
Подскажите, почему у одного файла русские тэги в листерном плагине отображаются кракозябрами, у другого - нормально, хотя в контентном плагине оба файла отображаются правильно?

Спасибо
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 48, 49, 50, 51  Next
Page 49 of 51

 
Jump to:  
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