У меня 30 минут видеофайла, но я хочу извлечь видео с 00:09:23 до 00:25:33.
Я могу определить начальную позицию с -ss
, но я не смог найти ее для конечной позиции. Любая помощь, пожалуйста?
У меня 30 минут видеофайла, но я хочу извлечь видео с 00:09:23 до 00:25:33.
Я могу определить начальную позицию с -ss
, но я не смог найти ее для конечной позиции. Любая помощь, пожалуйста?
Убедитесь, что вы скачали последнюю версию ffmpeg
и не используете ту, которая входит в ваш дистрибутив (например, Ubuntu). Упакованные версии из разных дистрибутивов часто устарели и не ведут себя должным образом.
Или скомпилируйте это самостоятельно.
Используйте это, чтобы вырезать видео из [start]
на [duration]
:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4
Здесь параметры означают следующее:
-ss
указывает время начала, например, 00:01:23.000
или 83
(в секундах)-t
указывает продолжительность клипа (в том же формате). ffmpeg
также есть флаг для указания времени окончания с -to
.-c copy
копирует первый битовый поток видео, аудио и субтитров из входного в выходной файл без их перекодирования. Это не повредит качеству и заставит команду работать в течение нескольких секунд.Обратите внимание, что в более старых версиях ffmpeg эта команда может не соответствовать кадрам при копировании битовых потоков.
Если у вас старая версия ffmpeg и вам нужна точность кадров, используйте вместо этого:
ffmpeg -i in.mp4 -ss [start] -t [duration] -c copy out.mp4
Однако есть один недостаток. Видео должно быть декодировано до тех пор, пока оно не достигнет положения, подразумеваемого -ss
, и только тогда оно начнет копировать поток битов. Это может занять много времени, особенно для действительно длинных видео.
Если вы не укажете опцию -c copy
, ffmpeg
автоматически перекодирует выходное видео и аудио в соответствии с выбранным форматом. Для получения высококачественного видео и аудио прочитайте Руководство по кодированию x264 и Руководство по кодированию AAC соответственно.
Например:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4
Как объяснено в разделе « Поиск с помощью FFmpeg): при использовании -ss
перед -i
в FFmpeg 2.1 и новее поиск выполняется с точностью до кадра при перекодировании видео (т. Е. Без использования -c copy
). Так что вам не нужно беспокоиться о том, чтобы поставить -ss
за -i
для скорости.
Если вам нужно использовать старую версию ffmpeg
и вы не можете использовать опцию -to
, вы можете создать список редактирования точек входа и выхода и преобразовать их в точки с продолжительностью. Для этого вы можете использовать этот скрипт на Ruby, который я написал, который вычисляет разницу:
require "Time"
def time_diff(time1_str, time2_str)
t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
(t - t.gmt_offset).strftime("%H:%M:%S.%L")
end
Например:
time_diff("00:09:23.000", "00:25:33.000")
=> "00:16:10.000"
Я думаю, что вы можете использовать следующую команду сейчас.
ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile
Посмотрите также ffmpeg Doc или эту вики-страницу.
Странно, что никто не предлагал 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
Вы можете использовать эти два метода, которые работают для 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>
- начало фрагмента видео, которое нужно вырезать. Формат:00:00:00.0000
, что означает часы: минуты: секунды: миллисекунды.
<duration>
- длительность части видео, которая должна быть вырезана. Тот же формат, что и выше.Примеры:
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 секунд.
Вы можете использовать это
ffmpeg -sameq -ss clip_start -t duration -i original.ogg clip.ogg
Здесь вы должны указать продолжительность видео. то есть. 00:25:33-00:09:23
Я использую следующий синтаксис, чтобы вырезать видео с помощью ffmpef:
ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]
-t используется для установки продолжительности в секундах - вы не можете указать время окончания, но это должно работать для вас.