6 votos

¿Cómo ordenar y fusionar muchos archivos .ts?

Tengo muchos archivos pequeños (unos 500). Están en el orden correcto. Me gustaría fusionarlos. Los comandos de Linux también son bienvenidos porque puedo compilarlos en mi OS X. El comando cat *.ts > masi.ts no funciona bien. El resultado se detiene en algunos puntos. Estoy investigando por qué ocurre esto. Algunas partes de los videos no están en orden.

Los nombres de las partes de los videos donde cada archivo tiene un prefijo HRmasi453-27012016.mp4.ts

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

así que el nombre del archivo es HRmasi453-27012016.mp4-01.ts ... HRmasi453-27012016.mp4-300.ts . La orden cat *.ts > masi.ts no organiza el video en el orden secuencial. Creo que debería hacer una lista antes de todos los elementos en orden. Luego, fusionar.

Pseudocódigo

  1. Haga una lista de videos en orden
  2. Fusión cat items in list
    • Haz algo como filename = prefix + itemInList sin crear una nueva lista en el bucle while.
    • cat filename >> result.ts

¿Cómo puedes unir los muchos archivos de video, .ts, archivos?

8voto

user3439894 Puntos 5883

Tengo que preanunciar esto diciendo que al no haber trabajado con .ts archivos que no sé si pueden ser simplemente concatenados usando cat y como viste, debido a que tienen nombres numéricos, se mezclan al usar cat *.ts > masi.ts porque se ordena lexicográficamente, así que usar una lista ordenada es lo correcto. Con eso en mente, esto es lo que hice para crear una lista de 500 nombres numéricos .ts y luego concatenarlos usando la lista.

Primero creé 500 nombres numéricos .ts archivos que contienen el número de la .ts nombre de archivo como control. Yo usé for i in {1..500}; do echo $i > $i.ts; done Estos no eran realmente válidos .ts Sin embargo, me permitió tener 500 archivos con los que trabajar y luego ver que estaban concatenados en el orden adecuado al abrir el combined.ts para ver una lista numérica ordenada dentro del archivo.

Como ya tienes los 500 .ts archivos, en la Terminal haga lo siguiente:

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

Actualizado para incluir el nombre de archivo real por su comentario a mi respuesta y su pregunta actualizada.

Lo siguiente supone que los únicos números en itemInList con un 0 (cero) delante son, por ejemplo, 01...09 y que cambias 500 en el {100..500} parte del comando a la actual cuenta .

Cambiar el directorio al que contiene el .ts archivos.

cd ts_files_directory

Los siguientes dos comandos crean el tslist que es una lista ordenada numéricamente de los nombres de los archivos de destino que se utilizarán con cat para evitar el problema de la clasificación lexicográfica.

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

Con la lista ordenada numéricamente creada, utilice la siguiente línea de comandos para concatenar en base al contenido de la tslist archivo.

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

0voto

Steve Chambers Puntos 5054

Aunque no lo he hecho yo mismo, he visto discusiones en las que la gente ha combinado varios archivos de vídeo usando la versión de línea de comandos de FFMPEG.

Creo que hay una versión para Mac, así que no tienes que compilarlo desde la fuente en ffmpeg.org, pero más allá de eso, alguien más tendrá que verificarlo y ayudarte con la sintaxis de comando apropiada.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X