[wlx/wdx] TCMediaInfo

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Для wlx так и есть. Посмотрим, если там никаких подводных камней нет, можно будет и для wdx включить обратно.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
От идеи с переменной окружения вижу только плюсы. Во-первых, не нужно будет делать никаких опций в файле конфигурации. Во-вторых, фильтрацией можно будет легко и красиво управлять нажатием кнопки или выполнением команды. Допустим, переменная будет называться TC_MEDIAINFO_FORMATS и по умолчанию она будет включена. Тогда пользователю можно и даже нужно будет управлять ее состоянием через Autorun:

Код: Выделить всё

If TC_MEDIAINFO_FORMATS = 1 Then
   SetEnv TC_MEDIAINFO_FORMATS 0
   MsgBox("Фильтрация форматов отключена")
Else
   SetEnv TC_MEDIAINFO_FORMATS 1
   MsgBox("Фильтрация форматов включена")   
EndIf
Или искать другие пути воздействия на неё.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Значит переменную придется дёргать на каждом файле. Нет, такого здесь я не хочу, равно как горячих клавиш, нажатых Ctrl и чего-то подобного. Я вообще не уверен, что стоит делать такую откровенно вредную опцию, чтобы под нее еще какую-то специальную обработку через переменные окружения вводить...
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Посмотрим, если там никаких подводных камней нет, можно будет и для wdx включить обратно.
Посмотрите, если не трудно. Хотелось-бы возможность и из TCMediaInfo перевод брать. В соответствии со справкой.
Orion9 писал(а):От идеи с переменной окружения вижу только плюсы.
Мне уже при смене языка пришлось решать вопрос бесконечного подергивания меню, которое не позволяло его открыть из-за постоянной проверки переменной. Опция самое то.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Значит переменную придется дёргать на каждом файле.
И что произойдёт, камень перегреется? ) Можно подумать, это мы дергать будем. Пусть об этом позаботится наш многоядерный друг и его кэш второго уровня.

В скорости, конечно, будет небольшое падение, но это вопрос миллисекунд, что, кстати, проверить можно. Вот мне и загорелось проверить и заодно и потестировать вашу новую функцию FileFind в Autorun:
[cut]TOTALCMD#BAR#DATA
60025

%COMMANDER_EXE%
Скорость поиска файлов|CTRL - Проверять окружение|SHIFT - Смена каталога


-1[/cut]
[cut]

Код: Выделить всё

RegisterCommand 60025 "EnvSpeedTest"

Func EnvSpeedTest()
    Local lst, mod, T1 = GetUptime()
    Local b_CTRL = IsPressed(0x11), b_SHIFT = IsPressed(0x10)
    Global CM_EXE = 0
    Global FF_LST = 0, FF_FOUND = 0
    If Not b_CTRL Then
       lst = FileFind(b_SHIFT ? ProgramFiles: ProgramW6432, "*.*", 1, 1, "PathList", "Func:FilterFunc1")
       mod = 0
    Else
       lst = FileFind(b_SHIFT ? ProgramFiles: ProgramW6432, "*.*", 1, 1, "PathList", "Func:FilterFunc2")    
       mod = 1    
    EndIf
    Local TL = Round(GetUptime() - T1, 0) / 1000    
    lst = "Проверять окружение: " & (mod = 1 ? "YES": "NO") & auCRLF & _
          "Всего файлов: " &  FF_LST & auCRLF & _
          "Найдено файлов: " &  FF_FOUND & auCRLF & _          
          "Проверок переменной окружения: " & CM_EXE & auCRLF & _
          "Время операции: " & StrFormat("%.3f", TL) & " sec" & auCRLF & _
          "---------------"  & auCRLF & lst              
    MsgBox(lst)
EndFunc

Func FilterFunc1(file)
    FF_LST += 1
    If file.ext = ".exe" And  file.Size > 1048576 And file.Size < 2097152 Then
       FF_FOUND += 1
       Return 1
    EndIf
    Return 2
EndFunc

Func FilterFunc2(file)
    FF_LST += 1
    If StrPos(COMMANDER_EXE, ".exe") Then
       CM_EXE += 1 
    EndIf
    If file.ext = ".exe" And  file.Size > 1048576 And file.Size < 2097152 Then
       FF_FOUND += 1
       Return 1
    EndIf
    Return 2
EndFunc
[/cut]
Кнопка ищет все ".exe" в каталоге Program Files, размер которых от 1Мб до 2Мб, и выводит сообщение в MsgBox. CTRL - включает проверку переменной окружения %COMMANDER_EXE%, SHIFT - меняет каталог на Program Files (x86).

P.S. Важное уточнение. Делал, не для того, чтобы что-то доказать, а потому что стало интересно и пока появилась такая возможность.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Наделал составных полей. Но вот V_AllDisplAspRt не удается создать, так как поля можно прописывать только из источника. А название колонки V_Orient можно прописать?

Код: Выделить всё

		<column name="V_DisplAspRtStr">V_DisplayAspectRatioStr</column>
		<column name="V_Orient" type="script">
		<![CDATA[
			Output:='';
			if V_DisplayAspectRatio <> '' then
			begin
				case V_DisplayAspectRatio of
					'0'..'0.999': Output:=GetLang('Portrait');
					'1.000':          Output:=GetLang('Square');
					else          Output:=GetLang('Landscape');
				end;
			end;
		]]>
		</column>
		<column name="V_AllDisplAspRt" type="script">
		<![CDATA[
			Output:='';
			if (V_DisplayAspectRatioStr <> '') then Output:=Output+V_DisplayAspectRatioStr;
			if (V_Orient <> '') then Output:=Output+'/'+V_Orient;
		]]>
		</column>
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Нет, использование колонки в качестве источника не предусмотрено.

Видимо, будет проще всего добавить вспомогательную функцию в пользовательскую библиотеку (или создать свою библиотеку), тогда её можно будет использовать в разных колонках без повторения кода. Примерно так:

Код: Выделить всё

      <column name="V_DisplAspRtStr">V_DisplayAspectRatioStr</column>
      <column name="V_Orient" type="script">
      <![CDATA[
        uses 'UserFunc';
        Output := GetOrientation(V_DisplayAspectRatio); 
      ]]>
      </column>
      <column name="V_AllDisplAspRt" type="script">
      <![CDATA[
        uses 'UserFunc';
         Output:='';
         if (V_DisplayAspectRatioStr <> '') then Output:=Output+V_DisplayAspectRatioStr;
         if (V_Orient <> '') then Output:=Output+'/'+GetOrientation(V_DisplayAspectRatio);
      ]]>
      </column>

    ...

    <funclib name="UserFunc">
	<![CDATA[
        function GetOrientation(nDisplayAspectRatio);
        begin
            if nDisplayAspectRatio<> '' then
            begin
                case nDisplayAspectRatio of
                   '0'..'0.999': Output:=GetLang('Portrait');
                   '1.000':          Output:=GetLang('Square');
                   else          Output:=GetLang('Landscape');
                end;
             end
             else
              Output:='';
        end;
      
	]]>
    </funclib>    
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Спасибо за подсказку. Попробую так сделать и позже выложу переделанный TCMediaInfo.xml для контекстной части.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Уф, голову сломал, но заработало. Вместо Output в функции надо писать Result. Ну а остальное по мелочи, быстро догадался :)

Добавлено спустя 2 часа 25 минут:

Переделал полностью контекстную часть файла настроек TCMediaInfo.xml. Главной целью было сделать отображение пользовательских колонок в соответствии с форматом вывода MediaInfo. Поэтому порядок колонок, их название полностью переделаны. Конечно большие исправлении и в составе колонок. Так как количество пользовательских колонок Гислером ограничено до 32 и длина данных тоже ограничена пришлось и это учесть при переделке. Поэтому все названия полей у меня новые. И много составных полей. Так что привожу все измененные файлы.
[cut="TCMediaInfo.xml"]

