Tengo un par de archivos ogg vorbis, todos codificados con las mismas propiedades que quiero concatenar en un solo archivo.
Sé que el formato ogg vorbis admite la concatenación simple de múltiples archivos como:
$ cat file1.ogg file2.ogg > output.ogg
Pero lamentablemente no todos los reproductores son capaces de comprender archivos creados de esa manera, por ejemplo, mi reproductor de audio móvil y evitaría comprar uno nuevo. Otros programas que no lo entienden son gstreamer. Ese método tampoco funciona si los archivos de entrada ogg tienen todos la misma identificación de flujo.
Además, dado que me gustaría tirar los archivos originales y solo mantener la versión concatenada, me gustaría que la concatenación se realice sin pérdidas, como la cat
solución.
También quiero evitar concatenar los archivos en un formato sin pérdidas, como flac, ya que esto aumentaría innecesariamente el tamaño del archivo. Si eso estuviera bien, podría conservar los archivos ogg originales y usaría menos espacio.
Parece que ffmpeg a veces puede hacerlo usando el demuxer concat :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Si miro el hexdump sin procesar de mis archivos de entrada, entonces puedo encontrar los paquetes vorbis exactamente representados en el archivo de salida. Así que supongo que realmente no ocurre una nueva codificación.
Pero esto no parece funcionar en todos los archivos de entrada. A veces (no estoy seguro de qué provoca esto), ffmpeg daría la advertencia:
Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
Y luego escucharía una "brecha" muy leve entre dos archivos. Por lo tanto, esto ciertamente no es una solución global.
Como no pude encontrar uno, intenté escribir mi propia herramienta en esta pregunta de stackoverflow .
¿Hay alguna manera de concatenar múltiples archivos ogg vorbis pero sin volver a codificarlos y con una sola secuencia por salida? ¿Qué herramienta es capaz de hacer ese trabajo?
Respuestas:
ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.ogg
crea un archivo ogg concatenado en mi sistema, solo un poco más pequeño que los archivos separados combinados (probablemente debido a los metadatos compartidos). A mí me suena igual, por lo que la concatenación debería ser sin pérdidas. Sin embargo, esto no agrega una pequeña brecha entre los archivos.ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg
se supone que funciona, pero da este error en mi ffmpeg Homebrew (macOS) a partir de 3.3.2.Fuente: https://trac.ffmpeg.org/wiki/Concatenate
fuente
Es posible que desee echar un vistazo a FFmpeg . Tiene muchas herramientas que no entiendo bien, pero recuerdo de la documentación que hay una herramienta para hacer exactamente esto. De lo contrario, creo que se puede utilizar VLC Media Player 's línea de comandos .
fuente
ffmpeg -f concat -i inputs.txt -c copy out.ogg
no funciona. Tengo curiosidad por cómo crees que esto se puede resolver con ffmpeg.