Come ordinare e unire molti file .ts?

6

Ho molti piccoli file (circa 500). Sono nel giusto ordine. Vorrei unirmi a loro. I comandi di Linux sono anche benvenuti perché posso compilarli nel mio OS X. Il comando cat *.ts > masi.ts non funziona bene. Il risultato si ferma in alcuni punti. Sto indagando sul motivo per cui ciò si verifica. Alcune parti dei video non sono in ordine.

Nomi di parti di video in cui ogni file ha un prefisso HRmasi453-27012016.mp4.ts

1.ts
2.ts
...
100.ts
101.ts
...
200.ts
...
300.ts

quindi il nome file è HRmasi453-27012016.mp4-01.ts ... HRmasi453-27012016.mp4-300.ts . Il comando cat *.ts > masi.ts non organizza il video nell'ordine sequenziale. Penso che dovrei fare una lista prima di tutti gli articoli in ordine. Quindi, unisci.

Pseudocodice

  1. Crea un elenco di video nell'ordine
  2. Unisci cat items in list
    • Fai qualcosa come filename = prefix + itemInList senza creare un nuovo elenco nel ciclo while.
    • cat filename >> result.ts

Come puoi unirti ai molti file video, .ts, file?

    
posta Léo Léopold Hertz 준영 27.01.2016 - 14:21
fonte

4 risposte

8

Ho bisogno di prefigurarlo dicendo che non ho lavorato con .ts file Non so se possono essere semplicemente concatenati usando cat e come hai visto perché sono numericamente nominati vengono confusi quando si usa cat *.ts > masi.ts perché ordina lessicograficamente, quindi l'uso di una lista ordinata è in ordine. Con questo in mente, ecco cosa ho fatto per creare un elenco di 500 nomi numerici chiamati .ts e quindi concatenarli usando l'elenco.

Ho creato per la prima volta 500 file con nome numerico .ts contenenti il numero del nome file .ts come controllo. Ho usato for i in {1..500}; do echo $i > $i.ts; done Questi non erano effettivamente validi .ts file tuttavia mi permetteva di avere 500 file con cui lavorare e poi vedevo che erano concatenati nell'ordine corretto quando aprivano il file combined.ts per vedere una lista numerica ordinata all'interno il file.

Dato che hai già il 500% di file con estensione co_de, in Terminale fai quanto segue:

cd ts_files_directory
echo {1..500}.ts | tr " " "\n" > tslist
while read line; do cat $line >> combined.ts; done < tslist


Aggiornato per includere il nome file effettivo per il tuo commento alla mia risposta e la tua domanda aggiornata.

Quanto segue presuppone che gli unici numeri in .ts con uno zero iniziale (zero) siano, ad esempio, 01 ... 09 e che tu modifichi itemInList nella porzione 500 del comando sull'effettivo count .

Cambia directory a cui contiene i file {100..500} .

cd ts_files_directory

I seguenti due comandi creano il file .ts che è un elenco ordinato numericamente dei nomi di file di destinazione da utilizzare con tslist per evitare il problema di ordinamento lessicografico.

echo 'HRmasi453-27012016.mp4-'{01..99}.ts | tr " " "\n" > tslist
echo 'HRmasi453-27012016.mp4-'{100..500}.ts | tr " " "\n" >> tslist

Con la lista ordinata numericamente creata, usa la seguente linea di comando per concatenare in base al contenuto del file cat .

while read line; do cat $line >> combined.ts; done < tslist
    
risposta data 27.01.2016 - 16:27
fonte
0

Anche se non l'ho fatto da solo, ho visto discussioni in cui le persone hanno combinato più file video usando la versione a riga di comando di FFMPEG.

Credo che ci sia una versione per Mac in modo da non doverla compilare dal sorgente su ffmpeg.org ma oltre a questo qualcun altro dovrà verificarlo e aiutarti nella corretta sintassi del comando.

    
risposta data 27.01.2016 - 14:55
fonte
0

cat? .ts ??. ts ???. ts > all.ts

    
risposta data 30.08.2016 - 06:47
fonte
0

Modo molto semplice basato su documenti ffmpeg; la risposta accettata è più complicata.

  1. per prima cosa stampa tutto l'elenco di file in un file: mylist.txt, dai l'estensione per il tuo file, ecco .ts

    printf "file '%s'\n" ./*.ts > mylist.txt
    
  2. finalmente unisci il file usando l'elenco txt, l'ultimo file del nome del parametro unito, usa la stessa estensione dei file sorgenti.

    ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.ts
    

maggiori informazioni sulla concatenazione:

link

    
risposta data 07.11.2017 - 19:06
fonte

Leggi altre domande sui tag