Уникализация видео для TikTok, YouTube и Нельзяграма

Botin

Client
Регистрация
16.02.2014
Сообщения
429
Благодарностей
977
Баллы
93
134016

Если вы работаете с TikTok, YouTube, Нельзяграма, или другой площадкой, где видео-контент способствует привлечению трафика, то для выхода на большие объемы без автоматизации не обойтись. Обрабатывать медиа-файлы очень удобно с помощью таких утилит, как FFMPEG (видео), ImageMagick (изображения), Sox (аудио), которые хорошо интегрируются с Зеннопостером, что позволяет создавать именно те сценарии, которые нам нужны. Такая связка открывает огромные возможности: от всевозможной обработки аудио и видео, созданию медиа-контента и даже построению своего виртуального колл-центра с обзвоном пользователей Viber или Skype, например.

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

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

Также вы получите уже готовый шаблон под Зенопостер по обработке и уникализации видео. Шаблон полностью открыт, его можно изучать, редактировать, использовать отдельные элементы для своих проектов. Также в конце статьи будет разбор логики шаблона, его файловой системы, чтоб мог разобраться даже новичок.

Утилиты для работы с медиа-файлами

Базовая утилита, с которой мы будем работать – это FFMPEG (официальный сайт – ffmpeg.org). Она умеет работать с видео, аудио, изображениями. Выполнение сценариев обработки идет через командную строку. В комплекте также идет утилита FFPROBE, с помощью которой можно анализировать медиа-файлы (получать длительность, разрешение и другие важные параметры, которые нужны будут уже на этапе обработки). Стоит упомянуть и о FFPLAY, которая в шаблонах по уникализации хотя и не задействована, но может стать весьма полезной, если есть потребность в воспроизведении аудио или видео-файлов.

Утилита ImageMagick специализируется конкретно на работе с изображениями (FFMPEG работает с ними поверхностно, чаще всего, в качестве входящих файлов для обработки): от создания по заданным размерам – до стилизации и редактирования. ImageMagick нам будет нужен не так часто, но при некоторых сценариях обработки, которые мы будем разбирать ниже, без него не обойтись.

Утилита Sox – предназначена для работы с аудио-файлами: редактирование, конвертация, работа с аудио-каналами. Ее использование также будет крайне редким, но иметь ее в своем арсенале не будет лишним.

Построение сценариев в FFMPEG

При создании сценариев обработки медиа-файлов стоит придерживаться следующей схемы:

134017


Пример простой обработки видео с обрезкой его длины:

-i video.mp4 -ss 00:00:03 -t 00:00:08 -c copy result.mp4

-i video.mp4
– это у нас входящий видео-файл (обязательно перед путем указанием входящего файла ставим “-i” – сокращенное обозначение “input”);

-ss 00:00:05 -t 00:00:08 -c copy – это параметры, которые применяются к входящему видео, где -ss 00:00:05 – с какого момента делать обрезку (с 5 секунды в данном примере), -t 00:00:10 – длина обрезанного видео (10 секунд по данному примеру), -c copy – указание скопировать кодеки с входного видео и вставить их в видео на выходе (таким образом обработка происходит очень быстро);

result.mp4 – это у нас видео на выходе.

В результате отработки такого сценария из входного видео будет вырезан фрагмент с 5 секунды по 15, так как у нас указана длительность видео на выходе 10 секунд. Это один из самых простых сценариев (входящих файлов может быть несколько, а параметры обработки более продвинутыми) для понимания основных принципов их построения.

Ниже мы разберем более сложные алгоритмы, которые вошли в основу шаблонов по уникализации видео с разбором тех параметров, которые выведены для определения конечного результата обработки медиа-файлов (они помещены в переменные для удобной регулировки через входные настройки и обработкой шаблоном).

Интеграция с ZennoPoster

Для запуска консольных утилит в Зенопостере есть кубик «Запуск программы» (Добавить действие > Свой код > Запуск программы). В поле «Исполняемый файл» мы указываем путь к утилите (можно использовать переменные в пути). В поле «Параметры запуска» - мы прописываем уже наш сценарий обработки (тоже можно с переменными).

134018


Таймаут выполнения ставим от 999 (надо, чтоб было с запасом), а то в зависимости от типа обработки и размера входного видео – процесс может занять определенное время, и если таймаут будет выставлен слишком маленький и обработка в отведенное время не закончится, то процесс прервется.

Также ставим галочку напротив пункта «Не показывать окно процесса». В обратном случае – каждый раз при запуске обработки будет открываться окно командной строки. В некоторых случаях (например, когда идет запись аудио или видео-потока, а стопается через принудительное завершение процесса по имени) также можно ставить галочку напротив «Не ждать завершения работы», но такая необходимость возникает редко, в большинстве случаев – шаблон ждет, когда завершится процесс обработки, так как дальше идет работа с этим новым полученным файлом.

При необходимости можно включить вывод данных по обработке файлов в переменные (при успешном или неуспешном исходе). На практике это может пригодится при запуске утилиты FFPROBE при анализе медиа-файлов: получение длины по времени, разрешения, или для выявления причин ошибок при работе с FFMPEG (STD OUT – здесь указываем переменную, в которую будет идти запись ответов при успешном выполнении, STD ERR – сюда переменную для записи причин ошибок при возникновении).

Дальше - мы переходим к разбору самых актуальных способов обработки, с помощью которых уникализируются видео для TikTok, YouTube и Нельзяграма. Так как каждый сценарий уникализирует видео в разной степени, оптимально использовать комбинации из нескольких сценариев (2-4 для обработки одного видео).

Зеркальное отражение

134019

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

Сценарий выполнения:
-i video.mp4 -vf hflip -vcodec libx264 -crf 28 output.mp4
1. -i video.mp4

  • Что делает: Указывает входной файл для обработки, в данном случае видеофайл video.mp4.
  • Могут быть другие значения:
    • В FFmpeg можно указать любой поддерживаемый видеоформат: .avi, .mov, .mkv, .flv, .webm и т.д.
    • Пример: -i movie.avi.

