[wlx/wdx] TCMediaInfo
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 48, 49, 50, 51  Next  :| |:
Total Commander -> Плагины Total Commander

#721:  Author: 790 PostPosted: Wed Jun 07, 2023 12:54
    —
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);

Вроде, работает. Наверно, есть какие-нибудь решения попроще?

#722:  Author: Loopback PostPosted: Wed Jun 07, 2023 23:11
    —
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;

#723:  Author: 790 PostPosted: Thu Jun 08, 2023 02:24
    —
Спасибо!!
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

#724:  Author: Loopback PostPosted: Thu Jun 08, 2023 23:17
    —
790
Данные одного поля никак не могут быть разными в wdx/wlx плагинах, у них один источник данных - библиотека MediaInfo. Если что-то различается, значит это разные поля (в частности, следует обращать внимание на поля с суффиксами /string, /string1 и т.д., они могут существенно различаться), либо применена какая-то обработка скриптом (но единственное что есть в конфигурации, связанное с каналами - функция FormatChannels, которая просто добавляет локализованное слово "каналов" к их числу).

Переключите в WLX режим просмотра в "Вывод без обработки", найдите имя поля, которое выводит нужную информацию, и сравните с именем поля, данные из которого выводится в колонку.

#725:  Author: 790 PostPosted: Fri Jun 09, 2023 14:54
    —
Спасибо, всё получилось.
В листере:
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

#726:  Author: Loopback PostPosted: Fri Jun 09, 2023 22:51
    —
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 - понятия не имею.

#727:  Author: 790 PostPosted: Mon Jun 12, 2023 00:28
    —
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 Спасибо за науку!

#728:  Author: Loopback PostPosted: Mon Jun 12, 2023 16:53
    —
790
Да, что-то я начудил тут, Get это же только для листерной части. У вас всё правильно Smile

#729:  Author: 790 PostPosted: Wed Jun 28, 2023 21:15
    —
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 не пустое, там эти слэши мешают чтоли?

#730:  Author: Loopback PostPosted: Fri Jun 30, 2023 23:03
    —
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>

#731:  Author: 790 PostPosted: Sat Jul 01, 2023 02:51
    —
Да, так работает! Правда не всегда влезает в строку, если языков в файле много.
Так что я сделел так, удалил 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", зачастую приходится удалять ненужные.

#732:  Author: jentoso PostPosted: Sat Sep 02, 2023 19:14
    —
Использую кнопку для просмотра в 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, проблему решил.

#733:  Author: Loopback PostPosted: Sun Sep 03, 2023 22:28
    —
jentoso wrote:
Почему-то в TC x64 данная кнопка не срабатывает, просто открывается внутренний Lister.

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

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

Не знаю, может всё же стоит сделать пару сопутствующих файлов-врапперов wlx/wlx64 (как в Imagine), чтобы исключить такие проблемы.

#734:  Author: jentoso PostPosted: Sun Sep 03, 2023 22:45
    —
Loopback wrote:
В x64 тоже заработало, если сделать копию в TCMediaInfo.wlx64.

Сделал копию TCMediaInfo.wdx64 и переименовал в TCMediaInfo.wlx64, все работает.
А я уже и не помню, почему для 32-битной версии переименовал копию в wlx, а для 64 не догадался.

#735:  Author: burav PostPosted: Wed Sep 13, 2023 11:10
    —
Добрый день!
Подскажите, почему у одного файла русские тэги в листерном плагине отображаются кракозябрами, у другого - нормально, хотя в контентном плагине оба файла отображаются правильно?

Спасибо



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 48, 49, 50, 51  Next  :| |:
Page 49 of 51

Powered by phpBB © 2001, 2005 phpBB Group