Скрипты: Python + FFmpeg для авто‑обработки видео

Получить Reels-Boss бесплатно

Скрипты: Python + FFmpeg для авто‑обработки видео

Если вы хотите автоматизировать однообразные задачи видеомонтажа — от нарезки и склейки до сабов и перевода — связка скриптов на Python и FFmpeg даёт мощный, кроссплатформенный и предсказуемый результат. Ниже — практические примеры batch‑обработки, идеи API‑интеграций и готовые шаги для сборки надёжного пайплайна.

Почему Python + FFmpeg для видео

  • Скорость и качество. FFmpeg — де‑факто стандарт для транскодинга, фильтров и mux/demux. Python даёт удобную оркестрацию, файловые операции и интеграции.
  • Повторяемость. Скрипты видео на Python фиксируют параметры: конвертация кодеков, нормализация звука, FPS и разрешение — всё прозрачно и воспроизводимо.
  • Масштабирование. Batch обработка на десятки/сотни роликов и параллелизация — через очереди, cron, Docker.
  • Интеграция с ИИ‑сервисами: автосубтитры, перевод, уборка шумов, апскейл и т. п. Cм. наш AI‑редактор, готовые пайплайны и API/SDK.

Архитектура пайплайна авто‑обработки

Типовой поток данных:

  1. Ingest: импорт исходников, проверка форматов и метаданных (ffprobe).
  2. Normalize: ресемплинг, кадрирование/паддинг, целевой FPS, цветовое пространство.
  3. Edit: нарезка и склейка, кадр‑точные переходы, авто‑монтаж.
  4. Enhance: стабилизация, шумоподавление звука, апскейл до 4K, компрессия.
  5. Brand: интро/аутро, лого, обложки/превью, обрезка/поворот под вертикаль.
  6. Language: авто‑саб, перевод, TTS‑озвучка, транскрипт, суммаризация.
  7. Export: профили под YouTube, TikTok/Shorts, Telegram и т. д.
  8. QA + Analytics: проверки, публикация, аналитика видео.

![Схема пайплайна Python + FFmpeg — блоки и поток данных]

Быстрый старт: установка и структура проекта

  • Установите FFmpeg/FFprobe. macOS: brew install ffmpeg. Ubuntu/Debian: sudo apt install ffmpeg. Windows: скачайте сборку из официального репозитория.
  • Python-библиотеки (опционально): pip install ffmpeg-python python-dotenv watchdog requests.

Пример структуры:

  • project/
    • input/ — исходники
    • output/ — результаты
    • logs/ — логи
    • scripts/ — Python‑скрипты

Пример: batch обработка каталога (нормализация, кодеки, FPS)

Ниже простой скрипт, который проходит по папке, конвертирует в H.264/AAC, нормализует громкость и приводит к 1080p/30fps.

import subprocess, sys
from pathlib import Path

INPUT_DIR = Path('input')
OUTPUT_DIR = Path('output')
OUTPUT_DIR.mkdir(exist_ok=True)

VIDEO_EXT = {'.mp4', '.mov', '.mkv', '.avi', '.webm'}


def run(cmd):
    print(' '.join(cmd))
    subprocess.run(cmd, check=True)


def transcode(in_path: Path, out_path: Path):
## Масштаб с сохранением пропорций + паддинг до 1920x1080, SAR=1 (квадратные пиксели)
    vf = (
        "scale=w=1920:h=1080:force_original_aspect_ratio=decrease," \
        "pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1"
    )

    cmd = [
        'ffmpeg', '-y', '-hide_banner',
        '-i', str(in_path),
        '-vf', vf, '-r', '30',
        '-c:v', 'libx264', '-preset', 'slow', '-crf', '18',
        '-c:a', 'aac', '-b:a', '160k', '-af', 'loudnorm=I=-16:LRA=11:TP=-1.5',
        '-movflags', '+faststart',
        str(out_path)
    ]
    run(cmd)


