3

Скачивая видеопоток с помощью curl, я получил ~ 400 * .ts файлов, каждый размером около 1 МБ. Они последовательно пронумерованы video1.ts, video2.ts, ... video400.ts. Теперь мне нужно объединить их в один файл, очевидно, в правильном порядке (поэтому после video10.ts должен следовать video11.ts, а не video110.ts).

Я пытался придумать что-то вроде "потому что я в * .ts; делать ....", но я просто не могу понять это. Также ffmepg и avconv слишком сложны для меня.

Кто знает, как объединить эти 400 файлов в нужном порядке, в новый файл? Спасибо!

6 ответов6

1

Это старый вопрос, но я надеюсь, что ответ может повысить ценность для других.

Основываясь на этой ссылке, следующий скрипт выполнит работу, предполагая, что ffmpeg 1.1 и позже.

#!/bin/bash

for i in `seq 0 $totalNumberOfTsFiles`; do echo  file "'${i}.ts'" >> Input.txt ; done
/home/hq6/bin/ffmpeg-2.3.3/ffmpeg -f concat -i Input.txt  -c copy output.ts
1

Какого рода трюк:

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

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

0

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

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

где $input - это имя файла (ов) или экранированное регулярное выражение (например, \*. ts).

0

Лучшее решение:

Скачайте TSSplitter, нажмите вкладку "JOIN" и перетащите все файлы в окно!

0

Попробуйте следующую команду:

cat video?.ts video??.ts video???.ts  > out.ts
0

Все ответы на этот вопрос, которые вводят читателей в заблуждение относительно объединения файлов TS перед запуском ffmpeg, неверны. Чтобы гарантировать, что аудио и видео не будут не синхронизированы во время сборки потока mp4, следует использовать плохо документированную, но важную функцию -f concat в ffmpeg.

    delimiterBeforeFileNumber="-"
    ls |egrep '[.]ts$' \
        |sort "-t$delimiterBeforeFileNumber" -k2,2n \
        |sed -r "s/(.*)/file '\1'/" >ts.files.txt

    ffmpeg -f concat -i ts.files.txt -c copy tsw.014.ts.mp4

Две подготовительные строки кода просто создают файл, содержащий список файлов TS в этом формате строки, который используется ffmpeg как список воспроизведения.

    file 'seg-37-a.ts'

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