2. -vf hflip

  • Что делает: Применяет видеофильтр (-vf — это сокращение для video filter).
    • hflip — это фильтр, который выполняет горизонтальное отражение видео (т.е. зеркальное отображение).
  • Результат: Видео будет отзеркалено по горизонтали (если смотреть на видео, как в зеркале).
  • Могут быть другие значения фильтров:
    • -vf vflip: зеркальное отражение по вертикали.
    • -vf scale=1280:720: изменение разрешения видео на 1280x720.
    • -vf "crop=1280:720:0:0": обрезка видео до размера 1280x720 с верхнего левого угла.
    • -vf "rotate=PI/4": поворот видео на 45 градусов.

3. -vcodec libx264

  • Что делает: Указывает видеокодек для сжатия видео.
    • libx264 — это видеокодек H.264, который является одним из самых популярных и эффективных кодеков для видео.
  • Результат: Видео будет перекодировано с использованием кодека H.264, что обеспечивает хорошее сжатие и совместимость с большинством устройств и программ.
  • Могут быть другие значения:
    • -vcodec libx265: кодек H.265 (HEVC), который сжимает видео ещё эффективнее, но требует больше вычислительных ресурсов для кодирования и декодирования.
    • -vcodec vp9: кодек VP9, более эффективный, чем H.264, но поддерживается не так широко.
    • -vcodec mpeg4: кодек MPEG-4 (старый, но всё ещё поддерживаемый).

4. -crf 28

  • Что делает: Устанавливает параметр CRF (Constant Rate Factor)для сжатия видео.
    • 28— это значение параметра CRF, которое отвечает за качество видео при сжатии.
      • CRF 0 — максимальное качество (почти без потерь).
      • CRF 23 — стандартное значение (сбалансированное качество и размер).
      • CRF 28ниже качество, но гораздо меньше размер файла.
  • Чем выше значение CRF, тем меньше размер файла, но тем ниже качество.
  • Могут быть другие значения:
    • -crf 18: очень высокое качество (почти без потерь).
    • -crf 23: стандартное значение, хорошее качество и разумный размер.
    • -crf 30: ещё меньше качества, но сильно сэкономит место.

5. output.mp4

  • Что делает: Указывает имя и формат выходного файла.
    • В данном случае это будет файл MP4 с обработанным видео.
  • Могут быть другие значения:
    • output.mkv: файл в контейнере MKV.
    • output.avi: файл в контейнере AVI.
    • output.webm: файл в контейнере WebM.

Добавление фонового звука

Очень полезная функция для уникализации звуковой дорожки видео. Можно как накладывать фоновый звук (с приглушкой громкости, регулируется со входных настроек) с сохранением оригинального аудио, так и с удалением (тогда будет происходить полная замена звука).

Модуль можно использовать как для добавления фоновой музыки, звуков (дождь, гром, шум прибоя, ветер, пение птиц), так и для замены звуковой дорожки в видео (может быть полезно, если в оригинальном видео используется аудио, зашишенное авторскими правами). Длина накладываемого аудио должна быть не меньше длины видео.

Сценарий выполнения:
-i video.mp4 -i sound.mp3 -map 0:v:0 -map 1:a:0 -c copy -shortest output.mp4
1. -i video.mp4

  • Что делает: Указывает первый входной файл, который будет использоваться для обработки. В данном случае — это видеофайл video.mp4.
  • Могут быть другие значения: В FFmpeg можно указать любой поддерживаемый формат, например, .avi, .mov, .mkv, .flv и т. д.
  • Пример: -i movie.avi

2. -i sound.mp3

  • Что делает: Указывает второй входной файл, в данном случае аудиофайл sound.mp3.
  • Могут быть другие значения: FFmpeg поддерживает различные аудиоформаты, такие как .wav, .aac, .ogg, .flac, и т. д.
  • Пример: -i background.mp3

3. -map 0:v:0

  • Что делает: Указывает, какой поток из первого входного файла (индекса 0) нужно использовать.
    • 0: первый входной файл (в нашем случае — это video.mp4).
    • v: указывает, что выбирается видеопоток.
    • 0: первый видеопоток (обычно он один в большинстве видеофайлов).
  • То есть, эта часть команды говорит FFmpeg: возьми видеопоток из первого файла.
  • Могут быть другие значения:
    • 0:a:0: взять первый аудиопоток из первого файла.
    • 1:v:0: взять первый видеопоток из второго файла.
    • 1:a:1: взять второй аудиопоток из второго файла.

4. -map 1:a:0

  • Что делает: Указывает, какой поток из второго входного файла (индекса 1) нужно использовать.
    • 1: второй входной файл (в нашем случае — это sound.mp3).
    • a: указывает, что выбирается аудиопоток.
    • 0: первый аудиопоток (обычно один в MP3-файле).
  • То есть, эта часть команды говорит FFmpeg: возьми аудиопоток из второго файла.
  • Могут быть другие значения:
    • 0:v:0: взять видеопоток из первого файла.
    • 1:a:1: взять второй аудиопоток из второго файла, если он есть.

5. -c copy

  • Что делает: Указывает, что нужно копировать потоки без перекодирования.
    • copy: это значит, что FFmpeg будет переписать поток (видео и/или аудио) в выходной файл без изменения формата или качества.
  • Это ускоряет процесс, так как не нужно тратить время на перекодирование, и сохраняет исходное качество.
  • Могут быть другие значения:
    • -c:v libx264: перекодировать видеопоток в H.264.
    • -c:a aac: перекодировать аудиопоток в AAC.
    • -c:v copy -c:a aac: скопировать видео, но перекодировать аудио в AAC.

6. -shortest

  • Что делает: Указывает FFmpeg закончить обработку и создание выходного файла, когда закончится самый короткий поток.
    • Если видео длиннее аудио, видео будет обрезано до длины аудио.
    • Если аудио длиннее видео, аудио будет обрезано до длины видео.
  • Могут быть другие значения: Нет прямых альтернатив, но если не использовать -shortest, FFmpeg будет продолжать кодировать до конца самого длинного потока.

