Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Десктопный редактор нарезки видео без перекодирования + извлечение кадров в фото с реальными EXIF-датой и GPS из GPX-трека или GoPro GPMF

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages