Десктопный (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 + libmpvbin/— 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— тесты сборки: разные форматы в одном монтаже и переходы
pip install -r requirements.txt
# положить ffmpeg.exe, ffprobe.exe, libmpv-2.dll в bin\
python main.py