7. output.mp4

  • Что делает: Это имя выходного файла, в который будет сохранён результат обработки.
    • В данном случае выходной файл будет формата MP4.
    • Формат .mp4 обычно используется для хранения видеопотоков с кодеками H.264 и аудиопотоков с кодеком AAC.
  • Могут быть другие значения:
    • output.mkv: контейнер MKV.
    • output.avi: контейнер AVI.
    • output.webm: контейнер WebM.

Изменение скорости воспроизведения

Позволяет ускорять или замедлять видео с синхронизацией (изменение скорости применяется как для аудио, так и видео-потока). Рекомендуется незначительно менять скорость, на несколько процентов. Чем значительнее изменение скорости (в любую сторону), тем это сильнее заметно для зрителя.

Сценарий выполнения (ускорение на 5%):
-i video.mp4 -filter_complex "[0:v]setpts=0.95*PTS[v];[0:a]atempo=1.05 [a]" -map "[v]" -map "[a]" -vcodec libx264 -crf 28 output.mp4
1. -i video.mp4

  • Что делает: Указывает входной файл — это видеофайл video.mp4, который будет обрабатываться.
  • Могут быть другие значения: Можно использовать любой поддерживаемый формат видео, например, .avi, .mov, .mkv и т. д.

2. -filter_complex "[0:v]setpts=0.95*PTS[v];[0:a]atempo=1.05 [a]"

  • Что делает: Это сложный фильтр, который применяется к видео и аудио, и результат сохраняется в отдельные метки, которые потом используются в -map.
    Разбиваем на части:
    • [0:v]setpts=0.95*PTS[v]:
      • [0:v]: выбираем видеопоток из первого входного файла (0 — это индекс файла, v — видеопоток).
      • setpts=0.95*PTS: применяем фильтр setpts (время для кадров). PTS — это временная метка для кадров (Presentation Time Stamp). Умножение на 0.95 ускоряет видео на 5%. Это уменьшает время показа каждого кадра, делая видео быстрее.
      • [v]: результат обработки видеопотока сохраняется в метку v.
    • [0:a]atempo=1.05 [a]:
      • [0:a]: выбираем аудиопоток из первого входного файла (0 — индекс файла, a — аудиопоток).
      • atempo=1.05: применяем фильтр atempoдля изменения скорости аудио. Значение 1.05 увеличивает скорость аудио на 5%.
        • Примечание: для значений выше 2.0 необходимо использовать несколько фильтров (например, atempo=2.0,atempo=1.5).
      • [a]: результат обработки аудиопотока сохраняется в метку a.
  • Таким образом, видео будет ускорено на 5%, а аудио — тоже на 5%.
  • Могут быть другие значения фильтров:
    • [0:v]scale=1280:720 — изменяет разрешение видео.
    • [0:a]volume=1.2 — увеличивает громкость звука на 20%.
    • [0:v]rotate=PI/4 — поворачивает видео на 45 градусов.

3. -map "[v]"

  • Что делает: Указывает, что видеопоток, который был обработан и сохранён в метку [v] (с помощью фильтра setpts), будет использован в выходном файле.
  • Могут быть другие значения:
    • -map 0:v:0 — взять первый видеопоток из первого входного файла.
    • -map 1:v:0 — взять первый видеопоток из второго входного файла.

4. -map "[a]"

  • Что делает: Указывает, что аудиопоток, который был обработан и сохранён в метку [a] (с помощью фильтра atempo), будет использован в выходном файле.
  • Могут быть другие значения:
    • -map 0:a:0 — взять первый аудиопоток из первого входного файла.
    • -map 1:a:0 — взять первый аудиопоток из второго входного файла.

5. -vcodec libx264

  • Что делает: Указывает, что для видео будет использован видеокодек H.264 (через библиотеку libx264).
  • Могут быть другие значения:
    • -vcodec libx265 — использовать кодек H.265 (более эффективный, но с большей нагрузкой на процессор).
    • -vcodec vp9 — использовать кодек VP9 (для WebM).
    • -vcodec mpeg4 — использовать кодек MPEG-4.

6. -crf 28

  • Что делает: Устанавливает значение для параметра CRF(Constant Rate Factor), который контролирует качество видео при сжатии.
    • -crf 28: значение 28 означает низкое качество (и соответственно меньший размер файла). Чем больше значение CRF, тем ниже качество и меньше размер файла.
  • Для сравнения:
    • -crf 18: очень высокое качество (почти без потерь).
    • -crf 23: по умолчанию (сбалансированное качество и размер).
    • -crf 28: компромисс между качеством и размером, заметная потеря качества.
  • Могут быть другие значения:
    • -crf 18 — почти без потерь, высокое качество.
    • -crf 23 — стандартное значение для хорошего качества при разумном размере файла.

7. output.mp4

  • Что делает: Указывает имя и формат выходного файла. В данном случае это MP4.
  • Могут быть другие значения:
    • output.mkv — выходной файл в контейнере MKV.
    • output.avi — выходной файл в контейнере AVI.
    • output.webm — выходной файл в контейнере WebM.

Скорость аудио и видео-потоков имеют противоположные значения, но так и должно быть (они вычисляются шаблоном автоматически, исходя из заданной во входных настройках требуемой скорости).

Накладка изображения (ватермарка) на видео

134020

Позволяет накладывать изображение поверх видео в нужном месте (по углам с заданным отступом, или по центру), а также в нужный интервал времени. Используя формат ватермарка png – можно добавлять прозрачность вокруг объектов или текста на изображении.

Сценарий выполнения:
-i video.mp4 -i watermark.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:enable='between(t,1,9)'" -c:v libx264 -c:a copy output.mp4
1. -i video.mp4

  • Что делает: Указывает первый входной файл, который будет обработан. В данном случае это видеофайл video.mp4.
  • Могут быть другие значения:
    • Можешь указать любой другой видеофайл, например, video.avi, video.mkv, и так далее.

2. -i watermark.png

  • Что делает: Указывает второй входной файл — в данном случае изображение watermark.png. Это изображение будет наложено на видео (например, для водяного знака).
  • Могут быть другие значения:
    • Можно использовать другие изображения, например, .jpg, .gif, .bmp, и т.д.