Код: Выделить всё

	<sources>
		<!-- General -->
		<source name="G_Format" field="Format/String"/>
		<source name="G_FormatProfile" field="Format_Profile"/>
		<source name="G_CodecID" field="CodecID/String"/>
		<source name="G_Duration" field="Duration"/>
		<source name="G_OverallBitRateMode" field="OverallBitRate_Mode/String"/>
		<source name="G_OverallBitRate" field="OverallBitRate/String"/>
		<source name="G_FrameRate" field="FrameRate/String"/>
		<source name="G_Album" field="Album" process="fix_cp"/>
		<source name="G_PartPosition" field="Part/Position"/>
		<source name="G_PartTotal" field="Part/Position_Total"/>
		<source name="G_TrackName" field="Track" process="fix_cp"/>
		<source name="G_TrackPosition" field="Track/Position"/>
		<source name="G_TrackTotal" field="Track/Position_Total"/>
		<source name="G_Performer" field="Performer" process="fix_cp"/>
		<source name="G_Composer" field="Composer" process="fix_cp"/>
		<source name="G_Publisher" field="Publisher" process="fix_cp"/>
		<source name="G_Genre" field="Genre" process="fix_cp"/>
		<source name="G_EncDate" field="Encoded_Date"/>
		<source name="G_RecDate" field="Recorded_Date"/>
		<source name="G_RelDate" field="Released_Date"/>
		<source name="G_EncodedWith" field="Encoded_Application"/>
		<source name="G_EncodedLibrary" field="Encoded_Library"/>
		<source name="G_Encoded_Library_Settings" field="Encoded_Library_Settings"/>
		<source name="G_EncodedBy" field="EncodedBy" process="fix_cp"/>
		<source name="G_Copyright" field="Copyright" process="fix_cp"/>
		<source name="G_Cover" field="Cover"/>
		<source name="G_Comment" field="Comment" process="fix_cp"/>
		<source name="G_LongDescription" field="LongDescription" process="fix_cp"/>
		<!-- Video -->
		<source name="V_Format" field="Format/String" context="Video"/>
		<source name="V_FormatProfile" field="Format_Profile" context="Video"/>
		<source name="V_CodecID" field="CodecID" context="Video"/>
		<source name="V_BitRateMode" field="BitRate_Mode/String" context="Video"/>
		<source name="V_BitRate" field="BitRate/String" context="Video"/>
		<source name="V_Width" field="Width" context="Video"/>
		<source name="V_Height" field="Height/String" context="Video"/>
		<source name="V_FrameRate_Mode" field="FrameRate_Mode/String" context="Video"/>
		<source name="V_FrameRate" field="FrameRate/String" context="Video"/>
		<source name="V_DisplayAspectRatio" field="DisplayAspectRatio" context="Video"/>
		<source name="V_DisplayAspectRatioStr" field="DisplayAspectRatio/String" context="Video"/>
		<source name="V_Rotation" field="Rotation" context="Video"/>
		<source name="V_Standard" field="Standard" context="Video"/>
		<source name="V_ColorSpace" field="ColorSpace" context="Video"/>
		<source name="V_ChromaSubsampling" field="ChromaSubsampling/String" context="Video"/>
		<source name="V_BitDepth" field="BitDepth/String" context="Video"/>
		<source name="V_ScanType" field="ScanType/String" context="Video"/>
		<source name="V_Compression_Mode" field="Compression_Mode/String" context="Video"/>
		<source name="V_BitsPixel" field="Bits-(Pixel*Frame)" context="Video"/>
		<source name="V_StreamSize" field="StreamSize/String" context="Video"/>
		<source name="V_EncodedLibrary" field="Encoded_Library" context="Video"/>
		<!-- Audio -->
		<source name="A_Format" field="Format/String" context="Audio"/>
		<source name="A_FormatVersion" field="Format_Version" context="Audio"/>
		<source name="A_FormatProfile" field="Format_Profile" context="Audio"/>
		<source name="A_FormatSettings" field="Format_Settings" context="Audio"/>
		<source name="A_CodecID" field="CodecID" context="Audio"/>
		<source name="A_BitRateMode" field="BitRate_Mode/String" context="Audio"/>
		<source name="A_BitRate" field="BitRate/String" context="Audio"/>
		<source name="A_Channels" field="Channel(s)" context="Audio"/>
		<source name="A_ChannelPositions" field="ChannelPositions" context="Audio"/>
		<source name="A_SamplingRate" field="SamplingRate/String" context="Audio"/>
		<source name="A_BitDepth" field="BitDepth/String" context="Audio"/>
		<source name="A_FrameRate" field="FrameRate/String" context="Audio"/>
		<source name="A_CompressionMode" field="Compression_Mode/String" context="Audio"/>
		<source name="A_StreamSize" field="StreamSize/String" context="Audio"/>
		<source name="A_Encoded_Library" field="Encoded_Library" context="Audio"/>
		<source name="A_Language" field="Language/String" context="Audio"/>
		<!-- Text -->
		<source name="T_Format" field="Format/String" context="Text"/>
		<source name="T_Language" field="Language/String" context="Text"/>
		<!-- Image -->
		<source name="I_Format" field="Format/String" context="Image"/>
		<source name="I_FormatVersion" field="Format_Version" context="Image"/>
		<source name="I_FormatProfile" field="Format_Profile" context="Image"/>
		<source name="I_Format_Compression" field="Format_Compression" context="Image"/>
		<source name="I_FormatSettings" field="Format_Settings" context="Image"/>
		<source name="I_CodecID" field="CodecID" context="Image"/>
		<source name="I_Width" field="Width" context="Image"/>
		<source name="I_Height" field="Height" context="Image"/>
		<source name="I_DisplayAspectRatio" field="DisplayAspectRatio" context="Image"/>
		<source name="I_DisplayAspectRatioStr" field="DisplayAspectRatio/String" context="Image"/>
		<source name="I_ColorSpace" field="ColorSpace" context="Image"/>
		<source name="I_ChromaSubsampling" field="ChromaSubsampling/String" context="Image"/>
		<source name="I_BitDepth" field="BitDepth/String" context="Image"/>
		<source name="I_Compression_Mode" field="Compression_Mode/String" context="Image"/>
		<source name="I_StreamSize" field="StreamSize/String" context="Image"/>
		<source name="I_colour_range" field="colour_range" context="Image"/>
		<source name="I_Density" field="Density/String" context="Image"/>
	</sources>
	<columns>
		<!-- General -->
		<column name="G_Fmt">G_Format</column>
		<column name="G_FmtProf">V_FormatProfile</column>
		<column name="G_AllFmt" type="script">
		<![CDATA[
			Output:='';
			if (G_Format <> '') then Output:=Output+G_Format;
			if (G_FormatProfile <> '') then Output:=Output+'/'+G_FormatProfile;
		]]>
		</column>
		<column name="G_CodecID">G_CodecID</column>
		<source name="G_CodecID" field="CodecID/String"/>
		<column name="G_Dur">
			<unit name="hh:mm:ss" type="script">Output:=TimingFormat('%hh:%mm:%ss', G_Duration);</unit>
			<unit name="hh:mm:ss.fff" type="script">Output:=TimingFormat('%hh:%mm:%ss.%fff', G_Duration);</unit>
		</column>
		<column name="G_OverBitRtMode">G_OverallBitRateMode</column>
		<column name="G_OverBitRt">G_OverallBitRate</column>
		<column name="G_AllOverBitRt" type="script">
		<![CDATA[
			Output:='';
			if (G_OverallBitRateMode <> '') then Output:=Output+G_OverallBitRateMode;
			if (G_OverallBitRate <> '') then Output:=Output+'/'+G_OverallBitRate;
		]]>
		</column>
		<column name="G_FrameRt">G_FrameRate</column>
		<column name="G_Album">G_Album</column>
		<column name="G_PartPos">G_PartPosition</column>
		<column name="G_PartTot">G_PartTotal</column>
		<column name="G_AllPart" type="script">
		<![CDATA[
			Output:='';
			if (G_PartPosition <> '') then Output:=Output+G_PartPosition;
			if (G_PartTotal <> '') then Output:=Output+'/'+G_PartTotal;
		]]>
		</column>
		<column name="G_TrName">G_TrackName</column>
		<column name="G_TrPos">G_TrackPosition</column>
		<column name="G_TrTot">G_TrackTotal</column>
		<column name="G_AllTr" type="script">
		<![CDATA[
			Output:='';
			if (G_TrackPosition <> '') then Output:=Output+G_TrackPosition;
			if (G_TrackTotal <> '') then Output:=Output+'/'+G_TrackTotal;
		]]>
		</column>
		<column name="G_Perf">G_Performer</column>
		<column name="G_Compos">G_Composer</column>
		<column name="G_Publ">G_Publisher</column>
		<column name="G_Genre">G_Genre</column>
		<column name="G_RecDate">G_RecDate</column>
		<column name="G_EncDate">G_EncDate</column>
		<column name="G_RelDate">G_RelDate</column>
		<column name="G_AllDate" type="script">
		<![CDATA[
			Output:='';
			if (G_RecDate <> '' AND GetLang() = 'RUS') then Output:=Output+' записано '+G_RecDate;
			if (G_EncDate <> '' AND GetLang() = 'RUS') then Output:=Output+' кодировано '+G_EncDate;
			if (G_RelDate <> '' AND GetLang() = 'RUS') then Output:=Output+' выпущено '+G_RelDate;
			if (G_RecDate <> '' AND GetLang() = 'ENG') then Output:=Output+' recorded '+G_RecDate;
			if (G_EncDate <> '' AND GetLang() = 'ENG') then Output:=Output+' encoded '+G_EncDate;
			if (G_RelDate <> '' AND GetLang() = 'ENG') then Output:=Output+' released '+G_RelDate;
		]]>
		</column>
		<column name="G_EncWith">G_EncodedWith</column>
		<column name="G_EncLib">G_EncodedLibrary</column>
		<column name="G_EncBy">G_EncodedBy</column>
		<column name="G_AllEnc" type="script">
		<![CDATA[
			Output:='';
			if (G_EncodedWith <> '' AND GetLang() = 'RUS') then Output:=Output+' программа '+G_EncodedWith;
			if (G_EncodedLibrary <> '' AND GetLang() = 'RUS') then Output:=Output+' библиотека '+G_EncodedLibrary;
			if (G_Encoded_Library_Settings <> '' AND GetLang() = 'RUS') then Output:=Output+' параметры '+G_Encoded_Library_Settings;
			if (G_EncodedBy <> '' AND GetLang() = 'RUS') then Output:=Output+' выполнил '+G_EncodedBy;

			if (G_EncodedWith <> '' AND GetLang() = 'ENG') then Output:=Output+' программа '+G_EncodedWith;
			if (G_EncodedLibrary <> '' AND GetLang() = 'ENG') then Output:=Output+' библиотека '+G_EncodedLibrary;
			if (G_Encoded_Library_Settings <> '' AND GetLang() = 'ENG') then Output:=Output+' settings '+G_Encoded_Library_Settings;
			if (G_EncodedBy <> '' AND GetLang() = 'ENG') then Output:=Output+' encodedby '+G_EncodedBy;
		]]>
		</column>
		<column name="G_CpyRt">G_Copyright</column>
		<column name="G_Cover">G_Cover</column>
		<column name="G_Comm">G_Comment</column>
		<column name="G_LongDesc">G_LongDescription</column>
		<separator/>
		<!-- Video -->
		<column name="V_Fmt">V_Format</column>
		<column name="V_FmtProf">V_FormatProfile</column>
		<column name="V_AllFmt" type="script">
		<![CDATA[
			Output:='';
			if (V_Format <> '') then Output:=Output+V_Format;
			if (V_FormatProfile <> '') then Output:=Output+'/'+V_FormatProfile;
		]]>
		</column>
		<column name="V_CodecID">V_CodecID</column>
		<column name="V_BitRtMode">V_BitRateMode</column>
		<column name="V_BitRt">V_BitRate</column>
		<column name="V_AllBitRt" type="script">
		<![CDATA[
			Output:='';
			if (V_BitRateMode <> '') then Output:=Output+V_BitRateMode;
			if (V_BitRate <> '') then Output:=Output+'/'+V_BitRate;
		]]>
		</column>
		<column name="V_FrameSz" type="script">
		<![CDATA[
			if (V_Width = '') and (V_Height = '') then
				Output:=''
			else
				Output:=V_Width+'x'+V_Height;
		]]>
		</column>
		<column name="V_FrameRtMode">V_FrameRate_Mode</column>
		<column name="V_FrameRt">V_FrameRate</column>
		<column name="V_AllFrameRt" type="script">
		<![CDATA[
			Output:='';
			if (V_FrameRate_Mode <> '') then Output:=Output+V_FrameRate_Mode;
			if (V_FrameRate <> '') then Output:=Output+'/'+V_FrameRate;
		]]>
		</column>
		<column name="V_DisplAspRtStr">V_DisplayAspectRatioStr</column>
		<column name="V_Orient" type="script">
		<![CDATA[
			uses 'AllDispl';
			Output := GetOrientation(V_DisplayAspectRatio);
		]]>
		</column>
		<column name="V_Rotat">V_Rotation</column>
		<column name="V_AllDispl" type="script">
		<![CDATA[
			uses 'AllDispl';
			Output:='';
			if (V_DisplayAspectRatioStr <> '') then Output:=Output+V_DisplayAspectRatioStr;
			if (V_DisplayAspectRatio <> '') then Output:=Output+'/'+GetOrientation(V_DisplayAspectRatio);
			if (V_Rotation <> '') then Output:=Output+'/'+V_Rotation;
		]]>
		</column>
		<column name="V_ClrSpc">V_ColorSpace</column>
		<column name="V_ChromaSubSampl">V_ChromaSubsampling</column>
		<column name="V_AllClr" type="script">
		<![CDATA[
			Output:='';
			if (V_ColorSpace <> '') then Output:=Output+V_ColorSpace;
			if (V_ChromaSubsampling <> '') then Output:=Output+'/'+V_ChromaSubsampling;
		]]>
		</column>
		<column name="V_BitDph">V_BitDepth</column>
		<column name="V_ScanType">V_ScanType</column>
		<column name="V_CompressMode">V_Compression_Mode</column>
		<column name="V_BitPxl">V_BitsPixel</column>
		<column name="V_StreamSz">V_StreamSize</column>
		<column name="V_EncodLib">V_EncodedLibrary</column>
		<separator/>
		<!-- Audio -->
		<column name="A_Fmt">A_Format</column>
		<column name="A_FmtVer">A_FormatVersion</column>
		<column name="A_FmtProf">A_FormatProfile</column>
		<column name="A_FmtSet">A_FormatSettings</column>
		<column name="A_AllFmt" type="script">
		<![CDATA[
			Output:='';
			if (A_Format <> '') then Output:=Output+A_Format;
			if (A_FormatVersion <> '') then Output:=Output+'/'+A_FormatVersion;
			if (A_FormatProfile <> '') then Output:=Output+'/'+A_FormatProfile;
			if (A_FormatSettings <> '') then Output:=Output+'/'+A_FormatSettings;
		]]>
		</column>
		<column name="A_CodecID">A_CodecID</column>
		<column name="A_BitRtMode">A_BitRateMode</column>
		<column name="A_BitRt">A_BitRate</column>
		<column name="A_AllBitRt" type="script">
		<![CDATA[
			Output:='';
			if (A_BitRateMode <> '') then Output:=Output+A_BitRateMode;
			if (A_BitRate <> '') then Output:=Output+'/'+A_BitRate;
		]]>
		</column>
		<column name="A_Ch">A_Channels</column>
		<column name="A_ChPos">A_ChannelPositions</column>
		<column name="A_AllCh" type="script">
		<![CDATA[
			Output:='';
			if (A_Channels <> '') then Output:=Output+A_Channels;
			if (A_ChannelPositions <> '') then Output:=Output+'/'+A_ChannelPositions;
		]]>
		</column>
		<column name="A_SamplRt">A_SamplingRate</column>
		<column name="A_BitDph">A_BitDepth</column>
		<column name="A_FrameRt">A_FrameRate</column>
		<column name="A_CompressMode">A_CompressionMode</column>
		<column name="A_StreamSz">A_StreamSize</column>
		<column name="A_EncLib">A_Encoded_Library</column>
		<column name="A_Lng">A_Language</column>
		<separator/>
		<column name="T_SubTitlFmt">T_Format</column>
		<column name="T_SubTitlLng">T_Language</column>
		<separator/>
		<!-- Image -->
		<column name="I_Fmt">I_Format</column>
		<column name="I_FmtVer">I_FormatVersion</column>
		<column name="I_FmtProf">I_FormatProfile</column>
		<column name="I_FmtCompress">I_Format_Compression</column>
		<column name="I_FmtSet">I_FormatSettings</column>
		<column name="I_AllFmt" type="script">
		<![CDATA[
			Output:='';
			if (I_Format <> '' AND GetLang() = 'RUS') then Output:=Output+' формат '+I_Format;
			if (I_FormatVersion <> '' AND GetLang() = 'RUS') then Output:=Output+'/ версия '+I_FormatVersion;
			if (I_FormatProfile <> '' AND GetLang() = 'RUS') then Output:=Output+'/ профиль '+I_FormatProfile;
			if (I_Format_Compression <> '' AND GetLang() = 'RUS') then Output:=Output+'/ сжатие '+I_Format_Compression;
			if (I_FormatSettings <> '' AND GetLang() = 'RUS') then Output:=Output+'/ настройки '+I_FormatSettings;
			if (I_Format <> '' AND GetLang() = 'ENG') then Output:=Output+' format '+I_Format;
			if (I_FormatVersion <> '' AND GetLang() = 'ENG') then Output:=Output+'/ version '+I_FormatVersion;
			if (I_FormatProfile <> '' AND GetLang() = 'ENG') then Output:=Output+'/ profile '+I_FormatProfile;
			if (I_Format_Compression <> '' AND GetLang() = 'ENG') then Output:=Output+'/ compression '+I_Format_Compression;
			if (I_FormatSettings <> '' AND GetLang() = 'ENG') then Output:=Output+'/ settings '+I_FormatSettings;
		]]>
		</column>
		<column name="I_CodecID">I_CodecID</column>
		<column name="I_ImgSz" type="script">
		<![CDATA[
			if (I_Width = '') and (I_Height = '') then
				Output:=''
			else
				Output:=I_Width+'x'+I_Height;
		]]>
		</column>
		<column name="I_DisplAspRtStr">I_DisplayAspectRatioStr</column>
		<column name="I_Orient" type="script">
		<![CDATA[
			uses 'AllDispl';
			Output := GetOrientation(I_DisplayAspectRatio);
		]]>
		</column>
		<column name="I_AllDispl" type="script">
		<![CDATA[
			uses 'AllDispl';
			Output:='';
			if (I_DisplayAspectRatioStr <> '') then Output:=Output+I_DisplayAspectRatioStr;
			if (I_DisplayAspectRatio <> '') then Output:=Output+'/'+GetOrientation(I_DisplayAspectRatio);
		]]>
		</column>
		<column name="I_ClrSpc">I_ColorSpace</column>
		<column name="I_ChromaSubSampl">I_ChromaSubsampling</column>
		<column name="I_AllClr" type="script">
		<![CDATA[
			Output:='';
			if (I_ColorSpace <> '') then Output:=Output+I_ColorSpace;
			if (I_ChromaSubsampling <> '') then Output:=Output+'/'+I_ChromaSubsampling;
		]]>
		</column>
		<column name="I_BitDph">I_BitDepth</column>
		<column name="I_CompressMode">I_Compression_Mode</column>
		<column name="I_StreamSz">I_StreamSize</column>
		<column name="I_ClrRange">I_colour_range</column>
		<column name="I_Density">I_Density</column>
	</columns>
	<!--
	<funclibs>
		<funclib name="Common">
		</funclib>
	-->

		<funclib name="AllDispl">
			<![CDATA[
			function GetOrientation(sDisplayAspectRatio);
			begin
				Output:='Test';
				if sDisplayAspectRatio <> '' then
				begin
					case sDisplayAspectRatio of
						'0'..'0.999': Result:=GetLang('Portrait');
						'1.000':      Result:=GetLang('Square');
						else          Result:=GetLang('Landscape');
					end;
				end;
			end;
			]]>
		</funclib>
	<!-- </funclibs> -->
