Tengo material de archivo 4K 3840x2160 en formato MP4 que necesito reducir a 1080p. traté de correr
ffmpeg -i orig.mp4 -vf scale=1920:1080 smaller.mp4
pero el resultado es de muy mala calidad, con toda la imagen compuesta de "mosaicos" cuadrados como si estuviera ampliando 4:1.
Aquí está el resultado de ejecutar este comando:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'origs/P1000003.MP4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-02-19 17:10:38
Duration: 00:05:14.48, start: 0.000000, bitrate: 95903 kb/s
Stream #0.0(und): Video: h264 (High), yuvj420p, 3840x2160 [PAR 1:1 DAR 16:9], 95792 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
creation_time : 2015-02-19 17:10:38
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 125 kb/s
Metadata:
creation_time : 2015-02-19 17:10:38
Incompatible pixel format 'yuvj420p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x22a3420] w:3840 h:2160 pixfmt:yuvj420p
[scale @ 0x22a3ce0] w:3840 h:2160 fmt:yuvj420p -> w:1920 h:1080 fmt:yuv420p flags:0x4
Output #0, mp4, to '1-short.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-02-19 17:10:38
encoder : Lavf53.21.1
Stream #0.0(und): Video: mpeg4, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Metadata:
creation_time : 2015-02-19 17:10:38
Stream #0.1(und): Audio: libvo_aacenc, 48000 Hz, stereo, s16, 200 kb/s
Metadata:
creation_time : 2015-02-19 17:10:38
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
frame= 125 fps= 6 q=31.0 Lsize= 968kB time=5.00 bitrate=1586.7kbits/s
video:842kB audio:123kB global headers:0kB muxing overhead 0.421047%
Sé por experiencia que ffmpeg es una herramienta excelente, así que debo estar arruinando las opciones/parámetros de alguna manera...
¿Cómo puedo hacer esto?
La configuración predeterminada para ffmpeg es de muy baja calidad, y dado que no especifica ningún códec o parámetros de calidad, solo usa los valores predeterminados (no sé por qué los desarrolladores no solucionan eso porque genera muchas preguntas en los foros En todas partes).
Editar : los valores predeterminados ahora son bastante cuerdos. Con una compilación reciente (posterior a 2017) de ffmpeg, no necesita especificar nada más que archivos de entrada y salida para lograr buenos resultados utilizables. Puede, por supuesto, modificar el deseo de su corazón.
Intente agregar al comando.-c:v libx264
-crf 20 -preset slow
-c:v libx264
le dice que use el codificador libx264,crf 20
utiliza el cuantificador Constant Rate Factor (que paradójicamente significa tasa de bits variable, pero calidad constante) con un valor de 20 (bastante buena calidad; menor es mejor calidad/archivos más grandes, mayor es peor/más pequeño); el valor predeterminado es 23,slow
ajuste preestablecido es un atajo para un montón de configuraciones de codificador, lo que significa que pone un poco más de esfuerzo que el predeterminado (medio). Tenga en cuenta que los ajustes preestablecidos de velocidad no cambian la calidad del archivo codificado, solo la eficiencia, lo que significa que una codificación más lenta dará como resultado un archivo más pequeño de la misma calidad y una codificación más rápida significará un archivo más grande de la misma calidad.Puede modificar estas configuraciones, consulte la guía de codificación h.264 para obtener instrucciones sobre qué perillas girar.
Y si está utilizando el audio tal cual, agregue c:a copy
. Eso hará una copia directa de la transmisión de audio sin volver a codificar.
mpeg4
que produce video MPEG-4 Parte 2, y los valores predeterminados eran más sensatos durante su apogeo (como 320x240, etc.).ffmpeg -i input4kvid.mp4 -vf scale=1920:1080 -c:a copy output1080vid.mp4
ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 -c:a copy output.mp4
ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 -vf scale=1920:1080 -crf 20 -c:a copy output.mp4
-i
ingrese el nombre del archivo o la ruta del archivo
-c:v libx265 -vtag hvc1
seleccionando compresión. El valor predeterminado eslibx264
-vf scale=1920:1080
especificando la resolución de salida
-c:a copy
copiar audio tal como está sin ningún tipo de compresión
-preset slow
solicite al algoritmo de compresión que tome más tiempo y busque más áreas para la compresión. El valor predeterminado es medium
. Otras opciones son faster
, fast
, medium
, slow
,slower
-crf 20
Calidad de compresión
-crf 0
alta calidad, baja compresión, archivo grande
-crf 23
defecto
-crf 51
baja calidad, alta compresión, archivo pequeño
Usa avconv si quieres:
avconv -i 4kfile.mp4 -s hd1080 -c:v libx264 -c:a copy fullhdfile.mp4
llogan
-t 10
para hacer una salida de 10 segundos. ¿Por qué quieres bajar de escala? ¿Cuál es el caso de uso para su salida escalada? Esta información me ayudará a proporcionar una respuesta más precisa.lara michaels
llogan
llogan
pedro cordes
-c:a copy
, ya que no desea ni necesita volver a codificar la transmisión de audio. Úselo-map 0
para copiar los metadatos de cualquier capítulo u otras cosas. (ffmpeg solo toma 1 vid + 1 aud por defecto).pedro cordes
-sws_flags lanczos+print_info
utilizará un algoritmo de escala mejor que el predeterminado (creo que es bilineal). La respuesta de stlb cubre la parte de codificación de video del proceso.llogan
scale=1920:-2:flags=lanczos
. También iba a mencionar la-2
escala for en mi respuesta inexistente. Para aquellos que no saben, puede poner-2
ancho o alto, y proporcionará automáticamente el valor correcto mientras conserva la relación de aspecto y hace que el valor sea divisible por 2 (requerido por libx264 para salidas yuv420p).pedro cordes
-sws_flags
usará lanczos para escalar croma al pasar de 4:4:4: a 4:2:0 o viceversa, por ejemplo. Así que creo que no es una mala idea tenerlo en su línea de comandos en todo momento, en caso de que haga algo que inserte automáticamente un filtro de escala. Pero sí, altura calculada automáticamente = ganar. No siempre obtendrá píxeles perfectamente cuadrados en su salida, si la altura requerida no es un múltiplo de 2 (o incluso un número entero), pero ffmpeg establecerá la relación de aspecto de la pantalla en la salida para que los jugadores la escalan correctamente si escalar hacia arriba o hacia abajo.