Вы находитесь здесь
  • Home
  • Video Editing SDKVideo Editing SDK 5 для Linux — основные функции
image

Video Editing SDK 5 для Linux — основные функции

24.05.2022 15 Минут Olga Krovyakova 564 Нет комментариев

Video Editing SDK это инструмент для тех разработчиков, которые работают с видео и аудио данными и хотят создавать интеллектуальные настольные или облачные приложения для редактирования видео, поддерживающие основные мультимедийные форматы и кодеки.

SDK использует собственную технологию умного рендеринга SolveigMM, которая позволяет обрабатывать медиафайлы с различными параметрами сжатия в соответствии с заданными параметрами эталонного файла.
В основе SDK лежит объект Video Editing Engine, который поддерживает различные операции редактирования в умном режиме. Эти операции можно выполнить с помощью smm_batchsplit – утилиты командной строки для пакетной обработки медиафайлов. Все настройки редактирования должны быть описаны в командном файле (*.xtl).

Ознакомьтесь с доступной документацией по SDK для редактирования видео для Linux. Также доступно описание HTML5 Video Editor API .

Ниже приведен список операций, которые можно выполнить с помощью SDK и smm_batchsplit.

Обрезка видео

Эта функция позволяет обрезать, вырезать произвольное количество фрагментов из предварительно закодированных входных файлов быстро, совмещая покадровую точностью с объединением медиафайлов без потерь качества.

Для пакетной обработки можно использовать следующий XTL-код:


<timelines version="3">
  <timeline>
    <group output="../output/sample_mp4_0001.mp4">
      <track video="1" audio="1" accuracy="frame">
        <clip src="../mp4/test_file.mp4" start="00:00:01:00" stop="00:00:06:00" timeFormat="time10ms" />
        <clip src="../mp4/test_file.mp4" start="00:00:07:00" stop="00:00:12:00" timeFormat="time10ms" />
      </track>
    </group>
  </timeline>
</timelines>

В результате, из исходного файла test_file.mp4 будет создан файл “sample_mp4_0001.mp4”, состоящий из 2-х интервалов исходного файла – интервала с 1й по 6ю секунду и интервала с 7й по 12ю секунду.

Выходной файл для этого проекта показан здесь:

 

Вставка эффектов/переходов в выходной файл

Engine может применять различные эффекты и переходы к MP4 AVC и MXF XAVC видео:

– постепенное появление/угасание,

– растворение

Растворение

В примере показан переход с растворением между двумя видео. Продолжительность перехода 3 секунды.

Для демонстрации использования перехода представлен следующий образец проекта XTL:

<timelines version="3">
  <timeline>
    <group output="../output/transition_dissolve.mp4">
      <track video="1" audio="1" text="0" accuracy="frame">
        <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:15:00" />
        <clip src="../mp4/test_file.mp4" start="00:00:03:00" stop="00:00:15:00" />
        <effect type="transparency" start="00:00:12:00" stop="00:00:15:00">
          <param name="bkcolor" value="black" />
          <param name="alpha" value="255">
            <linear length="00:00:03:00" value="0"/>
          </param>
        </effect>
      </track>
      <track video="1">
        <clip src="../mp4/test_file.mp4" length="00:00:12:00" flags="blank" />
        <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:03:00"/>
        <clip src="../mp4/test_file.mp4" length="00:00:12:00" flags="blank" />
        <effect type="transparency" start="00:00:12:00" stop="00:00:15:00">
          <param name="bkcolor" value="transparent" />
          <param name="alpha" value="0">
            <linear length="00:00:03:00" value="255"/>
          </param>
        </effect>
        <transition type="mix" start="00:00:12:00" stop="00:00:15:00"/>
      </track>
    </group>
  </timeline>
</timelines>

Первая секция «track» из XTL создается для представления всей структуры выходного файла и продолжительности. Она содержит все файлы, из которых будет создан выходной файл.

В ней содержится тег «effect» для описания времени каждого из растворений. Число таких тегов должно совпадать с количеством растворений. Каждый тег «effect» должен описывать часть «исчезновения» в первом из двух файлов, на которые влияет текущее растворение.

Дополнительный трек требуется для каждого второго файла из затронутой пары. Такие треки должны содержать следующую информацию:

  1. Тип и номер потока, к которому будет применен переход. Обратите внимание, что должен быть указан только один тип потока.
  2. Тег «effect», описывающий «появление» во втором файле.
  3. Тег «transition», показывающий, что текущая дорожка будет обработана в соответствии с этим тегом и добавлена в выходной файл.

