Frage:
Wie bestelle und füge ich viele .ts-Dateien zusammen?
Léo Léopold Hertz 준영
2016-01-27 19:21:40 UTC
view on stackexchange narkive permalink

Ich habe viele kleine Dateien (ungefähr 500). Sie sind in der richtigen Reihenfolge. Ich möchte sie zusammenführen. Linux-Befehle sind ebenfalls willkommen, da ich sie in meinem Betriebssystem X kompilieren kann. Der Befehl cat * .ts > masi.ts funktioniert nicht gut. Das Ergebnis stoppt an einigen Stellen. Ich untersuche, warum dies auftritt. Einige Teile der Videos sind nicht in Ordnung.

Namen von Teilen von Videos, in denen jede Datei ein Präfix HRmasi453-27012016.mp4.ts

  1.ts2.ts hat ... 100.ts101.ts ... 200.ts ... 300.ts  

Der Dateiname lautet also HRmasi453-27012016.mp4-01.ts . HRmasi453-27012016.mp4-300.ts . Der Befehl cat * .ts > masi.ts organisiert das Video nicht in der Reihenfolge. Ich denke, ich sollte vorher eine Liste aller Artikel in der richtigen Reihenfolge erstellen. Dann zusammenführen.

Pseudocode

  1. Erstellen Sie eine Liste der Videos in der Reihenfolge
  2. Zusammenführen von Katzenelementen in der Liste
    • Führen Sie beispielsweise filename = prefix + itemInList aus, ohne eine neue Liste in der while-Schleife zu erstellen.
    cat filename >> result.ts
  3. ol>

    Wie können Sie die vielen Videodateien verbinden? , .ts, Dateien?

Sie sind sich nicht sicher, ob dies funktionieren würde, aber Sie könnten es zuerst mit nur wenigen Dateien versuchen. Haben Sie versucht, es dann mit "cat" zu verketten?
@user3439894 Vielen Dank für den Vorschlag!Es gibt einige Fehler.Einige Lücken in einigen Phasen, die ich nicht verstehe.Ich werde die Flash-Show noch einmal aufnehmen und dann erneut testen.Manchmal ist die Reihenfolge der Videos gemischt, wahrscheinlich aufgrund der Benennung.
Sind die einzigen Zahlen in `itemInList` mit einer führenden 0 (Null), z. B. 01 ... 09, und wie hoch ist die tatsächliche Gesamtzahl der Dateinummern?
Siehe meine aktualisierte Antwort.
Fünf antworten:
user3439894
2016-01-27 21:27:27 UTC
view on stackexchange narkive permalink

Ich muss dies vorwegnehmen, indem ich sage, dass ich nicht mit .ts -Dateien gearbeitet habe. Ich weiß nicht, ob sie einfach mit cat verkettet werden können oder nicht, und wie Sie gesehen haben, weil Sie sind numerisch benannt und werden bei Verwendung von cat * .ts > masi.ts verwechselt, da sie lexikografisch sortiert werden. Daher ist die Verwendung einer geordneten Liste angebracht. In diesem Sinne habe ich Folgendes getan, um eine Liste mit 500 numerisch benannten .ts -Dateien zu erstellen und diese dann mithilfe der Liste zu verketten.

Ich habe zuerst 500 numerisch benannte .ts -Dateien, die die Nummer des Dateinamens .ts als Steuerelement enthalten. Ich habe für i in {1..500} verwendet. Echo $ i > $ i.ts; erledigt Dies waren keine wirklich gültigen .ts -Dateien, aber es erlaubte mir, 500 Dateien zu bearbeiten und dann zu sehen, dass sie beim Öffnen der kombinierten in der richtigen Reihenfolge verkettet wurden. ts -Datei, um eine geordnete numerische Liste in der Datei anzuzeigen.

Da Sie bereits über die 500 .ts -Dateien verfügen, gehen Sie im Terminal wie folgt vor:

  cd ts_files_directoryecho {1..500} .ts | tr "" "\ n" > tslistwhile read line; do cat $ line >> kombiniert.ts; erledigt < tslist  


Aktualisiert, um den tatsächlichen Dateinamen gemäß Ihrem Kommentar zu meiner Antwort und Ihrer aktualisierten Frage aufzunehmen.

Im Folgenden wird davon ausgegangen dass die einzigen Zahlen in itemInList mit einer führenden 0 (Null) zB 01 ... 09 sind und dass Sie 500 im {100..500 ändern } Teil des Befehls zum tatsächlichen count.

Ändern Sie das Verzeichnis in das Verzeichnis, in dem sich die .ts -Dateien befinden.

  cd ts_files_directory  

Die folgenden beiden Befehle erstellen die Datei tslist , eine numerisch geordnete Liste der Zieldateinamen, die mit cat , um das Problem der lexikografischen Sortierung zu vermeiden.

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

Wenn die numerisch geordnete Liste erstellt wurde, verwenden Sie die folgende Befehlszeile, um basierend auf dem Inhalt der Datei tslist zu verketten.

  während der Lesezeile; do cat $ line >> kombiniert.ts; erledigt < tslist  
