concatenación sin pérdida de archivos ogg vorbis

12

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 catsolució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?

josch
fuente
@JoshRumbut sí y sufre de contener huecos audibles donde se unen los archivos para alguna entrada
josch
Puede intentar usar PiTiVi y colocar los clips secuencialmente en la línea de tiempo.
harrymc
1
El OP (y yo también) queremos una solución programática que no implique la interacción del usuario después de recopilar los archivos necesarios.
Villermen
2
@ RalphRönnquist Sox vuelve a codificar la entrada.
josch

Respuestas:

2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggcrea 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.

[concat @ 0x7f91e8800400] Line 1: unknown keyword 'OggS'
ogg1.ogg: Invalid data found when processing input

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


fuente
Recibo el mismo error
Housemd
0

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 .

NatoBoram
fuente
1
¿Puedes ampliar tu respuesta un poco? Simplemente señalar un producto y su documentación realmente no explica cómo lograr la solución. Es mejor incluir algunas instrucciones aquí sobre cómo usar el producto para resolver el problema. Buena guía para recomendar software aquí: meta.superuser.com/questions/5329/… . Gracias.
Fixer1234
Solo usar ffmpeg -f concat -i inputs.txt -c copy out.oggno funciona. Tengo curiosidad por cómo crees que esto se puede resolver con ffmpeg.
josch