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