[/cut]
В языковый файл я просто добавил свои данные.
[cut="TCMediaInfo.lng"]

Код: Выделить всё

[RUS]
; ;; General
; G_Fmt=Формат общий
; G_FmtProf=Профиль формата
; G_AllFmt=Всё Аудиформат
; G_CodecID=Идентификатор кодека
; G_Dur=Продолжительность
; G_OverBitRtMode=Режим общего битрейта
; G_OverBitRt=Общий битрейт
; G_AllOverBitRt=Всё Общий битрейт
; G_FrameRt=Частота кадров общая
; G_Album=Альбом
; G_PartPos=Расположение части
; G_PartTot=Всего частей
; G_AllPart=Всё Нумерация частей
; G_TrName=Имя трека
; G_TrPos=Расположение трека
; G_TrTot=Всего треков
; G_AllTr=Всё Нумерация треков
; G_Perf=Исполнитель
; G_Compos=Композитор
; G_Publ=Издатель
; G_Genre=Жанр
; G_RecDate=Дата записи
; G_EncDate=Дата кодирования
; G_RelDate=Дата выпуска
; G_AllDate=Всё Дата обработки
; G_EncWith=Программа кодирования
; G_EncLib=Библиотека кодирования
; G_EncBy=Кодирование выполнил
; G_AllEnc=Всё Кодирование
; G_CpyRt=Авторское право
; G_Cover=Обложка
; G_Comm=Комментарий
; G_LongDesc=Описание
; ;; Video
; V_Fmt=Видеоформат
; V_FmtProf=Профиль формата
; V_AllFmt=Всё Видеоформат
; V_CodecID=Идентификатор кодека
; V_BitRtMode=Вид битрейта
; V_BitRt=Битрейт видео
; V_AllBitRt=Всё Видеобитрейт
; V_FrameSz=Размер кадра
; V_FrameRtMode=Режим частоты кадров
; V_FrameRt=Частота кадров
; V_AllFrameRt=Всё Частота кадров
; V_DisplAspRtStr=Соотношение сторон дисплея
; V_Orient=Ориентация
; V_Rotat=Поворот
; V_AllDispl=Всё Дисплей
; V_Standard=Стандарт вещания
; V_ClrSpc=Цветовое пространство
; V_ChromaSubSampl=Цветовая субдискретизация
; V_AllClr=Всё Цвет
; V_BitDph=Битовая глубина
; V_ScanType=Тип развёртки
; V_CompressMode=Метод сжатия
; V_BitPxl=Бит/(Пиксели*Кадры)
; V_StreamSz=Размер потока
; V_EncodLib=Библиотека кодирования
; ;; Audio
; A_Fmt=Аудиоформат
; A_FmtVer=Версия формата
; A_FmtProf=Профиль формата
; A_FmtSet=Настройки формата
; A_AllFmt=Всё Аудиформат
; A_CodecID=Идентификатор кодека
; A_BitRtMode=Вид битрейта
; A_BitRt=Битрейт аудио
; A_AllBitRt=Всё Аудиобитрейт
; A_Ch=Число каналов
; A_ChPos=Позиции каналов
; A_AllCh=Всё Каналы
; A_SamplRt=Частота дискретизации
; A_BitDph=Битовая глубина
; A_FrameRt=Частота кадров
; A_CompressMode=Метод сжатия
; A_StreamSz=Размер потока
; A_EncLib=Библиотека кодирования
; A_Lng=Язык
; ;; Text
; T_SubTitlFmt=Формат субтитров
; T_SubTitlLng=Язык субтитров
; ;; Imagine
; I_Fmt=Формат изображения
; I_FmtVer=Версия формата
; I_FmtProf=Профиль формата
; I_FmtCompress=Сжатие
; I_FmtSet=Настройки формата
; I_AllFmt=Всё Формат изображения
; I_CodecID=Идентификатор кодека
; I_ImgSz=Размер сторон
; I_DisplAspRtStr=Соотношение сторон дисплея
; I_Orient=Ориентация
; I_AllDispl=Всё Дисплей
; I_ClrSpc=Цветовое пространство
; I_ChromaSubSampl=Цветовая субдискретизация
; I_AllClr=Всё Цвет
; I_BitDph=Битовая глубина
; I_CompressMode=Метод сжатия
; I_StreamSz=Размер потока
; I_ClrRange=Цветовой диапазон
; I_Density=Плотность
[/cut]
[cut="CustomFields.ini"]