В результате, для этого XTL должен быть создан файл transition_dissolve.mp4, состоящий из 2-х одинаковых видео и 1 перехода растворения между ними, начиная с 12-й секунды длительностью 3 секунды.

Выходной файл для этого проекта показан здесь:

 

Появление и исчезновение

В примере показаны эффекты «появление» и «исчезновение» для двух объединенных видео. Каждый эффект длится 3 секунды.

Описание XTL для такого рода переходов выглядит следующим образом:


<timelines version="3">
   <timeline>
     <group output="../output/transition_fadeout_fadein.mp4">
       <track video="1" audio="1" text="0" accuracy="frame">
         <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:15:00" />
         <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:15:00" />
         <effect type="transparency" start="00:00:12:00" stop="00:00:15:00">
           <param name="bkcolor" value="black" />
           <param name="alpha" value="255">
             <linear length="00:00:03:00" value="0"/>
           </param>
         </effect>
         <effect type="transparency" start="00:00:15:00" stop="00:00:18:00">
           <param name="bkcolor" value="black" />
           <param name="alpha" value="0">
             <linear length="00:00:03:00" value="255"/>
           </param>
         </effect>
       </track>
     </group>
   </timeline>
</timelines>

Образец содержит 2 файла, описанных в тегах «clip» и двух «effect» тегах – первый для «затухания», а второй для «появления». Эти теги также содержат дополнительные параметры в тегах «param» — цвет фона, значение прозрачности и функцию изменения.

В результате, для этого проекта XTL будет создан файл transition_fadeout_fadein.mp4, состоящий из 2-х одинаковых видео – первое видео будет иметь эффект “исчезновения” в конце, а второй файл будет иметь эффект “появления” в начале.

Вы можете проверить выходной файл здесь:

Отключение звука сегментов

Эта функция позволяет отключить звук в указанных частях медиафайла.

Проект XTL, выполняющий «Отключение звука», показан ниже:


<timelines version="3">
  <timeline>
    <group output="../output/audio_mute.mp4">
      <track video="1" audio="1" text="0" accuracy="frame">
        <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:05:00" timeFormat="time10ms" flags="audio_silence"/>
        <clip src="../mp4/test_file.mp4" start="00:00:05:00" stop="00:00:10:00" timeFormat="time10ms" />
        <clip src="../mp4/test_file.mp4" start="00:00:10:00" stop="00:00:15:00" timeFormat="time10ms" flags="audio_silence"/>
      </track>
    </group>
  </timeline>
</timelines>

Этот проект создаст файл «audio_mute.mp4». Звук первых и последних 5 секунд выходного файла будет заменен на тишину.

Смотрите результат здесь:

 

Микширование аудио

Функция микширования позволяет накладывать звук из отдельных аудиофайлов M4A или MP3, а также аудиопотоки AAC, MP3 или PCM из других файлов MP4 в ваш файл.

Это также можно назвать голосом за кадром. Вот пример проекта XTL:


<timelines version="3">
  <timeline>
    <group output="../output/audio_mix.mp4">
      <track video="1" audio="0" text="0" accuracy="frame">
        <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:15:00" timeFormat="time10ms" />
      </track>
      <track video="0" audio="1" text="0" accuracy="frame">
        <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:15:00" timeFormat="time10ms" />
      </track>
      <track audio="1">
        <clip src="../mp3/mp3_single.mp3" length="00:00:02:00" flags="audio_silence" />
        <clip src="../mp3/mp3_single.mp3" start="00:00:00:00" stop="00:00:10:00" timeFormat="time10ms" />
        <clip src="../mp3/mp3_single.mp3" length="00:00:03:00" flags="audio_silence" />
        <transition type="mix" start="00:00:02:00" stop="00:00:12:00">
          <param name="audio" value="1"/>
        </transition>
      </track>
    </group>
  </timeline>
</timelines>

Примечания:

Этот проект создает файл “audio_mix.mp4”. Файл будет содержать исходный файл test_file.mp4, в который будет добавлен 10-секундный интервал звука из файла mp3_single.mp3.

 

Работа с изображениями

SDK позволяет использовать изображения для вашего видео. Можно выполнить следующие операции:

Наложение изображений на видео

Вы можете наложить изображение на видеофайл, добавить водяной знак или логотип.

Он доступен для файлов MP4 с AVC видео, MXF с XAVC видео.

Следующий пример показывает, как накладывать изображения на видео.


