Це неможливо зробити в одній команді. Однак, якщо ви працюєте на Linux і маєте Bash (або подібні) в якості оболонки, все, що потрібно, - це дві команди. Зверніть увагу, що це працює лише в тому випадку, якщо всі відео мають абсолютно однакові кодеки для відео та аудіо та часову базу (fps, тощо).
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папку.
concatdec_selectможе зробити все ваші вимоги в одному кроці superuser.com/a/1020455/15252