Relación de aspecto correcta sin volver a codificar el archivo de video


18

Tengo una secuencia de video con las siguientes propiedades:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

Cuando lo ejecuto en VLC, tengo que presionar "A" para cambiar la relación de aspecto a "4: 3" para que el video se muestre con la relación de aspecto correcta.

Mirando los hechos del video, ¿el error es que a) el video real se ha estirado incorrectamente en los datos de píxeles, o b) simplemente hay algún valor de metadatos que se ha configurado incorrectamente?

Si es lo primero, sé que puedo volver a codificar el video y cambiar el ancho y la altura. Pero si es esto último, ¿qué comando ffmpeg ejecuto para corregir los metadatos sin volver a codificar el video?

Respuestas:


36

Hay una diferencia entre la Relación de aspecto de la muestra (SAR) y la Relación de aspecto de la pantalla (DAR). Si desea cambiar el video para que se muestre a 4: 3, deberá cambiar los píxeles reales de la imagen (escalando los píxeles y cambiando el SAR), o configurando un indicador de metadatos que en el nivel del contenedor indique reproductores multimedia para estirar la imagen a su DAR deseado.

No podrá escalar los píxeles y cambiar el SAR sin aplicar un filtro de video. Si elige este método, se le pedirá que transcodifique el archivo, ya que no puede "copiar y copiar" la transmisión de video mientras aplica un filtro de video.

Para escalar la imagen y cambiar el SAR (durante la transcodificación), intente:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

Por otro lado, si solo desea cambiar el indicador de metadatos y ajustar el DAR, podrá transmitir el video. Para hacer esto, intente:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]

¡Excelente! ¡Cambiar el aspecto funcionó de inmediato!
April

1
No puede usar -c copyy escalar al mismo tiempo; sin embargo, puede usar -aspectpara cambiar la relación de aspecto a nivel de contenedor (pero no el nivel de transmisión).
llogan

@LordNeckbeard, el uso -aspectfunciona para la reproducción ffplay, pero no en WMP o MPC-HC. Agrega un elemento SAR / DAR adicional a la Stream #…línea de información FFmpeg/probe/playpero no parece ser una solución para la reproducción general. Estirar el video con la ventana parece ser la solución más fácil para la reproducción de MPC-HC.
Lumi

no funcionó para mí para MPEG2 sin volver a codificar
Mikhail V

No sé por qué no funcionó para mí. ¡Simplemente emite el mismo video!
Tina J

4

La respuesta de Delgado es correcta: MP4Box puede hacer esto, pero la -paropción no funciona como se describe. Con un -outparámetro (para no perturbar su archivo original):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

Cuando usa -par stream-number=width:height, define la relación de aspecto de píxeles, es decir, el resultado de dividir la relación de aspecto del dispositivo por la relación de aspecto de almacenamiento. (De manera equivalente, está describiendo la relación de aspecto de un píxel de origen). Por ejemplo, suponga que tiene una fuente de DVD de 720 × 480, y la relación de aspecto de visualización correcta es 4: 3. Para este caso, necesitas:

mp4box source.mp4 -out target.mp4 -par 1=8:9

porque (4/3) / (720/480) = 8/9.

Si la fuente representa verdaderos píxeles SD NTSC (en cuyo caso solo se supone que los 704 × 480 píxeles centrales se asignan a una pantalla de 4 × 3, con sobreescaneo de 8 píxeles a cada lado), el comando correcto sería:

mp4box source.mp4 -out target.mp4 -par 1=10:11

porque (4/3) / (704/480) = 10/11: exactamente la relación de aspecto de píxeles de referencia para video NTSC de definición estándar.

Para el caso dado en la pregunta, si realmente es 4: 3, eso da una relación de aspecto de píxeles muy extraña: (4/3) / (720/416) = 104/135. Tiene 720 de ancho, lo que sugiere una fuente de DVD; es un video de 25 fps, que sugiere PAL, pero el PAR funciona a menos de 1, lo que sugiere NTSC. Podría ser 4: 5, supongo (muy cerca de 104: 135), pero no sé nada que produzca esa relación de aspecto de píxeles; tal vez intente eso primero, y luego intente 3: 4 si todavía parece demasiado estirado horizontalmente. Si está seguro de que es exactamente 4: 3, por supuesto, solo use 104: 135.


3

ffmpeg no puede cambiar los parámetros de una transmisión de video sin volver a codificar, MP4Box (parte de gpac ) y mkvmerge sí. En el caso de una transmisión de video y una relación de aspecto real / correcta de 4: 3, puede probar:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

Para verificar antes y después: ffmpeg -i VideoFile.mp4


0

Cambiar el SAR sin volver a codificar también funciona ffmpegal .mp4usar el h264_metadatacomo Gyan señaló aquí :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4

Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
MMM
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.