3. -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:enable='between(t,1,9)'"

  • Что делает: Это сложный фильтр, который отвечает за наложение изображения на видео с динамическими настройками. Разберём его по частям:
a. overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2

  • Что делает: Применяет фильтр overlay, который накладывает второе изображение (водяной знак) на видео.
    • main_w — ширина основного видео.
    • overlay_w — ширина накладываемого изображения.
    • main_h — высота основного видео.
    • overlay_h — высота накладываемого изображения.
  • Формула (main_w-overlay_w)/2 и (main_h-overlay_h)/2 центрирует накладываемое изображение по середине экрана. То есть, изображение будет размещено в центре видео.
b. enable='between(t,1,9)'

  • Что делает: Этот параметр указывает, когда показывать водяной знак.
    • between(t,1,9) — показывает водяной знак в интервале времени с 1-й по 9-ю секунду.
    • t — время в секундах. То есть водяной знак появится на экране с 1-й секунды до 9-й. После 9-й секунды он исчезнет.
  • Могут быть другие значения:
    • enable='gt(t,5)': водяной знак появляется, начиная с 5-й секунды.
    • enable='lt(t,10)': водяной знак исчезает до 10-й секунды.
    • Можно комбинировать условия, например, enable='between(t,5,15)' — отображать водяной знак с 5-й по 15-ю секунду.

4. -c:v libx264

  • Что делает: Указывает кодек для видео. В данном случае это libx264, который используется для кодирования видео в формат H.264, популярный для сжатия видео с хорошим качеством и относительно низким размером.
  • Могут быть другие значения:
    • -c:v libvpx-vp9: кодек VP9, если нужно использовать формат WebM.
    • -c:v mpeg2video: кодек MPEG-2, если требуется старый стандарт для видео (например, для DVD).
    • -c:v prores_ks: кодек ProRes, если нужно сохранить видео в высоком качестве для пост-продакшн.

5. -c:a copy

  • Что делает: Указывает, что аудиопоток будет скопированбез изменений (без перекодирования).
    • copy — копирует аудиопоток из исходного видео в выходной файл без изменений. Это удобно, если аудио не нужно редактировать.
  • Могут быть другие значения:
    • -c:a aac: если нужно перекодировать аудио в формат AAC.
    • -c:a libmp3lame: если нужно перекодировать в формат MP3.

6. output.mp4

  • Что делает: Указывает имя и формат выходного файла. В данном случае это будет файл MP4 с обработанным видео.
  • Могут быть другие значения:
    • output.mkv: выходной файл в контейнере MKV.
    • output.avi: выходной файл в контейнере AVI.
    • output.webm: выходной файл в контейнере WebM.

Эффект «Из размытого в четкое»

134028

Помимо уникализации положительно сказывается на удержании зрителя (идет плавная фокусировка), особенно хорошо подходит для видео с красивыми девушками, танцами, знаменитостями. Во входных настройках шаблона есть возможность выставлять уровень начального размытия (в процентах от 1 до 100).

Сценарий выполнения:
-i video.mp4 -filter_complex "[0:v]split=2[base][blurred]; [blurred]boxblur=luma_radius=20[blurred]; [blurred]fade=type=out:start_time=0:duration=15:alpha=1[blurred-with-fadein]; [base][blurred-with-fadein]overlay[blurout]" -map "[blurout]" -map 0:a output.mp4
1. -i video.mp4

  • Что делает: Указывает входной файл — video.mp4.
  • Могут быть другие значения: Можно указать любой другой видеофайл, например, clip.avi, movie.mkv и так далее.

2. -filter_complex "[0:v]split=2[base][blurred]; [blurred]boxblur=luma_radius=20[blurred]; [blurred]fade=type=out:start_time=0:duration=15:alpha=1[blurred-with-fadein]; [base][blurred-with-fadein]overlay[blurout]"

  • Что делает: Это сложный фильтр (-filter_complex), который выполняет несколько операций на видео. Он состоит из нескольких фильтров, которые работают вместе для получения нужного эффекта.
    Давайте разберем фильтр по частям:
2.1. [0:v]split=2[base][blurred]

  • Что делает: Этот фильтр разделяетвходное видео на два потока:
    • [base] — первый поток видео, который не будет изменен.
    • [blurred] — второй поток, на котором будет применяться размывание.
  • Входной поток — это видео из [0:v] (первый видеофайл в команде, то есть video.mp4).
2.2. [blurred]boxblur=luma_radius=20[blurred]

  • Что делает: Фильтр boxblur применяется к потоку [blurred]. Он делает видео размытым.
    • luma_radius=20 — указывает радиус размытия для яркости (чем больше число, тем сильнее размытие). В данном случае значение равно 20 пикселям.
    • Могут быть другие параметры:
      • luma_radius=5 — слабое размытие.
      • luma_radius=50 — сильное размытие.
2.3. [blurred]fade=type=out:start_time=0:duration=15:alpha=1[blurred-with-fadein]

  • Что делает: Фильтр fadeприменяется для создания эффекта затухания (выцветания).
    • type=out — означает, что эффект затухания будет происходить в конце.
    • start_time=0 — затухание начнется с самого начала видео.
    • duration=15 — затухание будет длиться 15 секунд.
    • alpha=1 — задает уровень прозрачности. Если равен 1, видео будет полностью прозрачным в конце эффекта.
    • Полученный поток с эффектом затухания будет помечен как [blurred-with-fadein].
2.4. [base][blurred-with-fadein]overlay[blurout]

  • Что делает: Фильтр overlayнакладывает два видеопотока друг на друга:
    • [base] — исходное видео без изменений.
    • [blurred-with-fadein] — размытие с эффектом затухания.
    • Фильтр накладывает размытие с затуханием на исходное видео. Поток, который получается в результате, будет помечен как [blurout].

3. -map "[blurout]"

  • Что делает: Указывает, что для вывода следует использовать поток [blurout], который был создан в результате всех фильтров.

