Можете ли вы склеить 1-минутный клип из файла большего размера, не перекодируя его?
-
08-07-2019 - |
Вопрос
У меня есть сайт, который позволяет людям загружать большие видеофайлы в различных форматах (avi, mp4, mkv и flv). Мне нужно сгенерировать 1-минутный «образец» из файла большего размера, который был загружен, и образец должен быть в том же формате, иметь те же размеры кадра и скорость передачи в битах, что и исходный файл. Есть ли способ просто вырезать часть файла в новый файл? Предпочтительно в ffmpeg (или любом другом инструменте, если ffmpeg невозможен).
Решение
Сначала вы захотите понять, как на самом деле работают видеофайлы. Вот несколько руководств, объясняющих, что: чрезмерно Упрощенное руководство по интернет-видео .
Затем вы можете попробовать различные инструменты, которые могут помочь с вырезкой образца. Одним из них является flvtool (если вы вводите FLV) или FFmpeg . С помощью FFmpeg вы можете указать время начала и время окончания, и он попытается вырезать только то, что вы просите (но ему нужно будет найти ближайший ключевой кадр, чтобы начать нарезку).
Вот команда FFmpeg, чтобы прочитать файл с именем input.flv, запустить 15 секунд видео, а затем вырезать следующие 60 секунд, но в остальном сохранить те же параметры для аудиокода и видеокодека и записать его в выходной файл:
ffmpeg -i input.flv -ss 15 -t 60 -acodec copy -vcodec copy output.flv
Наконец, если вы хотите, вы можете написать компьютерный код на C или C ++ (используя библиотеки libav FFmpeg) или Java (используя Xuggler ), чтобы программно сделать это, но это довольно продвинуто для вашего случая использования.
Другие советы
Если у вас возникли проблемы с синхронизацией авто и видео, как это было у меня, может помочь следующее (можно найти на другом веб-сайте):
ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv
Как отмечает Эван, подход в принятом ответе может привести к потере синхронизации аудио / видео. Однако его решение неверно, поскольку -sameq
был удален.
Как указано на https://trac.ffmpeg.org/wiki/Seeking в Опция code> -ss должна стоять перед -i
, а не после. Это исправило проблему для меня.
Следующая опция - использовать переключатель -fs
. Пример: р>
ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv
Извлеките 500 мегабайт (500 & # 215; 1000 & # 215; 1000 байтов + & # 8216; издержки мультиплексирования & # 8217;) из выбранного источника. & # 8211; на основе размера файла, как вы можете сказать
Одна любовь. И уважение.