if __name__ == '__main__':
    files = [p for p in INPUT_DIR.rglob('*') if p.suffix.lower() in VIDEO_EXT]
    if not files:
        print('Нет входных файлов в input/')
        sys.exit(0)
    for p in files:
        rel = p.relative_to(INPUT_DIR)
        out = (OUTPUT_DIR / rel).with_suffix('.mp4')
        out.parent.mkdir(parents=True, exist_ok=True)
        transcode(p, out)

Советы:

  • Для вертикали используйте crop/rotate перед pad (см. vertical‑форматы).
  • Для более лёгких файлов — -crf 20–23 или профиль компрессии. Для максимально высокого качества — -crf 16–18.

Нарезка и склейка: быстрые шаблоны

  • Быстрая нарезка без перекодирования (если кодеки подходят):
ffmpeg -ss 00:00:05 -to 00:00:15 -i in.mp4 -c copy clip.mp4
  • Кадр‑точная нарезка (с перекодированием):
ffmpeg -ss 5 -i in.mp4 -to 10 -c:v libx264 -c:a aac precise_clip.mp4
  • Склейка через concat demuxer (без перекодирования; все файлы должны совпадать по параметрам):
echo "file 'clip1.mp4'" > list.txt
echo "file 'clip2.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4
  • Или через filter_complex (с перекодированием):
ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac merged.mp4

См. готовые инструменты для склейки и авто‑монтажа.

Сабы, перевод и озвучка через API интеграции

Схема:

  1. Транскрипция ⇒ SRT/JSON сегменты. 2) Перевод SRT. 3) Опционально: TTS‑озвучка + сведение.

Пример Python‑псевдокода с REST API:

import requests, json

API = 'https://your-asr.example.com'

with open('input/in.mp4', 'rb') as f:
    r = requests.post(f'{API}/transcribe', files={'file': f})
segments = r.json()['segments']  # [{'start':0.2,'end':1.8,'text':'...'}]
## Сохранить SRT
def to_srt(segs, path):
    def fmt(t):
        h=int(t//3600); m=int((t%3600)//60); s=t%60
        return f"{h:02d}:{m:02d}:{s:06.3f}".replace('.', ',')
    with open(path,'w',encoding='utf-8') as s:
        for i,sg in enumerate(segs,1):
            s.write(f"{i}
{fmt(sg['start'])} --> {fmt(sg['end'])}
{sg['text']}

")

to_srt(segments, 'subs_ru.srt')
## Перевод SRT (любой MT‑API)
tr = requests.post('https://your-mt.example.com/translate', json={'lang':'en','srt':open('subs_ru.srt').read()}).json()
open('subs_en.srt','w',encoding='utf-8').write(tr['srt'])

Наложение сабов (burn‑in):

ffmpeg -i output/ready.mp4 -vf "subtitles=subs_en.srt:force_style='Fontsize=20,Outline=1'" -c:a copy out_subbed.mp4

Озвучка TTS: сгенерируйте файл озвучки и замените аудио‑дорожку:

ffmpeg -i output/ready.mp4 -i voice_en.mp3 -map 0:v -map 1:a -shortest -c:v copy -c:a aac dubbed.mp4

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

Конвертация кодеков и пресеты

Ниже краткая шпаргалка для ffmpeg для видео и аудио:

Сценарий Видео Аудио Аргументы FFmpeg Примечание
Универсальная публикация H.264 AAC -c:v libx264 -preset medium -crf 18 -c:a aac -b:a 160k -movflags +faststart Максимальная совместимость (веб/соцсети)
Экономия места H.265 AAC/Opus -c:v libx265 -crf 23 -preset slow Медленнее кодирует, лучше битрейт/качество
Современная эффективность AV1 Opus/AAC -c:v libsvtav1 -crf 28 -preset 6 Отличный VOD, поддержка постепенно растёт
Аппаратное ускорение NVENC AAC -c:v h264_nvenc -cq 19 -preset p5 Высокая скорость на GPU, чуть ниже эффективность

Дополнительно см. параметры длины и FPS и профили компрессии.

Улучшение и эффекты: стабилизация, шумоподавление, фон

  • Стабилизация: простая — deshake; более продвинутая — vidstab (если собран в вашей сборке FFmpeg).
ffmpeg -i in.mp4 -vf deshake=rx=32:ry=32:edge=mirror -c:a copy out_stable.mp4
  • Шумоподавление/резкость:
ffmpeg -i in.mp4 -vf "hqdn3d=1.5:1.5:6:6,unsharp=3:3:0.5:3:3:0.0" -c:a copy clean_sharp.mp4

Автоматизация: планировщики, Docker, логирование

  • Планирование: cron/systemd (Linux) или Task Scheduler (Windows). Пример cron — «каждые 10 минут сканировать папку и обрабатывать»:
*/10 * * * * /usr/bin/python3 /path/scripts/batch.py >> /path/logs/batch.log 2>&1
  • Docker: упакуйте FFmpeg + зависимости; удобно для деплоя на сервер (локальный сервер).
  • Мониторинг папок: watchdog в Python для реактивной обработки новых файлов.
  • Логи и метрики: пишите JSON‑логи, собирайте статусы задач, длительность этапов, битрейты; подключите аналитику видео.
  • Интеграции: webhooks из вашего CMS, телеграм‑бот для статусов (Telegram‑боты), публикация в соцсети (YouTube, TikTok). См. API/SDK.

Тестирование качества и аналитика

  • Валидация параметров (ffprobe):
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,avg_frame_rate,codec_name,pix_fmt -of json out.mp4
  • Контроль деградации: -lavfi ssim/psnr при сравнении исходник ⇒ результат.
  • Чек‑лист публикации: субтитры синхронны, громкость нормирована, пик‑уровни не клиппируют, битрейт не занижен, предпросмотр корректный. См. чек‑лист качества.
  • Приватность и безопасность: анонимизируйте метаданные, соблюдайте политику данных. См. конфиденциальность и право и безопасность.

Полезные сниппеты FFmpeg

  • Кадр‑превью/обложка: ffmpeg -i in.mp4 -vf "thumbnail,scale=1280:-1" -frames:v 1 cover.jpg (см. обложки).
  • Быстрая публикация для веба: -movflags +faststart.
  • Кадровая сетка для сториборда: -vf "select='not(mod(n,60))',scale=640:-1,tile=5x5".
  • Вертикальная кадрировка 9:16: -vf "crop=in_h*9/16:in_h,scale=1080:1920" (см. вертикальные форматы).
  • Шортсы/ри́лс: обрезка + 60 сек, см. Shorts/Reels‑cutter.

Частые ошибки и решения

  • Рассинхрон звука: используйте кадр‑точную нарезку (перекодирование) или -ss после -i с -accurate_seek.
  • Конкатенация «в копию»: все дорожки должны совпадать (кодек, профиль, частоты). Иначе — через filter_complex concat с перекодированием.
  • Субтитры не отображаются: проверьте кодировку SRT (UTF‑8) и доступность шрифтов. При burn‑in можно задать fontsdir.
  • VFR⇒CFR: когда требуется постоянный FPS, явное -r + -vsync 2.
  • Windows‑пути и пробелы: используйте кавычки; в Python — pathlib.
  • Производительность: используйте -preset медленнее для качества, быстрее — для скорости; при наличии GPU — NVENC/VAAPI/QSV.

Короткая памятка по выбору инструмента

Что сделать CLI или Python Почему
Разовый ререндер 10–20 файлов CLI‑одноразовый скрипт Быстро и просто
Регулярная batch обработка Python‑оркестрация Логи, ретраи, кэш, API
Сложные фильтры + ИИ Python + внешние сервисы Гибкая интеграция, воспроизводимость

![Скриншот логов batch‑обработки с прогрессом и метриками]

Вывод и следующий шаг

Python + FFmpeg — это практичный способ построить предсказуемый и расширяемый видеопроцессинг: нарезка и склейка, саб и перевод, конвертация кодеков, компрессия, стабилизация и многое другое. Соберите свой минимальный пайплайн, затем добавьте интеграции и автоматизацию.

Готовы ускорить продакшн? Посмотрите наши готовые пайплайны, примеры API/SDK, автоматизацию авто‑монтажа и ассистентов (ChatGPT‑ассистент, персональный помощник). А для публикации — используйте профили под YouTube, TikTok и Telegram.

Получить Reels-Boss бесплатно