4. -map 0:a

  • Что делает: Указывает, что для аудио следует использовать поток из входного файла. В данном случае, это 0:a — аудио из первого входного файла (в нашем случае, из video.mp4).
  • Могут быть другие значения:
    • Можно выбрать другое аудио, если видео и аудио находятся в разных файлах, например, -map 1:a для аудио из второго файла.

5. output.mp4

  • Что делает: Указывает имя выходного файла — output.mp4. Это файл, в который будет записан результат обработки.
  • Могут быть другие значения:
    • Можно указать другой формат, например output.avi, output.mkv или output.mov.

Добавление шторки

134022

Имеет похожий эффект фокусировки на объекте, как и с добавлением размытия вначале, но здесь это достигается за счет шторки, которая постепенно сдвигается или снизу вверх, сверху вниз. Также регулируется скорость движения шторки, можно выставлять время задержки шторки вначале и менять цвет самой шторки, ее прозрачность (обработка самой шторки из папки shtorka в графическом редакторе, например, Adobe Photoshop).

Сценарий выполнения:
-y -i video.mp4 -loop 1 -t 15 -i "shtorka.png" -filter_complex "[0][1]overlay=y='if(gte(t,2), (t-2)*250, 0)'" -qscale 1 output.mp4
1. -y

  • Что делает: Опция -y говорит ffmpeg, чтобы он автоматически подтверждал перезапись выходного файла, если такой файл уже существует.
  • Могут быть другие значения: В противовес этому параметру можно использовать -n, который будет отклонять перезапись существующего файла, если он уже есть.

2. -i video.mp4

  • Что делает: Указывает первый входной файл — видеофайл video.mp4.
  • Могут быть другие значения: Можно указать любой другой видеофайл, например, movie.avi, clip.mkv и так далее.

3. -loop 1

  • Что делает: Эта опция заставляет второй входной файл (в данном случае изображение shtorka.png) зацикливаться.
    • -loop 1 — это означает зацикливание изображения на протяжении всей длительности видео. В данном случае оно будет отображаться на протяжении всей длительности видео.
    • Могут быть другие значения:
      • -loop 0 — изображение будет использоваться один раз.
      • -loop 2 — изображение будет зациклено дважды.

4. -t 15

  • Что делает: Устанавливает длительность выходного видео, в данном случае 15 секунд.
  • Могут быть другие значения:
    • -t 00:02:30 — видео длится 2 минуты и 30 секунд.
    • -t 20 — видео длится 20 секунд.

5. -i "shtorka.png"

  • Что делает: Указывает второй входной файл — изображение shtorka.png.
  • Могут быть другие значения:
    • Можно указать любое другое изображение, например logo.jpg, background.png, watermark.gif.

6. -filter_complex "[0][1]overlay=y='if(gte(t,2), (t-2)*250, 0)'"

  • Что делает: Это сложный фильтр(-filter_complex), который накладывает изображение (с фильтром) на видео.
    • [0][1]overlay — накладывает второй входной файл (изображение shtorka.png, помеченный как [1]) на первый входной файл (видео video.mp4, помеченное как [0]).
    • y='if(gte(t,2), (t-2)*250, 0)' — это выражение определяет вертикальное положениеизображения:
      • gte(t,2) — проверяет, если время (t) больше или равно 2 секундам, то:
      • (t-2)*250 — будет задаваться вертикальное смещение изображения (по оси Y), которое будет растис течением времени.
        • С 2-й секунды изображение будет двигаться вниз, причем на каждые последующие секунды оно будет двигаться на 250 пикселей.
      • Если время меньше 2 секунд, то изображение будет находиться в исходном положении (положения по оси Y равное 0).
  • Могут быть другие значения:
    • Например, можно изменить формулу, чтобы изображение двигалось не по вертикали, а по горизонтали: x='if(gte(t,2), (t-2)*250, 0)'.
    • Можно поменять скорость движения (увеличив или уменьшив значение в *250).

7. -qscale 1

  • Что делает: Устанавливает качество видео.
    • -qscale 1 — это настройка качества, где 1 означает высокое качество(но может увеличить размер файла). В пределах от 1 до 31:
      • 1 — наивысшее качество.
      • 31 — наихудшее качество.
    • Это параметр не для кодека, а для общей степени сжатия видео.
  • Могут быть другие значения:
    • -qscale 5 — компромисс между качеством и размером файла.
    • -qscale 10 — более компромиссное качество и меньшее сжатие.

8. output.mp4

  • Что делает: Указывает имя выходного файла — output.mp4, в котором будет сохранен результат.
  • Могут быть другие значения:
    • Можно указать другой формат файла, например, output.avi, output.mkv, output.mov.

Эффект виньетки

134023

Добавляет затемнение по углам. Есть возможность регулировки степени освещенности углов через входные настройки шаблона. Помимо уникализации способствует лучшей фокусировке на центральном объекте видео.

Сценарий выполнения:
-i video.mp4 -vf vignette=angle=PI/20 -vcodec libx264 output.mp4
1. -i video.mp4

  • Что делает: Указывает первый входной файл — видеофайл video.mp4.
  • Могут быть другие значения: Можно указать любой другой видеофайл, например, clip.avi, movie.mkv и так далее.

2. -vf vignette=angle=PI/20

  • Что делает: Эта опция указывает видеофильтр (-vf), который применяет эффект віньетки(окружности, которая постепенно становится темнее от центра к краям).
    • vignette — это название фильтра, который накладывает эффект затемнения по краям видео.
    • angle=PI/20 — это параметр фильтра віньетка, который задает угол вращения виньетки.
      • PI — это математическая константа π (примерно 3.14159).
      • PI/20 — угол виньетки будет π/20 радиан. Это значение определяет, насколько сильно будет искажаться сам эффект виньетки (то есть, угол вращения виньетки).
      • Если изменить на angle=PI/10, эффект будет более выраженным.
  • Могут быть другие параметры фильтра vignette:
    • radius — может быть задан радиус виньетки.
    • x и y — могут быть заданы координаты центра виньетки.
    • Пример: vignette=radius=0.5:x=iw/2:y=ih/2 — будет устанавливать центр виньетки в центр экрана.

