
У меня есть видео, которое является футбольным матчем. Я хотел бы сократить время before the game
, during half time
и в конце концов конец игры.
Общая длина клипа 1h 51m
или111m
В идеале разрезы и время следующие:
+------------+-------------+---------------------+
| Start Time | Finish Time | Clip Duration |
+------------+-------------+---------------------+
| 1:30 | 47:30 | 47:30 |
| 53:00 | 100:00 | 47 |
+------------+-------------+---------------------+
Однако мое видео заканчивается на
ffmpeg -ss 00:01:30 -i Tripod_Camera.mp4 -t 00:47:30 -ss 00:53:00 -t 00:47:00 -c copy VideoClip.mp4
решение1
Создайте файл
input.txt
, содержащий временные метки (в секундах) для вырезания:file 'input.mp4' inpoint 90 outpoint 2850 file 'input.mp4' inpoint 3180 outpoint 6000
Запустить
ffmpeg
для объединения сдемультиплексор concat:ffmpeg -f concat -i input.txt -c copy output.mp4
Это будетпотоковое копирование, поэтому перекодирование не происходит, то есть весь процесс будет быстрым, а качество сохранится. Однако на ключевых кадрах будут сделаны разрезы, поэтому точность может быть недостаточной. Если нужна большая точность, придется использовать гораздо более медленный метод, например, использовать фильтры (a)trim, (a)setpts и concat, которые требуют перекодирования.
Если у вас рассинхронизация аудио/видео, тополучить временные метки ключевых кадров, используйте временные метки ключевых кадров в качестве своих
inpoint
, но добавьте 0,001 к каждойinpoint
временной метке вinput.txt
.
решение2
ИспользоватьВидеовырезкакоторый я написал для этой цели. Благодаря собственному мультеку он точнее ffmpeg и предоставляет вам графический интерфейс.
Поскольку он основан на ffmpeg (или его библиотеках), нарезка происходит без потерь.