6 votes

Comment ordonner et fusionner plusieurs fichiers .ts ?

J'ai beaucoup de 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 endroits. Je cherche à savoir pourquoi cela se produit. Certaines parties des vidéos ne sont pas dans l'ordre.

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

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

donc le nom du 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 d'abord faire une liste de tous les éléments dans l'ordre. Ensuite, fusionner.

Pseudocode

  1. Faites une liste des vidéos dans l'ordre
  2. Fusionner cat items in list
    • Faites quelque chose comme filename = prefix + itemInList sans créer une nouvelle liste dans la boucle while.
    • cat filename >> result.ts

Comment joindre les nombreux fichiers vidéo .ts ?

8voto

user3439894 Points 52496

Je dois commencer par dire que je n'ai pas travaillé avec .ts je ne sais pas s'ils peuvent être simplement concaténés en utilisant cat et comme vous l'avez vu, parce qu'ils sont nommés numériquement, ils sont mélangés lors de l'utilisation de la fonction cat *.ts > masi.ts parce qu'il trie lexicographiquement, donc l'utilisation d'une liste ordonnée est en ordre. En gardant cela à l'esprit, voici ce que j'ai fait pour créer une liste de 500 noms numériques .ts et ensuite les concaténer en utilisant la liste.

J'ai d'abord créé 500 noms numériques .ts contenant le numéro de la .ts nom de fichier comme contrôle. J'ai utilisé for i in {1..500}; do echo $i > $i.ts; done Ils n'étaient pas vraiment valides. .ts mais cela m'a permis de travailler avec 500 fichiers et de constater qu'ils étaient concaténés dans le bon ordre lors de l'ouverture de l'application. combined.ts pour voir une liste numérique ordonnée dans le fichier.

Puisque vous avez déjà les 500 .ts dans le Terminal, faites ce qui suit :

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

Mis à jour pour inclure le nom de fichier réel selon 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) en tête, par exemple 01...09 et que vous changez 500 dans le {100..500} de la commande à la partie réelle compter .

Changez de répertoire pour celui qui contient le .ts des fichiers.

cd ts_files_directory

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

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

Une fois la liste numériquement ordonnée créée, utilisez la ligne de commande suivante pour effectuer une concaténation basée sur le contenu du fichier tslist fichier.

while read line; do cat $line >> combined.ts; done < tslist

1voto

stackdave Points 119

Une méthode très simple basée sur la documentation de ffmpeg ; la réponse acceptée est plus compliquée.

  1. Tout d'abord, imprimez la liste de tous les fichiers dans un fichier : mylist.txt , donnez l'extension de votre fichier, ici c'est .ts.

    printf "file '%s'\n" ./*.ts > mylist.txt
  2. enfin joindre le fichier en utilisant la liste txt, le dernier paramètre nom du fichier joint, utiliser la même extension que les fichiers sources.

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

plus d'informations sur la concaténation :

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

0voto

Steve Chambers Points 21588

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

Je crois qu'il existe une version Mac pour que vous n'ayez pas à la compiler à partir des sources sur ffmpeg.org, mais au-delà, quelqu'un d'autre devra le vérifier et vous aider avec la bonne syntaxe de commande.

-1voto

user199255 Points 7

Cat ?.ts ? ?.ts ? ??.ts > all.ts

-1voto

Joe Hillman Points 1

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X