<timelines version="3">
  <timeline>
    <group output="../output/image_overlay.mp4">
      <track video="1" audio="1" text="0" accuracy="frame">
        <clip src="../mp4/test_file.mp4" start="00:00:00:00" stop="00:00:15:00" timeFormat="time10ms" />
      </track>
      <track video="1">
        <clip src="../logo.png" length="00:00:02:00" flags="blank" />
        <clip src="../logo.png" length="00:00:05:00" />
        <clip src="../logo.png" length="00:00:08:00" flags="blank" />
        <transition type="pip" start="00:00:02:00" stop="00:00:07:00">
          <param name="x" value="10"/>
          <param name="y" value="10"/>
          <param name="width" value="100"/>
          <param name="height" value="28"/>
        </transition>
      </track>
    </group>
  </timeline>
</timelines>

Этот проект XTL создает файл image_overlay.mp4 и накладывает логотип SolveigMM на указанную позицию, начиная со 2 секунды, и показывает его в течение 10 секунд.

Смотрите выходной файл здесь:

 

Преобразование изображений в видео

Вы можете создать новое видео в формате MP4 (AVC) или MXF (XAVC) из набора изображений PNG/JPG.

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

<timelines version="3">
  <timeline>
    <group output="../output/image_to_video.mp4" out_type="mp4">
      <task type="transcoding">
        <param name="vcodec" value="type=h264,fps_n=25,fps_d=1,width=1280,height=720,profile=baseline,bitrate=1000"/>
      </task>
      <track video="1" audio="0" text="0">
        <clip src="../jpg/kitten.jpg" length="00:00:04:00" />
      </track>
    </group>
  </timeline>
</timelines>

Выходное видео, созданное с помощью этого проекта XTL, состоит из изображения kitten.jpg, отображаемого продолжительностью 4 секунды и закодированного с помощью кодека H264.

Вот выходной файл для этого проекта:

 

Общие переходы

Образец демонстрирует применение всех возможных эффектов в одном файле.


<timelines version="3">
  <timeline>
    <group output="../output/transitions_avc_mp4.mp4">
<!--указание параметров сжатия для перекодирования-->
      <param name="reference_file" value="../mp4/test_video_1.mp4"/>
<!--описание общей структуры выходного файла, работа только с видео потоком-->
      <track video="1" audio="0" accuracy="frame">
        <clip src="../mp4/test_video_1.mp4" start="00:00:00:00" stop="00:00:02:00" />
        <clip src="../mp4/test_video_1.mp4" start="00:00:01:00" stop="00:00:02:00" />
        <--declare a fade-in on the beginning of the first file-->
        <effect type="transparency" start="00:00:00:00" stop="00:00:01:00" >
          <param name="bkcolor" value="black" />
          <param name="alpha" value="0">
            <linear length="00:00:01:00" value="255" />
          </param>
        </effect>
<!--подготовка части 'исчезновения' для эффекта растворения между 2 файлами,-->
<!--оставшаяся часть 'растворения' описана в отдельном теге-->
        <effect type="transparency" start="00:00:01:00" stop="00:00:02:00" >
          <param name="bkcolor" value="black" />
          <param name="alpha" value="255">
            <linear length="00:00:01:00" value="0" />
          </param>
        </effect>
<!--описание эффекта 'исчезновения' на конце второго видеофайла-->
        <effect type="transparency" start="00:00:02:00" stop="00:00:03:00" >
          <param name="bkcolor" value="black" />
          <param name="alpha" value="255">
            <linear length="00:00:01:00" value="0" />
          </param>
        </effect>
      </track>
<!--окончание эффекта 'растворения':-->
<!--описание части 'появления' на начале второго файла и указание типа перехода-->
      <track video="1">
        <clip src="../mp4/test_video_1.mp4" length="00:00:01:00" flags="blank" />
        <clip src="../mp4/test_video_1.mp4" start="00:00:00:00" stop="00:00:01:00" />
        <clip src="../mp4/test_video_1.mp4" length="00:00:01:00" flags="blank" />
        <effect type="transparency" start="00:00:01:00" stop="00:00:02:00">
          <param name="bkcolor" value="transparent" />
          <param name="alpha" value="0">
            <linear length="00:00:01:00" value="255" />
          </param>
        </effect>
        <transition type="mix" start="00:00:01:00" stop="00:00:02:00"/>
      </track>
<!--описание наложения изображения-->
      <track video="1">
        <clip src="../png/attractive.png" length="00:00:01:00" flags="blank"/>
        <clip src="../png/attractive.png" length="00:00:01:00" />
        <clip src="../png/attractive.png" length="00:00:01:00" flags="blank"/>
        <transition type="pip" start="00:00:01:00" stop="00:00:02:00">
          <param name="x" value="0"/>
          <param name="y" value="0"/>
          <param name="width" value="184"/>
          <param name="height" value="112"/>
        </transition>
      </track>