Код: Выделить всё

[CustomFields]
AutoLoad=0
Titles=Видео|Картинки|Музыка
Widths1=80,30,50,85,95,70,105,120,205,75,120,80,105,70,175,65,130,60,55,50,75,60,95,210,85,80,105,60,130,65,65,55
Headers1=Размер\nФормат общий/Профиль\nИдентификатор кодека\nПродолжительность\nБитрейт общий Режим/Битрейт\nДата записи/кодирования/выпуска\nКодирование Программа/Библиотека/Параметры/Выполнил\nЧастота кадров общая\nВидеоформат/Профиль\nИдентификатор кодека\nБитрейт Режим/Битрейт\nРазмер кадра\nДисплей Соотношение сторон/Ориентация/Поворот\nСтандарт вещания\nЦвет Пространство/Субдискретизация\nБитовая глубина\nТип развёртки\nМетод сжатия\nБит/(Пиксели*Кадры)\nРазмер потока\nБиблиотека кодирования\nАудио Формат/Версия/Профиль/Настройки\nКаналы Число/Позиции\nЧастота дискретизации\nЧастота кадров\nРазмер потока\nБиблиотека кодирования\nЯзык\nФормат субтитров\nЯзык субтитров
Contents1=[=tc.size]\n[=tcmediainfo.G_AllFmt]\n[=tcmediainfo.G_CodecID]\n[=tcmediainfo.G_Dur]\n[=tcmediainfo.G_AllOverBitRt]\n[=tcmediainfo.G_AllDate]\n[=tcmediainfo.G_AllEnc]\n[=tcmediainfo.G_FrameRt]\n[=tcmediainfo.V_AllFmt]\n[=tcmediainfo.V_CodecID]\n[=tcmediainfo.V_AllBitRt]\n[=tcmediainfo.V_FrameSz]\n[=tcmediainfo.V_AllDispl]\n[=tcmediainfo.V_Standard]\n[=tcmediainfo.V_AllClr]\n[=tcmediainfo.V_BitDph]\n[=tcmediainfo.V_ScanType]\n[=tcmediainfo.V_CompressMode]\n[=tcmediainfo.V_BitPxl]\n[=tcmediainfo.V_StreamSz]\n[=tcmediainfo.V_EncodLib]\n[=tcmediainfo.A_AllFmt]\n[=tcmediainfo.A_AllCh]\n[=tcmediainfo.A_SamplRt]\n[=tcmediainfo.A_FrameRt]\n[=tcmediainfo.A_StreamSz]\n[=tcmediainfo.A_EncLib]\n[=tcmediainfo.A_Lng]\n[=tcmediainfo.T_SubTitlFmt]\n[=tcmediainfo.T_SubTitlLng]
Options1=-1|1|96
Widths2=80,30,50,185,90,105,145,130,135,90,60,70,40,105,25,55,45,40,40,90,70,80,65
Headers2=Размер\nКартинки Формат/Версия/Профиль/Сжатие/Настройки\nИдентификатор кодека\nРазмер сторон пикселей/мм\nДисплей Соотношение сторон/Ориентация\nЦвет Пространство/Субдискретизация\nБитовая глубина/Каналов/Глубина цвета\nМетод сжатия/Сжатие\nРазмер потока\nЦветовой диапазон\nПлотность\nИзображений, эскизов, кадров\nСлоёв\nЧересстрочный\nAlpha-канал\nАнимация\nВерсия SVG\nВстроенные изображения\nПродолжительность\nРасширенный формат\nКоличество иконок
Contents2=[=tc.size]\n[=tcmediainfo.I_AllFmt]\n[=tcmediainfo.I_CodecID]\n[=webpinfo.Width][=" x "webpinfo.Height][=svginfo.Calculated Width][=" x "svginfo.Calculated Height] [=tcmediainfo.I_ImgSz][="/"wdx4i.docw][=" x "wdx4i.doch]\n[=tcmediainfo.I_AllDispl]\n[=tcmediainfo.I_AllClr]\n[=webpinfo.Bit Depth][=tcmediainfo.I_BitDph] [=wdx4i.bps][="x"wdx4i.spp][="="wdx4i.depth]\n[=webpinfo.Encoding][=tcmediainfo.I_CompressMode] [=wdx4i.mode][="/"wdx4i.compr]\n[=tcmediainfo.I_StreamSz]\n[=tcmediainfo.I_ClrRange]\n[=tcmediainfo.I_Density]\n[=wdx4i.images][=webpinfo.Frame Count]\n[=wdx4i.layers]\n[=pnginfo.Interlaced]\n[=pnginfo.Alpha][=webpinfo.Alpha]\n[=pnginfo.Animation][=webpinfo.Animation]\n[=svginfo.SVG Version]\n[=svginfo.Have Embedded Image]\n[=webpinfo.Duration]\n[=webpinfo.Extended Format]\n[=iconlibrary.Number Of Icons]
Options2=-1|1|96
Widths3=80,30,50,120,80,70,105,100,90,100,90,100,100,100,100,120,205,80,35,120,120,210,80,90,85,80,60,105,50,60,45
Headers3=Размер\nФормат общий/Профиль\nИдентификатор кодека\nПродолжительность\nБитрейт общий Режим/Битрейт\nАльбом\nЧасть Расположение/Всего\nТрек Имя\nТрек Расположение/Всего\nИсполнитель\nКомпозитор\nИздатель\nЖанр\nДата записи/кодирования/выпуска\nКодирование Программа/Библиотека/Параметры/Выполнил\nАвторское право\nОбложка\nКомментарий\nОписание\nАудио Формат/Версия/Профиль/Настройки\nИдентификатор кодека\nВид битрейта/Битрейт\nКаналы Число/Позиции\nЧастота дискретизации\nБитовая глубина\nЧастота кадров\nМетод сжатия\nРазмер потока\nЯзык
Contents3=[=tc.size]\n[=tcmediainfo.G_AllFmt]\n[=tcmediainfo.G_CodecID]\n[=tcmediainfo.G_Dur]\n[=tcmediainfo.G_AllOverBitRt]\n[=tcmediainfo.G_Album]\n[=tcmediainfo.G_AllPart]\n[=tcmediainfo.G_TrName]\n[=tcmediainfo.G_AllTr]\n[=tcmediainfo.G_Perf]\n[=tcmediainfo.G_Compos]\n[=tcmediainfo.G_Publ]\n[=tcmediainfo.G_Genre]\n[=tcmediainfo.G_AllDate]\n[=tcmediainfo.G_AllEnc]\n[=tcmediainfo.G_CpyRt]\n[=tcmediainfo.G_Cover]\n[=tcmediainfo.G_Comm]\n[=tcmediainfo.G_LongDesc]\n[=tcmediainfo.A_AllFmt]\n[=tcmediainfo.A_CodecID]\n[=tcmediainfo.A_AllBitRt]\n[=tcmediainfo.A_AllCh]\n[=tcmediainfo.A_SamplRt]\n[=tcmediainfo.A_BitDph]\n[=tcmediainfo.A_FrameRt]\n[=tcmediainfo.A_CompressMode]\n[=tcmediainfo.A_StreamSz]\n[=tcmediainfo.A_Lng]
Options3=-1|1|96
[/cut]
Обновил файлы 08.06.2025. Исправил ошибки. Добавил новые поля. В переводе из-за выявленной в ТС ошибки с локализацией файлов, перевод закомментирован. Если не будете менять данные, можно использовать перевод. Глючит только при редактировании. В информации по картинкам добавлены поля из других плагинов.
Последний раз редактировалось AkulaBig Вс июн 08, 2025 15:21, всего редактировалось 7 раз.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Думал на этом закончились мои разборки с TCMediaInfo, если не считать ожидания изменений в листерной части. Но теперь понял, что Image тоже надо делать через TCMediaInfo. Конечно придется дополнять инфу из других плагинов, как у меня в хинтах сделано. Но за основу надо брать MI.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback
Вот так можно было-бы записывать: <separator>Image<separator/>. Сложно такое сделать?
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):Вот так можно было-бы записывать: <separator>Image<separator/>. Сложно такое сделать?
Если имеется в виду использовать картинку в качестве разделителя - да, сложно.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Если имеется в виду использовать картинку в качестве разделителя - да, сложно.
Ни в коем случае. Вставил просто слово, над которым сейчас работаю. Я имею ввиду текст вставить. Сейчас у нас при выборе полей из TCMediaInfo появляется список, разделенный -------- Это определяет <separator/> Я конечно в первом поле хотя-бы обозначаю Аудиоформат, Видеоформат, Общий формат. Но хотелось-бы оставить просто Формат. А секции разделять -----Общее---- -----Аудио---- ----Видео---- -------Картинка----- Так как названия многих полей одинаковы, без такой конкретики есть некоторые проблемы с ориентацией, из какого раздела поле вставить в колонку.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig
Теперь ясно. Технически это несложно, но не сработает.

