Обрезать видео
Перетащите ручки к нужному фрагменту и сохраните — картинка копируется нетронутой, ничего не теряется. Файл не покидает вашу машину.
Файл читает и перекодирует ваш собственный браузер. Ни один запрос никуда его не отправляет — у этой страницы просто нет сервера, куда его загружать.
Вопросы
Теряется ли качество при обрезке?
В режиме по умолчанию — нет. «Без перекодирования» пропускает картинку нетронутой, поэтому потери поколения нет, и работает это в несколько раз быстрее: 0,20 с против 0,60 с при перекодировании тех же трёх секунд. Плата — размер: видео сжимается группами, начинающимися с ключевого кадра, поэтому если точка входа попадает в середину группы, файл тащит кадры до предыдущего ключевого. Воспроизведение всё равно начинается ровно там, где вы поставили, но файл может оказаться больше, чем при перекодировании того же фрагмента.
Когда лучше перекодировать?
Когда нужен файл поменьше или другой формат. При перекодировании записываются только выбранные кадры, поэтому рез в середине группы выходит заметно легче: в тестах 4,1 МБ против 6,7 МБ за те же три секунды. Стоит это одного поколения сжатия, которое при используемом здесь качестве не видно.
Можно обрезать под заданный размер?
Да — выберите «уложиться в размер» и лимит, например 10 МБ для Discord или 25 МБ для почты. Нужный битрейт следует из длины выделения, поэтому более короткий фрагмент вмещает больше качества в тот же лимит. Если первый проход промахнётся, будет поправка и один повтор.
Звук сохраняется?
Да, синхронно и обрезанный по тому же диапазону. Его можно намеренно убрать галочкой «убрать звук» — полезно, когда клип идёт туда, где звук не нужен, и файл при этом становится меньше.
Какие файлы подходят?
MP4 и MOV с H.264, а также WebM — всё, что ваш браузер умеет и декодировать, и кодировать. Форматы прямо с камеры вроде ProRes или raw браузер обычно не открывает вовсе; сначала сделайте прокси.
Другие инструменты
Build this into your own project
Trimming video without re-encoding it — the same way this page does it, on the user's machine, with no server. Take the code, or hand the prompt to a coding agent.
import { Input, Output, Conversion, BlobSource, BufferTarget, Mp4OutputFormat, ALL_FORMATS } from 'mediabunny';
const input = new Input({ source: new BlobSource(file), formats: ALL_FORMATS });
const output = new Output({ format: new Mp4OutputFormat(), target: new BufferTarget() });
const conversion = await Conversion.init({
input, output,
trim: { start: 20, end: 35 },
// Omit `video` entirely to copy the track through; add
// { forceTranscode: true } to re-encode for a smaller file.
});
await conversion.execute(); Add "trim a video" to my project. It must run in the browser — no upload, no server.
Requirements:
- Use the "mediabunny" npm package (WebCodecs). Not ffmpeg.wasm: ~30 MB and needs SharedArrayBuffer,
which requires COOP/COEP headers that break third-party scripts.
- Offer two modes. Default: copy the video through untouched — pass NO video options to
Conversion.init and mediabunny will not re-encode. Measured 0.20s against 0.60s for a re-encode of
the same three seconds.
- Explain the trade honestly: video is stored in groups starting at a keyframe, so a copied cut whose
in-point falls mid-group carries the frames back to that keyframe. Playback still starts exactly
where the user set it, but the file is larger — 6.7 MB copied against 4.1 MB re-encoded in testing.
- The re-encode mode needs forceTranscode: true. Without it mediabunny correctly notices the
transcode is unnecessary and copies anyway, which makes the two modes identical.
- Give the user handles on a timeline with a live preview, not two number fields. Accept typed times
in any of 12.5, 1:04 or 1:04.5.
- Keep audio in sync and trimmed to the same range, with an option to drop it.
Reference implementation: https://life2film.com/tools/video-trimmer/
The engine is documented for agents, and every tool page is available as
markdown by adding .md to its address.