Skip to content

Latest commit

 

History

History
96 lines (83 loc) · 8.35 KB

File metadata and controls

96 lines (83 loc) · 8.35 KB

TripCut

Десктопный (Windows) редактор для быстрой нарезки видео из поездок без перекодирования и вырезания кадров в фото с правильной датой съёмки и GPS-координатами в EXIF. Камеры-источники: DJI Osmo Action (без GPS, трек пишется отдельно) и GoPro (GPS внутри файла, GPMF).

Два режима

  • ⚡ Быстрый (кнопка «Папка → фото»): выбираешь папку — все видео встают на таймлайн по порядку (LRV-прокси GoPro пропускаются), переключение роликов PgUp/PgDn, / нарезает фото. Нарезка видео отключена, ничего не индексируется — мгновенный старт даже на большой папке.
  • ✏ Полный редактор: как ниже — q/w/e, компиляция. Из быстрого режима переключает кнопка «В полный редактор» (загруженная папка остаётся на таймлайне).

Горячие клавиши

Клавиша Действие
Q убрать всё левее бегунка (в сегменте под курсором)
W убрать всё правее бегунка
E рассечь сегмент на два
Del удалить сегмент под курсором
/ вырезать кадр в фото (EXIF: дата съёмки + GPS)
Space играть/пауза
/ ±5 сек
, / . кадр назад / вперёд
Alt+← / Alt+→ кусок под курсором — на позицию левее / правее
Alt+↑ / Alt+↓ выбранный клип в панели справа — выше / ниже
Ctrl+Z отмена операции

Порядок кусков

Куски на таймлайне переставляются мышью: тяни блок за полоску с насечкой сверху (или зажми Alt и тяни за любое место блока) — жёлтая каретка показывает, куда он встанет. Клик по остальной части блока по-прежнему перематывает. Клипы целиком переставляются перетаскиванием строк в панели справа — все куски одного видео едут вместе, их взаимный порядок сохраняется. Любую перестановку отменяет Ctrl+Z. Порядок кусков = порядок склейки при компиляции.

Можно загрузить несколько роликов — они встают на один таймлайн, «Скомпилировать» склеивает все оставшиеся сегменты в один MP4 в том порядке, в каком они лежат на таймлайне.

Переходы между кусками

Галочка «Плавные переходы» в настройках включает короткое затемнение на стыках — «моргание». Заданная длительность (по умолчанию 0.2 с) делится поровну между концом одного куска и началом следующего, начало и конец фильма не затемняются. Перекодируются только кусочки под само затемнение (до ближайшего ключевого кадра), середина сегмента копируется как есть — суть видео не съедается. Звук на стыке гасится тем же фейдом.

Разные форматы в одном монтаже

Куски, снятые в разных форматах (GoPro 5312×4648 29.97 fps + телефон 4K 60 fps и т.п.), склеить копированием нельзя — ffmpeg в таком случае не сообщает об ошибке, но ломает таймстампы, и видеодорожка обрывается на первом же чужом куске (звук при этом идёт до конца). TripCut выбирает основной формат сборки — тот, в котором снято больше всего материала, — предупреждает перед компиляцией и приводит к нему выбивающиеся куски (вписывает в кадр, поля чёрные, частота кадров и звука приводятся). Результат дополнительно проверяется: если видеодорожка короче общей длины, компиляция падает с ошибкой, а не отдаёт молча битый файл.

Кодировщик

Перекодирование (smart-cut, переходы, приведение чужих форматов) по умолчанию идёт на аппаратном кодировщике — Intel QSV или NVIDIA NVENC, что найдётся. Пригодность проверяется пробным кодированием кадра нужного размера: наличия кодировщика в ffmpeg мало (NVENC, например, отказывает при старом драйвере, у QSV/AMF бывает предел разрешения). Если ничего не работает — libx265/libx264, качество то же, но в разы медленнее: 5312×4648 на QSV идёт ~11 fps против ~0.5 fps у libx265. Галочка в настройках выключает аппаратный путь.

Режимы реза

  • По ключевым кадрам (по умолчанию): 100% без перекодирования, границы прилипают к ближайшему ключевому кадру (~0.5–1 c у экшн-камер).
  • Smart-cut (галочка в настройках): рез точно по кадру, перекодируются только 1–2 сек на стыках.

Дата и локация фото

  • Дата съёмки кадра = время старта записи клипа (из метаданных камеры, правится двойным кликом по клипу) + позиция в ролике. Пишется в EXIF DateTimeOriginal + в mtime файла.
  • Координаты (режимы в настройках): GPS из самого файла GoPro (GPMF, GPS5/GPS9) → загруженный GPX-трек (интерполяция по времени, часовой пояс камеры задаётся в настройках) → одна ручная точка.
  • Формат: JPEG q=1 (по умолчанию) или PNG; папка настраивается (по умолчанию TripCut_photos рядом с видео).

Структура

  • tripcut/ffmpeg_tools.py — ffprobe/ffmpeg: пробинг, ключевые кадры, рез copy/smart, кадр, склейка
  • tripcut/geo.py — GPX + парсер GPMF (GoPro)
  • tripcut/exifw.py — EXIF (piexif; PNG — eXIf-чанк)
  • tripcut/model.py — сегменты, операции q/w/e, компиляция
  • tripcut/player.py / timeline.py / gui.py — PySide6 + libmpv
  • bin/ — ffmpeg.exe, ffprobe.exe, libmpv-2.dll (кладутся при сборке; в репо не хранятся)
  • build_win.ps1 — сборка на Windows (venv + PyInstaller onedir)
  • tests/test_core.py — тесты ядра (Linux, системный ffmpeg)
  • tests/test_reorder.py — тесты перестановки кусков/клипов (ffmpeg не нужен, Qt offscreen)
  • tests/test_compile.py — тесты сборки: разные форматы в одном монтаже и переходы

Запуск из исходников (Windows)

pip install -r requirements.txt
# положить ffmpeg.exe, ffprobe.exe, libmpv-2.dll в bin\
python main.py