3. -vcodec libx264

  • Что делает: Указывает видеокодек, который будет использоваться для сжатия выходного видео. В данном случае это libx264 — кодек для сжатия видео в формат H.264, который является одним из самых популярных и эффективных для кодирования видео.
  • Могут быть другие кодеки:
    • libx265 — кодек для сжатия в H.265 (HEVC), который позволяет достичь лучшего качества при меньшем размере файла.
    • vp9 — кодек от Google, который используется для видеоплатформы YouTube.

4. output.mp4

  • Что делает: Указывает выходной файл, в который будет сохранен результат работы команды. В данном случае это output.mp4.
  • Могут быть другие значения:
    • Можно использовать любой другой формат контейнера, например, output.avi, output.mkv, output.mov, и так далее.

Масштабирование видео

134024

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

Сценарий выполнения:
-i video.mp4 -vf "fps=60,scale=8000:-1,zoompan=z='pzoom+0.001':x=iw/2-(iw/zoom/2):y=ih/2-(ih/zoom/2):d=1:s=1080x1920:fps=60" -t {-Variable.vd-} -c:v libx264 -pix_fmt yuv420p output.mp4
1. -i video.mp4

  • Что делает: Указывает входной файл. В данном случае — это видеофайл video.mp4.
  • Могут быть другие значения: Можно указать любой другой видеофайл, например video.mkv, clip.avi, movie.mov.

2. -vf "fps=60,scale=8000:-1,zoompan=z='pzoom+0.001':x=iw/2-(iw/zoom/2):y=ih/2-(ih/zoom/2):d=1:s=1080x1920:fps=60"

  • Что делает: Это видеофильтр (-vf), который выполняет несколько операций по обработке видео.
  • Разберём его на части:
2.1. fps=60

  • Что делает: Устанавливает частоту кадров видео на 60 кадров в секунду (FPS).
  • Могут быть другие значения:
    • fps=30 — стандартная частота кадров для видео.
    • fps=24 — кинематографический стандарт.
2.2. scale=8000:-1

  • Что делает: Масштабирует видео. В данном случае ширина видео установлена в 8000 пикселей, а высота будет вычислена автоматически (значение -1 означает сохранение пропорций видео).
  • Могут быть другие значения:
    • scale=1280:720 — изменение размера до HD-разрешения.
    • scale=1920:1080 — изменение размера до Full HD.
2.3. zoompan=z='pzoom+0.001':x=iw/2-(iw/zoom/2):y=ih/2-(ih/zoom/2):d=1:s=1080x1920:fps=60

  • Это более сложный фильтр, который сочетает масштабирование и панораму (движение изображения).
2.3.1. z='pzoom+0.001'

  • Что делает: Этот параметр управляет масштабированием изображения с каждым кадром.
    • pzoom — переменная, которая хранит текущий коэффициент масштабирования (изначально равно 1). В процессе видео этот коэффициент увеличивается на 0.001 с каждым кадром.
    • Таким образом, изображение будет плавно увеличиваться в размерах с каждым кадром.
2.3.2. x=iw/2-(iw/zoom/2)

  • Что делает: Параметр x задаёт горизонтальное положениеобласти просмотра.
    • iw — исходная ширина видео.
    • zoom — текущий коэффициент масштабирования (изначально равен 1).
    • Эта формула задаёт горизонтальное смещение таким образом, чтобы изображение всегда оставалось центрированным по горизонтали, несмотря на масштабирование.
2.3.3. y=ih/2-(ih/zoom/2)

  • Что делает: Параметр y задаёт вертикальное положениеобласти просмотра.
    • ih — исходная высота видео.
    • zoom — коэффициент масштабирования.
    • Эта формула задаёт вертикальное смещение, чтобы изображение оставалось центрированным по вертикали во время масштабирования.
2.3.4. d=1

  • Что делает: Параметр d определяет длительность каждого кадрав процессе панорамирования и увеличения.
    • d=1 означает, что на каждый кадр будет приходиться 1 кадр (стандартное значение).
2.3.5. s=1080x1920

  • Что делает: Устанавливает разрешение выходного видео на 1080x1920 (портретная ориентация).
  • Могут быть другие значения:
    • s=1920x1080 — ландшафтная ориентация (Full HD).
    • s=1280x720 — HD-разрешение.
2.3.6. fps=60

  • Что делает: Устанавливает частоту кадров на 60 кадров в секунду в процессе панорамирования и масштабирования.
  • Могут быть другие значения:
    • fps=30 — для стандартного видео.
    • fps=24 — кинематографическое видео.

3. -t {-Variable.vd-}

  • Что делает: Устанавливает длительность выходного видео. В данном случае, значение {-Variable.vd-} может быть переменной, задающей продолжительность видео в секундах. Переменная {Variable.vd} будет подставляться при выполнении скрипта.
  • Могут быть другие значения:
    • -t 10 — если бы это было числовое значение, то видео бы длилось 10 секунд.
    • -t 00:01:30 — видео длилось бы 1 минуту и 30 секунд.

4. -c:v libx264

  • Что делает: Указывает видеокодек для кодирования видео. В данном случае используется libx264, который является открытым кодеком для кодирования видео в формате H.264.
  • Могут быть другие значения:
    • -c:v libx265 — кодек для H.265/HEVC (более эффективный, но требующий больше вычислительных ресурсов).
    • -c:v vp9 — кодек для VP9, используемый в видеоформате WebM.

5. -pix_fmt yuv420p

  • Что делает: Указывает формат пикселей, используемый для кодирования видео. yuv420p — это стандартный формат с 4:2:0 цветовой субдискретизацией, который широко поддерживается во всех устройствах и плеерах.
  • Могут быть другие значения:
    • yuv422p — более высокий формат цветовой субдискретизации.
    • yuv444p — ещё более высокий формат (реже используется из-за больших размеров данных).

6. output.mp4

  • Что делает: Указывает имя выходного файла. В данном случае — это output.mp4, в котором будет сохранён результат обработки видео.
  • Могут быть другие значения:
    • Можно указать другой формат файла: output.avi, output.mkv, output.webm и т.д.

Накладка футажа на видео

134021


