ffplay: cómo reproducir archivos de audio y video separados

9

Así que puedo transcodificar archivos de video y audio separados en un archivo de película, así:

ffmpeg -ss 0 -lowres 0 -r 24 -i dcp/picture.mxf -vf "xyz2rgb" -i mov/sound.wav -ac 2 -ab 256k -vb 3000k -t 10 -y mov/movie.mp4

Y mira y escucha la película resultante así:

ffplay -ss 0 -lowres 1 -vf "xyz2rgb" mov/movie.mp4

Sin embargo, para evitar tener que transcodificar la película y el sonido en un solo archivo antes de poder verlo, me gustaría simplemente reproducir los dos archivos juntos. Hasta donde sé, ffplay no te permite combinar dos archivos diferentes (¿verdad?).

Al leer estos foros, parece que puede canalizar una salida de ffmpeg a ffplay . Lo siguiente es lo más cerca que llegué. No está tan cerca. :( La información del video se está transfiriendo claramente, pero es una "nieve" verde en el tamaño de fotograma correcto, con indicios de las imágenes reales bailando dentro de la horrible nieve verde. De esta manera sé que algo de los datos reales de la imagen se está transfiriendo , simplemente no se procesa correctamente.

Y no se reproduce audio. El sonido no se está transmitiendo (no creo). Ahora ... estoy atascado. Lo siguiente sugiere lo que intento hacer, pero no funciona:

ffmpeg -ss 0 -lowres 0 -r 24 -i dcp/picture.mxf -vf "xyz2rgb" -i mov/sound.wav -f rawvideo - | ffplay -f rawvideo -vf "xyz2rgb" -s 1998x1080 -
Bill Rudolph Yaber Russell
fuente

Respuestas:

4

La información del video se está transfiriendo claramente, pero es una "nieve" verde en el tamaño de cuadro correcto, con toques de las imágenes reales bailando dentro de la horrible nieve verde.

Este debe ser el formato de píxeles. Estás aplicando el xyz2rgbfiltro que convierte el espacio de color DCP en RGB, y luego estás canalizando el video en bruto ffplay. Aquí, está aplicando el xyz2rgbfiltro nuevamente , lo que probablemente causa las distorsiones, ya que FFmpeg no tiene idea de cómo se codifica el video en bruto. Hará lo que quiera con el video, incluso convirtiendo el espacio de color dos veces.


He tenido buenos resultados al utilizar el formato Matroska en ffplaylugar de rawvideo, lo que también te da la capacidad de decodificar audio (ver más abajo). El formato Matroska puede contener cualquier tipo de códec.

Tenga en cuenta que el orden de opciones es importante en FFmpeg, y probablemente debería usar una versión más reciente, ya que es más estricto sobre dónde colocar las opciones:

  • Opciones globales como lo -yprimero.
  • Luego, especifique las opciones para leer los archivos de entrada: -r 24fuerza la velocidad de fotogramas del picture.mxfarchivo.
  • Luego especifique todos los archivos de entrada.
  • Luego vienen las opciones de códec como filtros de video, la tasa de bits de video, etc.

En su situación, tiene sentido simplemente copiar la secuencia de audio, ya que realmente no necesitamos transcodificarla. El video tiene que ser transcodificado para poder aplicar el filtro.

Algo como esto debería hacer. Observe cómo establecemos explícitamente el formato de salida como matroskay dejamos ffplayque el resto se descubra:

ffmpeg -r 24 -i dcp/picture.mxf -i mov/sound.wav \
-filter:v "xyz2rgb" -b:v 3000k -c:a copy -t 10 -f matroska - | \
ffplay -

He usado la sintaxis (IMO menos ambigua) para opciones como en -filter:vlugar de -vf, en -b:vlugar de -vby en -c:alugar de -acodec.

Si ese formato no funciona para usted, pruebe AVI:

ffmpeg -i picture.mxf -i sound.wav -f avi - | ffplay -

Esto funcionó para mí sin problemas , y ni siquiera me obligó a usar el filtro que necesitabas. El audio también estaba funcionando.

slhck
fuente
slhck, gracias por esto! OK, obtuve esto: <br/> <br/> No se puede encontrar un formato de salida adecuado para '-filter: v' -filter: v: argumento no válido <br> <br> ?? (Lo mismo para -vf). El códec y el filtro son de aquí: goo.gl/avE1f : el autor lo escribió y diseñó una instalación personalizada de ffmpeg (solo una versión que funciona con este procedimiento y sus archivos) que incluye el códec patentado y el filtro de espacio de color, y por lo tanto puede decodificarlo. La instalación personalizada de ffmeg debe poder leer la secuencia de imagen patentada JPEG2000 MJPEG contenida dentro de la imagen MFX. Si eso ayuda a notar :)
Bill Rudolph Yaber Russell
Vaya, soy un tonto, olvidé eliminar los cortes "\" en la línea de comando. De todos modos, ahora cuando ingreso su sugerencia, los números muestran la transmisión, pero no se abre ninguna ventana, luego, unos 20 segundos después, se detiene con: <br /> <br /> Error de segmentación: 1136.0 tamaño = 138kB tiempo = 00: 00: 00.08 tasa de bits = 13445.2kbits / s
Bill Rudolph Yaber Russell
UNA IMAGEN VALE MIL MIL PALABRAS: aquí, este práctico video de captura de pantalla muestra lo que funciona y lo que no: dl.dropbox.com/u/11290938/screen_grab_ffdcp_750.mov
Bill Rudolph Yaber Russell
Muchas gracias por el video. En primer lugar, su primer comando rawvideo tiene el problema de que está especificando el tamaño incorrecto. Su entrada tiene 500x270, o al menos eso es lo que se canaliza ffplay. Además, su producción tiene rgb48lecomo formato de píxel (debido al filtro), pero ffplayasume yuv420p, por lo que también hay que especificar que: ffplay -f rawvideo -s 500x270 -pix_fmt rgb48le -. En cuanto al segfault: No tengo idea ... ¿tal vez podría crear y cargar un pequeño archivo de prueba en alguna parte?
slhck
Ooo goodie, prueba archivos! De hecho, gracias. La razón de 500x270 es que especifiqué "lores 2" que lo reduce en tamaño dos veces (para que quede en una pantalla ordenada para ti :) Entonces parece que me perdí por uno. A modo de fondo, este archivo es un DCP casero (piense en "impresión de película digital" para una sala de cine, por eso los medios son tan extraños), 2K en 1998x1080 (aspecto de 1.85 píxeles cuadrados). Al extraer la secuencia de imágenes es correcta, y ayer envié el paquete y lo reprodujeron en un DLP en la sala de cine donde se mostrará (durante una noche en el festival), y fue correcto (¡uf!).
Bill Rudolph Yaber Russell
3

