Question:
Comment commander et fusionner de nombreux fichiers .ts?
Léo Léopold Hertz 준영
2016-01-27 19:21:40 UTC
view on stackexchange narkive permalink

J'ai de nombreux petits fichiers (environ 500). Ils sont dans le bon ordre. Je voudrais les fusionner. Les commandes Linux sont également les bienvenues car je peux les compiler dans mon OS X. La commande cat * .ts > masi.ts ne fonctionne pas bien. Le résultat s'arrête à certains moments. J'étudie pourquoi cela se produit. Certaines parties des vidéos ne sont pas dans l'ordre.

Noms des parties de vidéos où chaque fichier a un préfixe HRmasi453-27012016.mp4.ts

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

donc le nom de fichier est HRmasi453-27012016.mp4-01.ts .. . HRmasi453-27012016.mp4-300.ts . La commande cat * .ts > masi.ts n'organise pas la vidéo dans l'ordre séquentiel. Je pense que je devrais faire une liste avant de tous les éléments dans l'ordre. Ensuite, fusionnez.

Pseudocode

  1. Faire une liste de vidéos dans l'ordre
  2. Fusionner les éléments de chat dans la liste
    • Faites quelque chose comme filename = prefix + itemInList sans créer une nouvelle liste dans la boucle while.
    • cat filename >> result.ts

Comment pouvez-vous joindre les nombreux fichiers vidéo , .ts, fichiers?

Vous ne savez pas du tout si cela fonctionnerait mais vous pourriez essayer d'abord avec seulement quelques fichiers, avez-vous essayé de concaténer ensuite avec `cat`?
@user3439894 Merci pour la proposition!Il y a quelques bugs.Quelques lacunes à certaines étapes, que je ne comprends pas.Je vais enregistrer à nouveau le flash show, puis tester à nouveau.Parfois, l'ordre des vidéos est mélangé, probablement à cause du nom.
Les seuls nombres dans `itemInList` sont-ils avec un 0 (zéro) en tête, par exemple 01 ... 09 et quel est le nombre total de numéros de fichiers réels?
Voir ma réponse mise à jour.
Cinq réponses:
#1
+8
user3439894
2016-01-27 21:27:27 UTC
view on stackexchange narkive permalink

Je dois commencer par dire que n'ayant pas travaillé avec les fichiers .ts , je ne sais pas s'ils peuvent être simplement concaténés en utilisant cat et comme vous l'avez vu parce que ils sont nommés numériquement, ils sont mélangés lors de l'utilisation de cat * .ts > masi.ts car il trie lexicographiquement, donc utiliser une liste ordonnée est dans l'ordre. Dans cet esprit, voici ce que j'ai fait pour créer une liste de 500 fichiers .ts nommés numériquement, puis les concaténer à l'aide de la liste.

J'ai d'abord créé 500 fichiers nommés numériquement .ts fichiers contenant le numéro du nom de fichier .ts comme contrôle. J'ai utilisé pour i dans {1..500}; faire echo $ i > $ i.ts; done Ce n'étaient pas des fichiers .ts valides, mais cela m'a permis d'avoir 500 fichiers avec lesquels travailler et de voir ensuite qu'ils étaient concaténés dans le bon ordre lors de l'ouverture du combiné. ts pour voir une liste numérique ordonnée dans le fichier.

Puisque vous avez déjà les 500 fichiers .ts , dans Terminal, procédez comme suit:

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


Mis à jour pour inclure le nom de fichier réel par votre commentaire à ma réponse et votre question mise à jour.

Ce qui suit suppose que les seuls nombres dans itemInList avec un 0 (zéro) non significatif sont, par exemple, 01 ... 09 et que vous modifiez 500 dans le {100..500 } partie de la commande au count réel.

Remplacez le répertoire par celui qui contient les fichiers .ts .

  cd ts_files_directory  

Les deux commandes suivantes créent le fichier tslist qui est une liste numérotée des noms de fichiers cibles à utiliser avec cat afin d'éviter le problème de tri lexicographique.

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

Une fois la liste ordonnée numériquement créée, utilisez la ligne de commande suivante pour concaténer en fonction du contenu du fichier tslist .

  pendant la lecture de la ligne; do cat $ line >> shared.ts; done < tslist  