Похоже с предыдущим модулем, но здесь поверх оригинального видео накладывается футаж (видео с прозрачным фоном и каким-то эффектом, будь то снег, дождь, молния и т.д.). Очень сильно способствует уникализации и стилизации видео. Сами футажи можно скачать на видео-стоках по запросу «footage» (нужно, чтоб были в формате mp4).

Сценарий выполнения:
-y -i video.mp4 -i footage.mp4 -filter_complex "[1:v][0:v]scale2ref[ua][b];[ua]setsar=1,format=yuva444p,colorchannelmixer=aa=0.5[u];[b][u]overlay=eof_action=pass[v]" -map [v] -s 1080x1920 -map 0:a video.mp4
1. -y

  • Что делает: Эта опция автоматически подтверждает перезапись выходного файла, если он уже существует.
  • Могут быть другие значения:
    • -n — запретит перезапись, и если выходной файл существует, будет выброшено предупреждение.

2. -i video.mp4

  • Что делает: Указывает входной видеофайл video.mp4, который будет обработан.
  • Могут быть другие значения:
    • Можно указать любой другой видеофайл, например, clip.mkv, film.avi и так далее.

3. -i footage.mp4

  • Что делает: Указывает второй входной видеофайл footage.mp4, который будет использоваться для наложения на первое видео.
  • Могут быть другие значения:
    • Можно указать другие видеофайлы, например, overlay.mp4, background.mp4 и так далее.

4. -filter_complex "[1:v][0:v]scale2ref[ua];[ua]setsar=1,format=yuva444p,colorchannelmixer=aa=0.5;overlay=eof_action=pass[v]"

Это сложный фильтр, который выполняет несколько операций:

4.1. [1:v][0:v]scale2ref[ua]
    • Что делает:Фильтр scale2refмасштабирует один видеопоток относительно другого.
      • [1:v] — второй видеопоток (из footage.mp4).
      • [0:v] — первый видеопоток (из video.mp4).
      • scale2ref — этот фильтр позволяет масштабировать второй поток (из footage.mp4), чтобы он подгонялся по размеру к первому потоку (из video.mp4).
      • [ua] — результат масштабирования второго потока, сохраняемый в переменную [ua].

4.2. [ua]setsar=1,format=yuva444p,colorchannelmixer=aa=0.5


    • Что делает:Применяет несколько фильтров к первому потоку после масштабирования.
      • setsar=1 — устанавливает отношение пикселей (SAR) в значение 1:1 (стандартное отношение пикселей).
      • format=yuva444p — меняет формат пикселей на YUVA444p, который поддерживает альфа-канал (прозрачность). Формат YUVA444p работает с высоким качеством цвета (444 означает, что все компоненты цвета и яркости хранятся с максимальной детализацией).
      • colorchannelmixer=aa=0.5 — изменяет значение альфа-канала (прозрачности) в видео. Значение aa=0.5 означает, что видео будет иметь прозрачность 50% (наполовину прозрачное).

4.3. overlay=eof_action=pass[v]


    • Что делает: Накладывает два видео потока друг на друга.
      • overlay — фильтр, который накладывает один видеопоток на другой. В данном случае второй поток будет наложен на первый.
      • eof_action=pass — говорит фильтру overlay, что делать, если видеофайл закончился. В данном случае, pass означает, что видео не будет обрезаться или обрываться, и поток будет продолжаться без изменений.
      • [v] — результат наложения обоих потоков, который сохраняется в переменную [v].
5. -map [v]
    • Что делает: Указывает, что нужно использовать видеопоток [v], который был получен после наложения и обработки.
    • Могут быть другие значения:
      • -map 0:v — можно выбрать видеопоток из первого файла.
      • -map 1:v — можно выбрать видеопоток из второго файла.

6. -s 1080x1920
    • Что делает: Устанавливает разрешение выходного видео в 1080x1920 (портретная ориентация).
    • Могут быть другие значения:
      • -s 1920x1080 — стандартное разрешение Full HD (ландшафтная ориентация).
      • -s 1280x720 — HD-разрешение.

7. -map 0:a
    • Что делает: Указывает, что нужно использовать аудиопоток из первого входного файла (video.mp4).
    • Могут быть другие значения:
      • -map 1:a — если нужно использовать аудиопоток из второго файла (footage.mp4).
      • -map 0 — использовать все потоки из первого файла (и видео, и аудио).
8. video.mp4
    • Что делает: Указывает выходной файл для сохранения результата. В данном случае — это video.mp4.
    • Могут быть другие значения:
      • Можно указать другие форматы, например output.mkv, output.avi, output.webm.

Описанные выше сценарии лучше всего изучать и разбирать в самом шаблоне, так как, чаще всего, перед их запуском производятся определенные операции с переменными из входных настроек, получение параметров входного видео. Все это – составляет общую картину обработки медиа-файлов. Внутри шаблона имеются комментарии к действиям, которые помогут сориентироваться в логике, производить доработки и изменения, заимствовать фрагменты шаблона для своих проектов.

Многопоток и запуск нескольких шаблонов одновременно

Прикрепленный шаблон по обработке и уникализации видео работает в один поток. Но так как у нас утилиты находятся в файловой системе шаблона (локально), то есть возможность допилить многопоток или использовать несколько копий шаблона одновременно.

Стоит понимать, что многопоточный запуск требует наличия высоких мощностей со стороны вашего компьютера, в первую очередь – процессора, так как основная нагрузка ложится именно на него. Даже при работе в 1 поток загруженность процессора может доходить до 100%. Поэтому поочередная отправка команд – это будет более щадящий режим по отношению к железу ПК.

Но если желание запуска шаблонов с интеграцией FFMPEG и других утилит в два и более потоков все же не пропало, то для этого создаются отдельные копии шаблонов (имеется в виду – копия всей сборки, включительно с дополнительными папками и файлами), но самое главное – у самих файлов утилит также меняем имена. Например, сейчас в папке dop лежит файл ffmpeg.exe – меняем на editor.exe (любое имя файла на латинице, можно с цифрами). Это позволит одновременно запускать несколько копий одного шаблона, даже если там есть принудительное завершение процесса (если у копий шаблонов утилиты будут иметь одинаковые названия, то завершение процесса в одном шаблоне приведет к завершению работы всех).