<!--добавление аудио из того же входного файла-->
      <track video="0" audio="1" accuracy="frame">
        <clip src="../mp4/test_video_1.mp4" start="00:00:00:00" stop="00:00:02:00" />
        <clip src="../mp4/test_video_1.mp4" start="00:00:01:00" stop="00:00:02:00" />
      </track>
<!--описание микширования дополнительного аудио из отдельного mp3 файла-->
      <track audio="1">
        <clip src="../mp3/mp3_single.mp3" length="00:00:00:50" flags="audio_silence"/>
        <clip src="../mp3/mp3_single.mp3" start="00:00:00:00" stop="00:00:02:00" />
        <clip src="../mp3/mp3_single.mp3" length="00:00:00:50" flags="audio_silence"/>
        <transition type="mix" start="00:00:00:50" stop="00:00:02:50"/>
      </track>
    </group>
  </timeline>
</timelines>

В качестве выходных данных для этого XTL будет создан файл transitions_avc_mp4.mp4, в котором демонстрируются различные переходы:

  • Эффект постепенного появления для первого файла в течение 1 секунды, начиная с 0 секунды.
  • Растворение между первым и вторым файлами в течение 1 секунды, начиная с 1 секунды.
  • Эффект постепенного исчезновения в конце второго файла, длится 1 секунду, начиная с 2 секунды.
  • Наложение изображения продолжительностью 1 секунда, начиная с 1 секунды.
  • Добавление звуковых дорожек по отдельности из одних и тех же исходных файлов
  • Микширование аудио из внешнего mp3-файла длительностью 2 секунды, начиная с 0,5 сек.

Произойдет транскодирование для создания выходного файла с параметрами, указанными в эталонном файле test_video_1.mp4.

Посмотреть выходной файл для этого проекта можно здесь:

 

Онлайн видеоредактор HTML5 Video Editor в качестве примера

Приведенное выше описание показывает, что Video Editing SDK 5 для Linux включает множество полезных функций. И это не просто потенциальные возможности — мы уже используем эту функциональность. SDK включает в себя видеоредактор HTML5 Video Editor как в виде онлайн-решений, так и в виде локальных решений. Видеоредактор HTML5 Video Editor использует движок SDK на серверной части и поддерживает все функции, предоставляемые SDK.

HTML5 Video Editor онлайн-демо:
https://smarteditingonline.solveigmm.com/

Посмотрите это видео, чтобы узнать, как редактировать видео онлайн с помощью видеоредактора HTML5 Video Editor:

 

Утилиты

Иногда создание проекта XTL для выполнения конкретной задачи может оказаться не совсем удобным. Для таких случаев мы добавили пару полезных утилит, которые выполняют функции, не требуя использования XTL:

smm_ts2mp4

Это утилита командной строки, которая преобразует сегмент, указанный временем начала и окончания, из файла MPEG-TS с AVC HEVC видео и AAC аудио в файл MP4.

Пример использования утилиты:

./smm_ts2mp4.sh -frameacc -source /samples/media/h264-ts/sample_h264_aac.ts -dest /tmp/output.mp4 -starttime 10000000 -endtime 20000000

-sourceустанавливает имя исходного файла MPEG-TS
-destустанавливает имя выходного MP4 файла
-starttime and -endtime указывает время начала/окончания интервала в единицах 100 наносекунд
-frameaccобеспечивает редактивание с точностью до кадра для обрезки видео

smm_mp4transc

Это инструмент командной строки, который перекодирует файл MP4 с AVC или HEVC видео и AAC аудио с точно такими же параметрами кодека и контейнера, которые указаны в эталонном файле MP4 (AVC видео, AAC аудио).

Пример использования:

./smm_mp4transc.sh -sourcemp4 ../samples/media/mp4/test_video_1.mp4 -refmp4 ../samples/media/mp4/sample_mp4_hd.mp4 -destmp4 /tmp/output.mp4

-sourcemp4устанавливает имя исходного файла MP4
-refmp4указывает эталонный файл, параметры которого будут применяться для кодирования
-destmp4устанавливает имя выходного MP4 файла

На следующем рисунке показаны параметры исходного видео.
before transcoding

Вот параметры эталонного файла:
transcoding reference

На картинке ниже представлена информация о перекодированном видео.

after transcoding

Мы видим, что перекодированное видео имеет разные параметры разрешения, профиля, уровня и т. д.

1 / 5 - 5