Der Dateiname enthält tatsächlich auch "HRmasi453-27012016.mp4-".Eine Verkettung ist also erforderlich.Ich führe erfolglos "do cat" HRmasi453-27012016.mp4- "$ line" aus. Auch Fehler in "echo" HRmasi453-27012016.mp4- "{1 ... 500}". Was denkst du, wo es am besten ist?Verketten Sie das Präfix mit den Elementen der Liste? Ich denke, es ist nicht klug, die Zeichenfolge in die Listenelemente aufzunehmen, was in der Realität viel Platz beansprucht. Ich denke, es ist besser, zu verketten, als zuletzt in do cat irgendwie.
Großartig!Es scheint zu funktionieren.Ich muss einige Globs durch "Echo" hinzufügen. HRmasi453-2701201? .Mp4 - "{01..99} .ts |tr "" "\ n"> tslist`.
Ich habe den Thread zur Qualitätssicherung erweitert.Ich studiere die Qualitätssicherung des Videos, das hier zusammengeführt wird http://unix.stackexchange.com/q/258113/16920
@Masi, Wenn die Dateinamen so waren, wie Sie sie gezeigt und bis zum letzten `-` angegeben haben, z."HRmasi453-27012016.mp4-", dann verstehe ich nicht, warum Sie es in "HRmasi453-2701201? .Mp4-" ändern mussten.Trotzdem bin ich froh, dass Sie das verwenden konnten, was ich vorgestellt habe.Außerdem möchte ich hinzufügen, dass es viel einfacher wäre, die Situationsantworten genau zu geben, wenn Sie beim Stellen einer Frage genauere und vollständigere Informationen geben würden.Nur ein Gedanke.:) :)
Danke für deinen Kommentar!Ich gebe mein Bestes, um die Fälle so klar wie möglich zu beschreiben.Oft entwickelt sich der Fall jedoch, wenn ich ihn nach der Interaktion mit Ihnen besser verstehe.Daher fühle ich mich dafür verantwortlich, den Fall so klar zu bearbeiten und zu aktualisieren, dass auch Sie davon profitieren können.Aus diesem Grund habe ich den Fall auch um einen neuen Thread erweitert, da ich mich dafür verantwortlich fühle, die Erkenntnisse zu teilen, die ich bei der Anwendung des Codes bei meinen Herausforderungen gelernt habe.Sie sind tatsächlich herausfordernder als ich jemals gedacht habe, aber überschaubar.
Nebenbei bemerkt, wenn Sie die Liste der "ts" -Dateien anhand ihres Zeitstempels einlesen möchten, können Sie Zeile 2 oben in "ls -tr * .ts |" änderntr "" "\ n"> tsList`
stackdave
2017-11-08 00:06:43 UTC
view on stackexchange narkive permalink

Sehr einfache Methode basierend auf ffmpeg-Dokumenten;die akzeptierte Antwort ist komplizierter.

  1. ] druckt zuerst die gesamte Liste der Dateien in einer Datei aus: mylist.txt, geben Sie die Erweiterung für Ihre Datei, hier ist .ts
      printf "file '% s' \ n" ./*.ts > mylist.txt
     
  2. ] Verbinden Sie die Datei schließlich mithilfe der txt-Liste, der zuletzt verbundenen Parameternamen-Datei, und verwenden Sie dieselbe Erweiterung wie die Quelldateien.
      ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.ts
     
  3. ol> Weiterführende Informationen über die Verkettung: Klasse https://trac.ffmpeg.org/wiki/Concatenate
Können Sie bitte Ihre Antwort mit der von user3439894 vergleichen?
Was meinst du?Meine Antwort ist eine einfache Basis in ffmpeg-Dokumenten
`printf" file '% s' \ n "./*.ts> mylist.txt` schlägt aus genau dem gleichen Grund fehl, aus dem das OP überhaupt erst veröffentlicht wurde.`mylist.txt` enthält aufgrund der Benennung keine ordnungsgemäß geordnete Liste von` .ts`-Dateien und das Video wird beschädigt, da die `.ts`-Dateien in der Liste nicht in der richtigen Reihenfolge sind.Unter diesem Link finden Sie den Inhalt von mylist.txt: https://paste.ee/p/ufu0S
@Léo Léopold Hertz 준영, Siehe meinen Kommentar zur Antwort von stackdave.
Lassen Sie einfach die anderen Leute mit Upvote oder Downvote urteilen, verlieren Sie nicht Ihre Zeit
Steve Chambers
2016-01-27 19:55:35 UTC
view on stackexchange narkive permalink

Obwohl ich dies nicht selbst getan habe, habe ich Diskussionen gesehen, in denen Leute mehrere Videodateien mit der Befehlszeilenversion von FFMPEG kombiniert haben.

Ich glaube, es gibt eine Mac-Version, also müssen Sie nicht Kompilieren Sie es aus dem Quellcode auf ffmpeg.org, aber darüber hinaus muss jemand anderes dies überprüfen und Ihnen bei der richtigen Befehlssyntax helfen.

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

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

Entsprechend der Frage haben alle Dateien das Präfix "HRmasi453-27012016.mp4.ts", sodass die verwendeten Platzhalter hier möglicherweise etwas verfeinert werden müssen.
Joe Hillman
2020-01-19 11:08:48 UTC
view on stackexchange narkive permalink

Ich verstehe, Sie suchen nach einer eleganten Befehlszeilenlösung.Wenn Sie jedoch MKVToolnix verwenden, können Sie die erste TS-Datei laden und eine unbegrenzte Anzahl von ts-Dateien anhängen (zusammenführen), um sie anschließend in ein mkv zu muxen (z. B. 10, 5 Sekunden ts-Videos werden in ein 50-Sekunden-mkv muxen)).Sie können das mkv dann in tsmuxergui auf a ts zurücksetzen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...