Le nom de fichier contient en fait également `HRmasi453-27012016.mp4-`.Donc, concaténer est nécessaire.Je lance sans succès `do cat" HRmasi453-27012016.mp4- "$ line" `. Échec également dans` echo "HRmasi453-27012016.mp4-" {1 ... 500} `. Que pensez-vous où il est préférable deconcaténer le préfixe aux éléments de la liste? Je pense qu'il n'est pas judicieux d'inclure la chaîne dans les éléments de la liste, en prenant beaucoup de place dans la réalité.
Génial!Cela semble fonctionner.J'ai besoin d'ajouter des globes par `echo 'HRmasi453-2701201? .Mp4 -' {01..99} .ts |tr "" "\ n"> tslist`.
J'ai étendu le fil à l'assurance qualité.J'étudie l'assurance qualité de la fusion vidéo ici http://unix.stackexchange.com/q/258113/16920
@Masi, Si les noms de fichiers étaient comme vous l'avez montré et indiqué jusqu'au dernier `-`, par exemple`HRmasi453-27012016.mp4-`, alors je ne vois pas pourquoi vous deviez le changer en `` HRmasi453-2701201? .Mp4-`.Cela dit, je suis néanmoins heureux que vous ayez pu utiliser ce que j'ai présenté.De plus, j'aimerais ajouter que si vous donniez des informations plus précises et plus complètes lorsque vous posez une question, il serait beaucoup plus facile de donner des réponses précises à la situation.Juste une pensée.:)
Merci pour votre commentaire!Je fais de mon mieux pour donner des détails aussi clairs que possible sur les cas.Souvent, cependant, le cas évolue lorsque je le comprends mieux après l'interaction avec Vous.Par conséquent, je me sens responsable de l'édition et de la mise à jour du cas si clair que vous pouvez également en bénéficier.Par conséquent, j'ai également étendu le cas dans un nouveau fil de discussion car je me sens responsable de partager les connaissances que j'ai apprises en appliquant le code dans mes défis.Ils sont en fait plus difficiles que je ne l'aurais jamais cru, mais gérables.
En remarque, si vous voulez lire la liste des fichiers `ts` par leur horodatage, vous pouvez changer la ligne 2 ci-dessus en` ls -tr * .ts |tr "" "\ n"> tsList`
#2
+1
stackdave
2017-11-08 00:06:43 UTC
view on stackexchange narkive permalink

Méthode très simple basée sur les docs ffmpeg;la réponse acceptée est plus compliquée.

  1. imprimez d'abord toute la liste des fichiers d'un fichier: mylist.txt, donnez l'extension de votre fichier, voici .ts

      printf "fichier '% s' \ n" ./*.ts > mylist.txt
    
  2.   ffmpeg -f concat -safe 0 -i mylist.txt -c copie output.ts
    

plus d'informations sur la concaténation:

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

Pouvez-vous comparer votre réponse à celle de l'utilisateur3439894?
Que voulez-vous dire?ma réponse est une base simple dans la documentation ffmpeg
`printf" fichier '% s' \ n "./*.ts> mylist.txt` échoue exactement pour la même raison que l'OP a été publié en premier lieu.`mylist.txt` ne contiendra pas une liste correctement ordonnée de fichiers` .ts` en raison de la façon dont ils sont nommés et la vidéo sera corrompue car les fichiers `.ts` de la liste sont dans le désordre.Voir ce lien pour le contenu de mylist.txt: https://paste.ee/p/ufu0S
@Léo Léopold Hertz 준영, Voir mon commentaire à la réponse de stackdave.
laissez simplement les autres juger avec un vote positif ou négatif, ne perdez pas votre temps
#3
  0
Steve Chambers
2016-01-27 19:55:35 UTC
view on stackexchange narkive permalink

Bien que je ne l'ai pas fait moi-même, j'ai vu des discussions où des gens ont combiné plusieurs fichiers vidéo en utilisant la version en ligne de commande de FFMPEG.

Je crois qu'il existe une version Mac, donc vous n'avez pas à le faire compilez-le à partir des sources sur ffmpeg.org, mais au-delà de cela, quelqu'un d'autre devra le vérifier et vous aider avec la syntaxe de commande appropriée.

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

chat? .ts ??. ts ???. ts> all.ts

Selon la question, tous les fichiers ont un préfixe de `HRmasi453-27012016.mp4.ts`, donc les jokers utilisés peuvent avoir besoin d'être affinés ici.
#5
-1
Joe Hillman
2020-01-19 11:08:48 UTC
view on stackexchange narkive permalink

Je comprends que vous recherchez une solution de ligne de commande élégante.Cependant, si vous utilisez MKVToolnix, vous pouvez charger le premier fichier TS et ajouter (fusionner) un nombre illimité de fichiers ts à multiplexer ultérieurement dans l'ordre dans un mkv (par exemple 10, 5 secondes de vidéos ts mux dans un mkv de 50 secondes).Vous pouvez ensuite multiplexer le mkv vers un ts dans tsmuxergui.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...