Вы не можете сделать это в одной команде. Однако, если вы работаете в 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
.