Можете ли вы склеить 1-минутный клип из файла большего размера, не перекодируя его? - PullRequest
4 голосов
/ 29 октября 2009

У меня есть сайт, который позволяет людям загружать большие видеофайлы в различных форматах (avi, mp4, mkv и flv). Мне нужно сгенерировать 1-минутный «образец» из большего файла, который был загружен, и образец должен быть в том же формате, иметь те же размеры кадра и скорость передачи данных, что и исходный файл. Есть ли способ просто вырезать часть файла в новый файл? Предпочтительно в ffmpeg (или любом другом инструменте, если ffmpeg невозможен).

Ответы [ 4 ]

15 голосов
/ 06 ноября 2009

Сначала вы захотите понять, как на самом деле работают видеофайлы. Вот набор учебных пособий, объясняющих, что: Чрезмерно упрощенное руководство по интернет-видео .

Затем вы можете попробовать различные инструменты, которые могут помочь с вырезкой образца. Одним из них является 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 ), чтобы сделать это программным путем, но это довольно продвинуто для вашего случая использования.

1 голос
/ 14 января 2015

Как отмечает Эван, подход в принятом ответе может привести к потере синхронизации аудио / видео. Однако его решение не является правильным, потому что -sameq был удален.

Как указано в https://trac.ffmpeg.org/wiki/Seeking, опция -ss должна предшествовать -i, а не после. Это исправило проблему для меня.

1 голос
/ 30 августа 2013

Если у вас проблемы с синхронизацией авто и видео, как это было у меня, может помочь следующее (можно найти на другом сайте):

ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv
0 голосов
/ 19 января 2016

Следующая опция - использовать переключатель -fs. Пример:

ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv

Извлечение 500 мегабайт (500 × 1000 × 1000 байт + «накладные расходы мультиплексирования») из выбранного источника. - на основе размера файла, как вы можете сказать

Одна любовь. И уважаю.

...