Вырежьте видеофайл с помощью FFmpeg
Это командная строка, которую вы используете для извлечения части видеофайла (первые 30 секунд) без перекодирования и сохранения выбора в файл.
ffmpeg.exe -ss 00:00:00 -to 00:00:30 -i "D: \ media \ sample.mp4" -c копия "d: \ media \ sample_cut.mp4"
Приведенная выше команда извлекает первые 30 секунд видео и сохраняет его в отдельный файл с именем sample_cut.mp4
.
-ss
обозначает время начала-to
обозначает время окончания; FFmpeg прекращает вывод в указанной позиции.-i
это входной файл.-c
указывает используемый кодек. В этом случае кодирование не выполняется, поскольку мы использовалиcopy
.
Совет: вместо -to
вы также можете использовать -t
который обозначает продолжительность, а не конечную точку. Например, указание -s 00:00:10 -t 50
выбирает от 10 секунд до 60 секунд аудио / видео.
$config[ads_text6] not found
Кадры видео отсутствуют? Попробуйте метод кодирования
Во время воспроизведения, если в видеофайле (созданном с помощью последней команды) отсутствуют видеокадры в начале или в конце, вы можете использовать метод перекодирования . Однако кодирование – это медленный процесс. Запустите эту команду:
ffmpeg.exe -ss 00:00:00 -to: 00:00:30 -i "D: \ media \ sample.mp4" -c: v libx264 -c: копия "d: \ media \ sample_cut.mp4"
Он кодирует видео (используя кодировщик libx264
), но использует тот же аудиопоток (обозначается аргументом copy
.), Извлекает первые 30 секунд видео и сохраняет его в отдельный файл с именем sample_cut.mp4
.
Разделите видеофайл на несколько равных частей, используя FFmpeg
Теперь вы знаете, как вырезать часть аудио / видео файла и сохранить выделенный файл в файл. Что если вы хотите разделить видео на несколько частей с определенной продолжительностью или продолжительностью? Вы можете использовать следующую командную строку для каждого сегмента, который вы хотите вырезать:
ffmpeg.exe -ss 00:00:00 -to 00:00:30 -i "D: \ media \ sample.mp4" -c: копировать "d: \ media \ sample_part_1.mp4" ffmpeg.exe -ss 00: 00:30 - 00:01:00 -i «D: \ media \ sample.mp4» -c: копировать «d: \ media \ sample_part_2.mp4» ffmpeg.exe -ss 00:01:00 -to 00: 01:30 -i "D: \ media \ sample.mp4" -c: копия "d: \ media \ sample_part_3.mp4" ffmpeg.exe -ss 00:02:00 -в 00:02:30 -i "D : \ media \ sample.mp4 "-c: copy" d: \ media \ sample_part_4.mp4 "
Это будет сложно, если вам нужно разделить несколько файлов, верно? Есть легкая альтернатива!
Давайте использовать аргумент командной строки -segment файла FFmpeg.exe. Этот аргумент командной строки разбивает видеофайл на несколько частей, каждая из которых содержит указанную длину / длительность (например, 60 секунд каждая):
ffmpeg.exe -i "D: \ media \ sample.mp4" -f сегмент -segment_time 60 -c копия -reset_timestamps 1 "d: \ media \ sample_% 03d.mp4"
Имена выходных файлов будут называться sample_001.mp4, sample_002.mp4, sample_003.mp4 и т. Д.
Однако при использовании метода copy
при разделении видео разделение может быть неточным. Вы можете видеть, что каждая часть / файл имеет длину не более 60 секунд. Некоторые из них 57 секунд, а некоторые более 60 секунд в длину.
Метод перекодирования (для более точных сокращений)
Если вы хотите точно вырезать видео (каждая часть с фиксированной длительностью), вам нужно перекодировать видео во время разделения. Вот аргумент командной строки, который вы используете:
ffmpeg -i "D: \ Media \ sample.mp4" -c: v libx264 -segment_time 60 -g 9 -sc_threshold 0 -force_key_frames "expr: gte (t, n_forced * 9)" -f сегмент -reset_timestamps 1 "D: \ Media \ sample_% 03d.mp4"
Ну вот! Все части имеют одинаковую длину (максимум вариации 1 секунда), кроме, конечно, последнего клипа.