<?xml version="1.0" encoding="utf-8"?>
<HmsProcessMediaConfig version="2.21">
  <ProcessMediaItemList>
    <ProcessMediaItem>
      <HotKey>8311</HotKey>
      <Description>Выполнение транскодирования списка ссылок текущего подкаста</Description>
      <Name>Предварительное транскодирование (Подкаст)</Name>
      <ButtonName>Предв.транск.(подкаст)</ButtonName>
      <Button>-1</Button>
      <Script>const
mpiTranscodingFinish = 100000; // Идентификатор свойства "Признак завершения транскодирования"
// свойства меньше 100000 используются программой  

///////////////////////////////////////////////////////////////////////////////
// Валидация имени
function GetValidFileName(const aFileName: string): string;
var
  i: Integer;
begin
  Result := aFileName;
  for i := 1 to Length(Result) do
    if Result[i] in [&apos;&lt;&apos;, &apos;&gt;&apos;, &apos;|&apos;, &apos;"&apos;, &apos;\&apos;, &apos;/&apos;, &apos;:&apos;, &apos;*&apos;, &apos;?&apos;] then
    Result[i] := &apos; &apos;
end;

///////////////////////////////////////////////////////////////////////////////
// Обработка ссылки на медиа-файл (медиа-поток)
procedure ProcessFile(aMediaItem: THmsScriptMediaItem; const aDestDirectory: string; aCheckTranscodingFinish: Boolean);
var
  bExecuteTranscoding, bPodcastItem: Boolean;
  MediaItem: THmsScriptMediaItem;
  sDestDirectory, sDestFileName, sDestFileExt, sLogMessage, sSourceFileName, sSourceFilePath: string;
begin
  if aMediaItem.MediaType = mtVideo then begin
    bPodcastItem := aMediaItem.Properties[mpiPodcastItem];
    sSourceFilePath := aMediaItem.Properties[mpiFilePath];  
    if bPodcastItem then   
      sSourceFileName := aMediaItem.Properties[mpiMediaResourceSource]
    else
      sSourceFileName := sSourceFilePath;      
    if sSourceFileName &lt;&gt; &apos;&apos; then begin 
      if bPodcastItem or not HmsFileLocked(sSourceFileName) then begin
        sDestFileExt := HmsGetTranscodingFileExt(cfgPreTranscodingProfile);
        if bPodcastItem then 
          sDestFileName := IncludeTrailingBackslash(aDestDirectory) +
                           GetValidFileName(aMediaItem.Properties[mpiTitle]) + sDestFileExt
        else                                 
          sDestFileName := IncludeTrailingBackslash(aDestDirectory) + 
                           ChangeFileExt(ExtractFileName(sSourceFileName), sDestFileExt);                 
        if not HmsFileLocked(sDestFileName) then begin
          bExecuteTranscoding := True;
          if aCheckTranscodingFinish then begin
            MediaItem := HmsFindMediaItemByFileName(sDestFileName);
            if (MediaItem &lt;&gt; nil) and (MediaItem.Properties[mpiTranscodingFinish] = &apos;1&apos;) then begin
              if FileExists(sDestFileName) then
                bExecuteTranscoding := False
              else begin 
                MediaItem.Properties[mpiTranscodingFinish] := &apos;0&apos;;
                HmsDatabaseAutoSave
              end  
            end
          end;     
          if bExecuteTranscoding then begin
            sLogMessage := &apos;Обработка медиа-ресурсов: %s транскодирования файла "&apos; + sSourceFilePath + &apos;" в файл "&apos; + sDestFileName + &apos;"&apos;;
            HmsLogMessage(mtiInfo, Format(sLogMessage, [&apos;Начало&apos;]));
            if HmsPreTranscoding(aMediaItem, sDestFileName, cfgPreTranscodingProfile) then begin
              MediaItem := HmsFindMediaItemByFileName(sDestFileName);
              if MediaItem = nil then
                MediaItem := HmsCreateMediaItem(sDestFileName);
              if MediaItem &lt;&gt; nil then
                MediaItem.Properties[mpiTranscodingFinish] := &apos;1&apos;;
              HmsDatabaseAutoSave;
              HmsLogMessage(mtiInfo, Format(sLogMessage, [&apos;Завершение&apos;]), True);
            end else
              HmsLogMessage(mtiError, Format(sLogMessage, [&apos;Ошибка&apos;]))
          end   
        end    
      end
    end
  end   
end;

///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я   П Р О Ц Е Д У Р А                     //
///////////////////////////////////////////////////////////////////////////////
var
  MediaItem, MediaFolder: THmsScriptMediaItem; i, count: Integer;
begin
  ProcessMediaResult := False;  
  if cfgPreTranscodingDestDirectory = &apos;&apos; then 
    ShowMessage(&apos;Не указан каталог готовых файлов (Настройки-Транскодер-Временные файлы)&apos;)
  else begin  
    MediaFolder := HmsCurrentMediaTreeItem;
    count := MediaFolder.ChildCount;
    // Главный цикл обхода всех ссылок в папке ----------
    for i := 0 to count Do Begin
      if HmsCancelPressed then break;
      MediaItem := MediaFolder.ChildItems[i];
      HmsSetProgress(Trunc(i*100/count));
      HmsShowProgress(Format(&apos;%s (%d из %d)&apos;, [MediaItem[mpiTitle], i, count]));
      if not MediaItem.IsFolder then ProcessFile(MediaItem, cfgPreTranscodingDestDirectory, False);
    End;
    HmsHideProgress;
    // --------------------------------------------------
    ProcessMediaResult := True
  end    
end.</Script>
      <ScriptSyntaxType>PascalScript</ScriptSyntaxType>
      <ScheduleActive>0</ScheduleActive>
      <Schedule>
        <TaskName></TaskName>
        <TaskParams></TaskParams>
        <Occurs>0</Occurs>
        <DailyMode>0</DailyMode>
        <DailyDaysInterval>1</DailyDaysInterval>
        <WeeklyDaysOfWeek>127</WeeklyDaysOfWeek>
        <WeeklyWeekInterval>1</WeeklyWeekInterval>
        <MonthlyMode>0</MonthlyMode>
        <MonthlyDayOfMonth>1</MonthlyDayOfMonth>
        <MonthlyWeekOfMonth>0</MonthlyWeekOfMonth>
        <MonthlyDayOfWeek>0</MonthlyDayOfWeek>
        <MonthlyMonths>4095</MonthlyMonths>
        <DailyFrequency>0</DailyFrequency>
        <OnceAtTime>0</OnceAtTime>
        <ExecuteTimeList></ExecuteTimeList>
        <TimeUnit>0</TimeUnit>
        <TimeInterval>3600</TimeInterval>
        <TimeStart>0</TimeStart>
        <TimeEnd>86399</TimeEnd>
        <DateStart>40415</DateStart>
        <NoEndDate>-1</NoEndDate>
      </Schedule>
    </ProcessMediaItem>
  </ProcessMediaItemList>
</HmsProcessMediaConfig>
