Domanda:
Come ordinare e unire molti file .ts?
Léo Léopold Hertz 준영
2016-01-27 19:21:40 UTC
view on stackexchange narkive permalink

Ho molti file di piccole dimensioni (circa 500). Sono nell'ordine giusto. Vorrei unirli. Anche i comandi Linux sono i 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.ts2.ts ... 100.ts101.ts ... 200.ts ... 300.ts  

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

Pseudocodice

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

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

Non sono del tutto sicuro che funzioni, tuttavia potresti provare prima con pochi file, hai provato a concatenare poi con `cat`?
@user3439894 Grazie per la proposta!Ci sono alcuni bug.Alcune lacune in alcune fasi, che non capisco.Registrerò di nuovo il flash show e poi proverò di nuovo.A volte, l'ordine dei video è misto, probabilmente a causa della denominazione.
Gli unici numeri in "itemInList" con uno 0 iniziale (zero) per esempio, 01 ... 09 e qual è il conteggio totale del numero di file effettivo?
Vedi la mia risposta aggiornata.
Cinque risposte:
#1
+8
user3439894
2016-01-27 21:27:27 UTC
view on stackexchange narkive permalink

Devo premerlo dicendo che non ho lavorato con i file .ts Non so se possano essere semplicemente concatenati usando cat e come hai visto perché sono denominati numericamente, si confondono quando si usa cat * .ts > masi.ts perché ordina lessicograficamente, quindi è necessario utilizzare un elenco ordinato. Con questo in mente, ecco cosa ho fatto per creare un elenco di 500 file .ts denominati numericamente e poi concatenarli utilizzando l'elenco.

Ho prima creato 500 file denominati numericamente .ts file contenenti il ​​numero del nome file .ts come controllo. Ho usato per i in {1..500}; fare echo $ i > $ i.ts; fatto Questi non erano effettivamente file .ts validi, tuttavia mi ha permesso di avere 500 file con cui lavorare e poi vedere che erano concatenati nell'ordine corretto quando si apriva il combinato. ts per visualizzare un elenco numerico ordinato all'interno del file.

Dato che hai già i 500 file .ts , in Terminale procedi come segue:

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


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

Quanto segue presuppone che gli unici numeri in itemInList con uno 0 iniziale (zero) sono ad es. 01 ... 09 e che si modifica 500 in {100..500 } parte del comando nell'effettivo count.

Cambia la directory in quella che contiene i file .ts .

  cd ts_files_directory  

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

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

Dopo aver creato l'elenco ordinato numericamente, utilizzare la seguente riga di comando per concatenare in base al contenuto del file tslist .

  durante la lettura della riga; do cat $ line >> combined.ts; done < tslist  
Il nome del file in realtà contiene anche `HRmasi453-27012016.mp4-`.Quindi è necessario concatenare.Eseguo senza successo "do cat" HRmasi453-27012016.mp4- "$ line" `. Anche errore in" echo "HRmasi453-27012016.mp4-" {1 ... 500} ". Cosa pensi dove sia meglioconcatenare il prefisso agli elementi della lista? Penso che non sia intelligente includere la stringa negli elementi della lista, occupando molto spazio nella realtà. Penso che sia meglio concatenare poi infine in do cat in qualche modo.
Grande!Sembra funzionare.Devo aggiungere dei glob con `echo 'HRmasi453-2701201? .Mp4 -' {01..99} .ts |tr "" "\ n"> tslist`.
Ho esteso il filo alla garanzia della qualità.Sto studiando la garanzia di qualità della fusione video qui http://unix.stackexchange.com/q/258113/16920
@Masi, Se i nomi dei file fossero come mostrati e dichiarati fino all'ultimo "-", ad es.`HRmasi453-27012016.mp4-`, quindi non vedo perché hai bisogno di cambiarlo in '' HRmasi453-2701201? .Mp4-`.Detto questo, sono comunque contento che tu abbia potuto utilizzare ciò che ho presentato.Inoltre, vorrei aggiungere che se fornissi informazioni più accurate e più complete quando fai una domanda, sarebbe molto più facile fornire risposte precise alla situazione.Solo un pensiero.:)
Grazie per il tuo commento!Faccio del mio meglio per fornire dettagli così chiari sui casi.Spesso, però, il caso si evolve quando lo capisco meglio dopo l'interazione con Te.Pertanto, mi sento responsabile nel modificare e aggiornare il caso in modo così chiaro che anche tu puoi trarne vantaggio.Pertanto, ho anche esteso il caso in un nuovo thread perché mi sento responsabile nel condividere le conoscenze che ho appreso nell'applicazione del codice nelle mie sfide.In realtà sono più impegnativi di quanto avessi mai pensato, ma gestibili.
Come nota a margine, se vuoi leggere l'elenco dei file `ts` in base al loro timestamp, puoi cambiare la riga 2 sopra in` ls -tr * .ts |tr "" "\ n"> tsList`
#2
+1
stackdave
2017-11-08 00:06:43 UTC
view on stackexchange narkive permalink

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

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

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

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

maggiori informazioni sulla concatenazione:

https://trac.ffmpeg.org/wiki/Concatenate

Puoi confrontare la tua risposta con quella di user3439894?
cosa intendi?la mia risposta è semplice base nei documenti ffmpeg
`printf" file '% s' \ n "./*.ts> mylist.txt` fallisce per lo stesso identico motivo per cui l'OP è stato pubblicato in primo luogo."mylist.txt" non conterrà un elenco ordinato correttamente di file ".ts" a causa del loro nome e il video sarà danneggiato perché i file ".ts" nell'elenco sono fuori uso.Vedere questo collegamento per i contenuti di mylist.txt: https://paste.ee/p/ufu0S
@Léo Léopold Hertz 준영, Vedi il mio commento alla risposta di stackdave.
lascia che siano le altre persone a giudicare con voto positivo o negativo, non perdere tempo
#3
  0
Steve Chambers
2016-01-27 19:55:35 UTC
view on stackexchange narkive permalink

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

Credo che ci sia una versione per Mac, quindi non devi compilarlo dal sorgente su ffmpeg.org ma oltre a questo qualcun altro dovrà verificarlo e aiutarti con la sintassi del comando corretta.

#4
-1
user199255
2016-08-30 09:47:07 UTC
view on stackexchange narkive permalink

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

Secondo la domanda, tutti i file hanno il prefisso `HRmasi453-27012016.mp4.ts`, quindi i caratteri jolly usati potrebbero richiedere qualche raffinamento qui.
#5
-1
Joe Hillman
2020-01-19 11:08:48 UTC
view on stackexchange narkive permalink

Mi risulta che stai cercando un'elegante soluzione a riga di comando.Tuttavia, se usi MKVToolnix, puoi caricare il primo file TS e aggiungere (unire) un numero illimitato di file ts da muxare successivamente in ordine in un mkv (ad esempio 10, video ts di 5 secondi verranno mux in un mkv di 50 secondi).È quindi possibile convertire il mkv in un ts in tsmuxergui.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...