Сейчас тотал формирует разделители, когда плагин возвращает поле с именем "-". Хотя это, кажется, не совсем документированная фича, во всяком случае в справке по плагинам про неё ни слова.

Так что разделитель легко сымитировать обычным объявлением колонки, и оно будет работать:

Код: Выделить всё

<column name="-"></column>
При добавлении любых других символов специальное значение имени теряется и получается обычное поле:

Код: Выделить всё

<column name="-Image"></column>
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Скачал сборку, посмотреть, что получилось.

Не уверен, что мне понравились названия полей формата G_*, V_* и A_*. Не могу сказать, что они хорошо смотрятся. Почему был сделан такой выбор и почему нельзя было оставить длинные названия полей? Например, название "Display aspect ratio" вместо V_DisplAspRtStr. По-моему, первый вариант смотрится лучше второго.

Есть составные поля, подводящие некий итог - V_AllDispl, A_AllBitRt или A_AllCh - но нет привычных полей All video as string и All audio as string, где раньше подводился итог по всему видео и аудио. При этом в ваших полях зачем-то используется слэш - 4:3/Ландшафтная/0.000; Constant/128 kb/s, когда, на мой взгляд, лучше было оставить запятую, как это было изначально сделано, т.е. AVC, 2.6 Мбит/с, 1440x1080, 50.000 к/с; CBR@127 kbps, 44100 Гц, 2 канала.

И кстати, добавьте в сборку WDX Guide, пользователям он тоже будет нужен, даже тем, кто им не пользуется.
Ответить