об'єднати/об'єднати/об'єднати сотні файлів ts в один файл ts

Завантажуючи відеопотік із завитками, я отримав ~ 400 * .ts файлів, кожен з яких розміром приблизно 1 Мб. Вони послідовно пронумеровані video1.ts, video2.ts, ... video400.ts. Тепер мені потрібно об'єднати їх у один файл, очевидно, у правильному порядку (так що video10.ts повинні слідувати відео11.ts, а не video110.ts).

Я намагався придумати щось на кшталт "для я в * .ts; робити ....", але я просто не можу зрозуміти це. Також ffmepg і avconv занадто складні для мене.

Хто знає, як приєднати ці 400 файлів до потрібного файла, у новий файл? Дякую!

3

5 Відповіді

Це старе питання, але я сподіваюся, що відповідь може принести користь іншим.

На основі > Input.txt ; done /home/hq6/bin/ffmpeg-2.3.3/ffmpeg -f concat -i Input.txt -c copy output.ts

Весь цикл для може бути замінений на щось подібне seq -f '% g.ts' 0 $ totalNumberOfTsFiles для подібного результату з набагато більш чистим командним рядком.
додано Автор Michael Kjörling, джерело
Джеймс Айві: Якщо у вас є нова ідея для іншого способу вирішення цієї проблеми, не намагайтеся розміщувати її в коментарі (і не редагуйте її в чужу відповідь); розмістити його як нову відповідь (у полі "Ваш відповідь" внизу сторінки). Якщо ви забули надіслати, ви можете переглянути його тут . Примітки: (1) Коли вихідний код ls є трубою, він автоматично використовує режим -1 . Ви можете побачити це, виконавши звичайний ls , а потім ls | cat . (2) ls сортує вихідні дані за назвою, якщо ви не накажете йому, тому вам не потрібно ls | sort .
додано Автор Scott, джерело

Що це таке трюк:

for i in `seq 1 400`; do cat "video$i.ts" >> newvideo.ts; done

але тепер звук не синхронізований на ~ 0,5 с, і кожні декілька секунд тишаться ~ 0,5 сек (імовірно, коли фрагменти склеюються).

1
додано

Найкраще рішення:

Завантажте TSSplitter , натисніть вкладку "JOIN" і перетягніть всі файли у вікно!

enter image description here

0
додано

filenames = "` ls -rt1 $ input | tr '\ t | sed '$ s /.$//' `"

ffmpeg -i "concat:$filenames" -c copy out.ts,

де $ input - це ім'я (а) файлу або виділене регулярне вираження (наприклад, *. ts).

0
додано

Спробуйте виконати таку команду:

cat video?.ts video??.ts video???.ts  > out.ts
0
додано
Тривалість out.ts , ймовірно, буде тривалістю першого відео.
додано Автор Geremia, джерело