Esto no transcodificaría las transmisiones:

ffmpeg -i video.mkv -i audio.mkv -c copy -map 0:0 -map 1:1 output.mkv

-map 1:1= segundo archivo, transmisión 1 (generalmente audio). -c copy= -c:v copy -c:a copy. Por defecto, el archivo muxed es tan largo como el archivo más largo, pero -shortestlo haría tan largo como el archivo más corto.

Lri
fuente
Gracias por esta información. No necesito un archivo de salida, pero es bueno conocer estos interruptores.
Bill Rudolph Yaber Russell
3
ffmpeg -lowres 2 -ss 0 -r24 -i MOVIE.MOV -ss 0 -i AUDIO.WAV -vf xyz2rgb -ac: 2 -c:v mpeg2video -f avi - | ffplay -

Para mis propósitos, esto permite una revisión rápida de los contenidos de un DCP (Paquete de cine digital) que puede construir con herramientas de código abierto . El DCP usa el espacio de color xyz, por lo que debe tener un filtro de video xyz instalado , de lo contrario no puede usarlo en la línea anterior. (Está bien, solo se verá muy teñido de naranja, no podrás ver los colores verdaderos).

Agregué el códec mpeg2video b / c, aunque redujo la calidad, es de baja velocidad y amortigua un poco, por lo que funciona mejor en mi máquina. (Además, por alguna razón, sin transcodificar primero solo obtengo un cuadro congelado de la secuencia jpeg2000 mjpeg que se alimenta a una potencia de 125mb / s desde el MXF, a menos que comience "- ss 0", es decir, al comienzo de la secuencia archivo.) Con una máquina MUY RÁPIDA, sin especificar códec (eliminar "-c: v mpeg2video"), tamaño completo ("-lores 0"), y comenzando en 0 (-ss 0), teóricamente puedes revisar el cine 2K calidad DCP exactamente como es. Bueno, excepto por las instrucciones especiales incluidas en los XML - subtítulos u otra programación. Pero en general. (Por cierto "-ac: 2" mezcla hacia abajo 5.1 a 2.0, aunque es posible que tenga hardware que admita la audición 5.1, en cuyo caso use "-c: una copia").

Gracias a Matthias en Belle-Nuit , y slhck arriba por POR PACIENTEMENTE acompañarme en esto. ¡¡¡¡Gracias!!!! Esto es bastante útil. Y de hecho, me salvó de una proyección de película potencialmente embarazosa en el teatro Aero el domingo por la noche. La numeración de mi secuencia de imágenes estaba fuera de secuencia. ¡Lo encontré con esto y lo solucioné!

Wow, todo esto por una sola línea de comando, quién sabía;)

Cheereo - b worldpoop.com

Bill Rudolph Yaber Russell
fuente
Recibí este error: No existe ese filtro: 'xyz2rgb'
Dr.jacky