Если же стоит цель запуска одного шаблона в многопотоке с использованием консольных утилит, то в таком случае на примере нашего шаблона Unikalizator – в папке dop создаются копии утилит, например: ffmpeg1.exe, ffmpeg2.exe, ffmprg3.exe и т.д. Можно вывести список путей к этим утилитам (через поиск файлов) с проверкой, чтоб одна и та же копия утилиты не была взята двумя разными потоками.

Если возникли трудности со сценарием обработки

Порой при создании и своих проектов вы столкнетесь с трудностями (особенно на начальных этапах и при создании нестандартных проектов), но не отчаивайтесь, ведь в скриптах для FFMPEG и других утилит хорошо разбирается искуственный интеллект. Вполне подходят Gemini и ChatGPT (первый дает более качественные ответы). Но иногда получить рабочий вариант сценария будет не так просто, особенно с первого раза (предложенные скрипты могут отрабатывать с ошибкой, тогда нужно скидывать результат отработки с переменной STD ERR и просить исправить ее).

134027

Также существует площадка, где тусуется множество разработчиков, в том числе специализирующихся на FFMPEG и других консольных утилитах. Это - superuser.com (также можно использовать аналогичную площадку stackoverflow.com). Первым делом, заведите там аккаунт, если еще не сделали этого раньше (можно авторизоваться через Google).

На этой площадке вы можете создать свой вопрос, подробно описав проблему (если уже есть сценарий обработки, от которого вы отталкиваетесь, или хотите изменить некоторые моменты в нем – обязательно пропишите в вопросе), на английском языке, естественно (если нужно, можно использовать переводчик Deepl, например).

В зависимости от сложности вопроса – ответ могут подсказать от часа до суток (если поставленная задача действительно реализуема). Чем точнее и подробнее сформулировать вопрос (с кодом сценария обработки, возможно, также с примерами), тем выше вероятность, что вам таки помогут.

Также есть возможность поиска по вопросам, которые задавали другие пользователи (ведь у них тоже могла быть подобная проблема и решение ее было найдено). Поэтому перед созданием вопроса лучше пройтись по поиску. Можно искать как по конкретному ключевому запросу, например – «ffmpeg zoom», так и по тегу «[ffmpeg]». Поиск по тегу можно также использовать для поиска новых идей.

После получения решения своей проблемы не забудьте пометить ответ, как верный и поставить плюсик к репутации пользователя, который вам помог.

Шаблон Unikalizator вы можете скачать в конце этой публикации (все части архива выкачать и затем распаковать). А ниже - видео-обзор к шаблону:


P.S.: Данная статья основана на моем личном опыте обработки медиа-файлов с помощью утилит и Зенопостера. Если у вас есть опыт в данной сфере, то вы можете поделиться им в комментариях.
 

Вложения

Последнее редактирование модератором:

maestro202

Client
Регистрация
08.05.2016
Сообщения
80
Благодарностей
33
Баллы
18
Хорошая статья, интересная. В свое время писал себе уникализатор на питоне, который тоже работал с ffmpeg
Зенку для этого не использовал, чисто питон. Будет очень интересно посмотреть на реализацию в постере, спасибо.
P. S. Миллиона просмотров так и не добился, работал с тиктоком. После кучи банов на видео, пришел к выводу, что проще сделать свое видео с помощью ИИ, чем пытаться уникализировать чужое. Но этой мой печальный опыт, не сомневаюсь, что люди успешно уникализируют чужое
 
  • Спасибо
Реакции: Botin и Trader1985

Trader1985

Client
Регистрация
14.12.2011
Сообщения
134
Благодарностей
31
Баллы
28
Интересно, конечно, но в наше время уже не актуально: пока вы будете что-то "уникализировать", конкуренты за это время +100500 видео нейросетками наштампуют :-)
 

Scipion

Client
Регистрация
03.12.2019
Сообщения
101
Благодарностей
70
Баллы
28
Хорошая статья, интересная. В свое время писал себе уникализатор на питоне, который тоже работал с ffmpeg
Зенку для этого не использовал, чисто питон. Будет очень интересно посмотреть на реализацию в постере, спасибо.
P. S. Миллиона просмотров так и не добился, работал с тиктоком. После кучи банов на видео, пришел к выводу, что проще сделать свое видео с помощью ИИ, чем пытаться уникализировать чужое. Но этой мой печальный опыт, не сомневаюсь, что люди успешно уникализируют чужое
Под ТТ очень сложно уникализировать, намного проще свое видео создать. Инста с ютубом в этом плане проще
 

Botin

Client
Регистрация
16.02.2014
Сообщения
429
Благодарностей
977
Баллы
93
Под ТТ очень сложно уникализировать, намного проще свое видео создать. Инста с ютубом в этом плане проще
можно повышать время просмотра, используя шторку или эффект "из размытого в четкое", например, применяя это к своим видео, не обязательно чужим, например
 

Botin

Client
Регистрация
16.02.2014
Сообщения
429
Благодарностей
977
Баллы
93
Интересно, конечно, но в наше время уже не актуально: пока вы будете что-то "уникализировать", конкуренты за это время +100500 видео нейросетками наштампуют :-)
наштампованные тоже ведь можно улучшить с помощью ffmpeg
 

Scipion

Client
Регистрация
03.12.2019
Сообщения
101
Благодарностей
70
Баллы
28
можно повышать время просмотра, используя шторку или эффект "из размытого в четкое", например, применяя это к своим видео, не обязательно чужим, например
Тут я не спорю, сам такое хотел сделать
 

tsup

Client
Регистрация
07.10.2018
Сообщения
88
Благодарностей
53
Баллы
28
но в наше время уже не актуально: пока вы будете что-то "уникализировать", конкуренты за это время +100500 видео нейросетками наштампуют
Генерация видео нейросетью намного дороже/ресурсозатратнее, чем уникализация.
 
  • Спасибо
Реакции: Cryptonist и Botin

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)