2012-01-11 17:59:52 +0000 2012-01-11 17:59:52 +0000
151
151

Вырезать часть из видеофайла из начальной позиции в конечную с FFmpeg

У меня есть видеофайл 30 минут, но я хочу вырезать видео с 00:09:23 до 00:25:33.

я могу определить стартовую позицию с -ss, но я не смог найти ни одного для конечной позиции. Помогите, пожалуйста?

Ответы (6)

255
255
255
2012-01-11 21:02:37 +0000

Установите ffmpeg

Убедитесь, что вы загрузили последнюю версию ffmpeg , и не используйте ту, которая поставляется с вашим дистрибутивом (например, Ubuntu). Упакованные версии различных дистрибутивов часто бывают устаревшими и ведут себя не так, как ожидалось.

Или скомпилируйте сами .

Как вырезать видео, без перекодирования

Используйте это для вырезания видео из [start] для [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

Здесь опции означают следующее:

  • -ss указывает время старта, e. g. 00:01:23.000 или 83 (в секундах)
  • -t указывает продолжительность ролика (того же формата).
  • Недавняя ffmpeg также имеет флаг для подачи времени окончания с -to .
  • -c copy копирует первое видео, аудио и поток субтитров с входа в выходной файл без их перекодирования. Это не повредит качеству и заставит команду работать в течение нескольких секунд.

Как вырезать видео, с перекодировкой

Если вы пропустите опцию -c copy, ffmpeg автоматически перекодирует видео и аудио на выходе в соответствии с выбранным вами форматом. Для получения высококачественного видео и аудио прочтите x264 Encoding Guide и AAC Encoding Guide , соответственно.

Например:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4
31
31
31
2015-05-07 02:30:48 +0000

Думаю, теперь вы можете использовать следующую команду.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

Посмотрите также ffmpeg Doc , или эта вики-страница .

15
15
15
2015-04-07 15:10:38 +0000

Странно, что никто не предложил trim фильтр .

Бросайте все, кроме второй минуты ввода:

ffmpeg -i INPUT -vf trim=60:120

Держите только первую секунду:

ffmpeg -i INPUT -vf trim=duration=1

Бросайте все, кроме секунды 13 до секунды 58:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT
6
6
6
2013-10-03 19:08:40 +0000

Вы можете использовать эти два метода, которые работают для Windows и Linux.

Есть два способа разделения видео файлов с помощью ffmpeg. Первый хорош сам по себе, более того - он быстрее, но иногда создает выходные файлы с определенными недостатками. Так что для таких случаев существует второй способ разделения видео файлов: он значительно медленнее, выходные файлы больше, но кажется, что они всегда имеют тот же уровень качества, что и входные файлы.

Способ 1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

Способ 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start> - начало части видео ffmpeg должно быть вырезано. Формат: 00:00:00.0000, что означает часы:минуты:секунды:миллисекунды.

  • <duration> - длительность части видео ffmpeg вырезается. Тот же формат, что и выше.

Examples:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg вырезает часть видеофайла, начиная с 1 часа 19 минут 0 секунд. Продолжительность вырезанной видеопоследовательности составляет 5 минут 0 секунд.

-1
-1
-1
2012-01-11 18:29:57 +0000

Вы можете использовать этот

ffmpeg -sameq -ss clip_start -t duration -i original.ogg clip.ogg

Здесь вы должны дать продолжительность видео. т.е. 00:25:33-00:09:23

-2
-2
-2
2012-01-11 18:27:11 +0000

Я использую следующий синтаксис для вырезания видео с ffmpef:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

  • используется для установки длительности в секундах - вы не можете указать время окончания, но это должно работать для вас.