Я использую ffmpeg, чтобы вырезать раздел большого файла следующим образом:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
Часть работает нормально , но -t
игнорируется. Он корректно удаляет начальные указанные секунды, указанные с помощью, -ss
но затем продолжает идти до конца ввода с копией.
Есть ли способ использовать ffmpeg, чтобы обрезать конец видео без его перекодирования?
Ответы:
Вы можете использовать
-ss
опцию, чтобы указать начальную метку времени, и-t
опцию, чтобы указать длительность кодирования. Метки времени должны быть вHH:MM:SS.xxx
формате или в секундах (s.msec
).Следующий код обрезает первые 30 секунд, а затем обрезает все, что происходит через 10 секунд:
Обратите внимание, что
-t
это опция вывода, которую всегда нужно указывать после-i
.Несколько советов:
-ss
после-i
, вы получите более точный поиск за счет более медленного выполнения в целом. Смотрите также: Ищу с FFmpegВы можете использовать
-to
вместо,-t
чтобы указать временную метку, к которой вы хотите сократить. Таким образом, вместо-i <input> -ss 30 -t 10
вас также можно сделать-i <input> -ss 30 -to 40
то же самое.Если ваш ffmpeg не поддерживает
-c
или-to
, скорее всего, он сильно устарел. Соберите новую версию самостоятельно или загрузите статическую сборку с их домашней страницы. Это действительно не сложно.источник
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
убрала начальный черный экран, подробности смотрите в его ответе.Как уже упоминалось, размещение
-ss
до (гораздо быстрее) или после (более точно)-i
имеет большое значение. В разделе «Быстрый и точный поиск» на странице поиска ffmpeg рассказывается, как получить оба, и я их использовал, и это имеет большое значение. В основном, вы ставите-ss
до и после-i
, просто оставьте достаточно времени до того места, где вы хотите начать резку, чтобы получить еще один ключевой кадр. Пример: если вы хотите сделать 1-минутный клип, от 9 минут 0 секунд до 10 минут 0 секунд в Video.mp4, вы можете сделать это быстро и точно, используя:Первый
-ss
ищет быстро (приблизительно) 8 минут 0 секунд, а затем второй-ss
ищет точно 9 минут 0 секунд, а-t 00:01:00
клип вынимает 1 минут 0 секунд.Также обратите внимание на этот важный момент на этой странице: «Если вы используете
-ss
с-c:v copy
, результирующий битовый поток может оказаться прерывистым, не воспроизводимым или не синхронизированным с аудиопотоком, поскольку ffmpeg вынужден использовать / разбивать только на i-кадры. "Это означает, что вам нужно перекодировать видео, даже если вы хотите просто скопировать его или рискнуть быть нестабильным и не синхронизированным. Вы можете попробовать только
-c copy
сначала, но если видео отстой, вам нужно будет сделать это заново.источник
-c:a copy
этому способу поиска.Я обнаружил, что в
-ss
сочетании с-c copy
результатом получилось полсекундная отбивная на старте.Чтобы избежать этого, вы должны удалить
-c copy
(который по общему признанию сделает транскод).источник
-c copy
исправило его.ВРУЧНУЮ
Откройте файл в медиаплеере, который будет перемещаться по кадрам, и воспроизведите файл AVISynth с такими данными, как:
Затем вырезать с точным форматом времени:
а также
Теперь создайте текстовый файл с видеофайлами с таким содержимым, как:
Запустите ffmpeg:
источник
У меня
-t
вариант не работал, но-vframes
работал. Я предпочитаю использовать#frames
, так как я бы предпочел использовать I-Frames и узнал GOP для использования видеоffprobe
.Командная строка, которая работала для меня:
Между прочим, размещение
-ss
во фронте-i
имеет большое значение во времени выполнения.источник
-vframes
(или-frames:v
) должно следовать после,-i
потому что это опция вывода.Как и в случае с user225366, опция -t не работает для коротких видео, но она подходит для более длинных видео. Для коротких видео кажется, что -frames: v лучше. Это то, что сработало для меня.
Копия -acodec должна быть добавлена, если у видео есть аудио, как показывают другие ответы.
источник
Я вижу, что не многие упоминают об этом (я не эксперт, так что, возможно, есть подвох), но если в вашем файле есть другие потоки, такие как субтитры, и другие метаданные, такие как главы и так далее, можно вырезать / обрезать и сохранить все потоки с помощью следующая команда
С
-map 0
вас берут все потоки в файле, а с-c copy
собой копируют все их как есть.Если
-to
пропустить начало через,-ss
вы обрежете входное видео с начала до 60 секунд.Работа с
map
ним полезна также в том случае, если вы хотите, чтобы в разрезе содержались только определенные потоки (возможно, вам не нужны все аудиоисточники в файле или только некоторые субтитры).Я использую это, когда мне нужно разделить большие файлы MKV, которые не могут быть сохранены в хранилище FAT32.
источник