У меня есть сайт, который позволяет людям загружать большие видеофайлы в различных форматах (avi, mp4, mkv и flv). Мне нужно сгенерировать 1-минутный «образец» из большего загруженного файла, и образец должен быть в том же формате, иметь те же размеры кадра и скорость передачи битов, что и исходный файл. Есть ли способ просто вырезать часть файла в новый файл? Предпочтительно в ffmpeg (или любом другом инструменте, если ffmpeg невозможно).Можете ли вы объединить 1-минутный клип из большего файла, не перекодируя его?
ответ
Сначала вы захотите понять, как работают видеофайлы. Вот набор учебников, объясняющих это: Overly Simplistic Guide to Internet Video.
Затем вы можете попробовать различные инструменты, которые могут помочь в разрезе образца. Один из них - 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) программно это сделать, но это довольно сложная для вашего случая использования ,
отличный ответ, спасибо – Profane
Это может привести к проблемам с синхронизацией A/V - см. Мой ответ. –
Если у вас возникли проблемы с сохранением авто и видео синхронизируются, как я, следующее может помочь (найти на другом сайте):
ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv
'-sameq' был удален - см. Мой ответ. –
Как отмечает Эван, подход в принятом ответе может привести к потеря синхронизации A/V. Однако его решение неверно, потому что был удален -sameq
.
Как указано в https://trac.ffmpeg.org/wiki/Seeking, опция -ss
должна быть представлена до -i
не после. Это поставило вопрос для меня.
Следующая опция заключается в использовании переключателя -fs
. Пример:
ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv
Экстракт 500 мегабайт (500 × 1000 × 1000 байт + «муксинга накладные расходы») от выбранного источника. -based on filesize, как вы можете узнать
One love. И уважение.
Все зависит от того, где находятся ключевые кадры. –
Не уверен, что вы имеете в виду ... – 2009-10-29 03:58:00