2

Могу ли я использовать ffmpeg, чтобы сделать одно видео, которое берет разные сегменты из разных видео?

1.webm, 2.webm, 3.webm, 4.webm 

Это мои 4 видео файла. Я хочу 10 секунд от каждого видео. Сегменты указаны мной.

ffmpeg -i 1.webm -1 2.webm -i 3.webm -i 4.webm -ss 00:00:00 -t 10 -ss 00:00:10  \
-t 10 -ss 00:00:20 -t 10 -ss 00:00:30 -t 10;

Выше не настоящая команда, которая работает. Могу ли я получить что-то подобное программно?

1 ответ1

2

Вы не можете сделать это в одной команде. Однако, если вы работаете в Linux и используете Bash (или аналогичные) в качестве оболочки, все, что нужно, - это две команды. Обратите внимание , что это работает , только если видео все имеет точно такое же видео и аудио кодеков и базы времени (кадры в секунду, и т.д.).

1. Создайте список видео и время начала

Сначала вы должны создать список редактирования, содержащий следующее. Давайте назовем это videos:

1.webm 00:00:00
2.webm 00:00:10
3.webm 00:00:20

Обратите внимание, что это не поддерживает имена видео с пробелами.

2. Разделить видео

Теперь мы создадим временную папку для хранения наших небольших видео. Давайте назовем это tmp . Затем вы можете разделить ваши файлы следующим образом:

while read video time; do ffmpeg -i $video -ss $time -t 10 -c copy tmp/$video; done < videos

Здесь -t 10 означает, что мы отрежем 10 секунд от видео, начиная с отметки времени, определенной -ss . Вы также можете использовать -to вместо -t чтобы отрезать его до определенной точки.

Если все ваши входные видео имеют разные видео и аудио кодеки, вам нужно перекодировать видео на этом этапе. Для этого вы должны заменить часть -c copy на конкретные настройки видео и аудио кодека, например -c:v libx264 -c:a libfaac для видео и аудио H.264 / AAC.

3. Объединить видео

Теперь, используя протокол concat , мы можем объединить файлы обратно:

ffmpeg -f concat -i <(for f in tmp/*.webm; do echo "file '$f'"; done) -c copy output.webm

Это все, что вам нужно. Он работает путем динамического создания файла конкатенации на лету. В противном случае вам придется создать его вручную в соответствии с документацией concat.

Наконец вы можете почистить папку tmp .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .