Uso de ffmpeg para agregar altura (como barras negras) al archivo de video sin pérdida de calidad

Tengo un archivo con una resolución de 3840x1632, pero mi televisor estira la imagen verticalmente para llenar los 2160 píxeles de altura. ¿Es posible usar ffmpeg para agregar altura en blanco/negro, mientras se preserva la calidad del video y el audio?

Intenté hacer esto, que pareció funcionar (tomó alrededor de 2 horas, la misma duración del video), pero redujo considerablemente el tamaño del archivo/calidad del video):

ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280" -c:a copy my_output_video.mkv

¿Hay un interruptor para decir "mantener todo lo demás igual"?

¡Gracias!

Respuestas (3)

Tendrá que configurar manualmente los parámetros de codificación.

ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280,setsar=1" -crf 18 -preset faster -c:a copy my_output_video.mkv

La opción CRF establece el equilibrio entre tamaño y calidad. Los valores más bajos producen archivos de mejor calidad pero más grandes. El preajuste aumentará la velocidad, pero para la misma calidad, el tamaño del archivo será mayor.

El filtro setsar se agregó como precaución en caso de que su reproductor lea el SAR almacenado en el archivo y amplíe el video en función de ese valor.

Puede hacer transformaciones con -c:v libx264 -crf 0X264 tiene modo sin pérdidas, que ingresa con -crf 0. Implementaron una codificación de video real sin pérdidas, esto no es muy conocido, pero funciona perfectamente.

Lo uso todo el tiempo.

Esté preparado, se necesitan GB, especialmente para videos de la vida real (no gráficos, etc.)

Hacer la grabación de pantalla para programas y gráficos en -crf 0- es perfecto - los comprime realmente bien y usa una potencia de CPU relativamente pequeña.

También puede controlar la complejidad de compresión que utiliza, con los ajustes preestablecidos ( fast, veryslow... etc). Y también puede volver a comprimir las pérdidas en más comprimidas sin pérdidas.

Todo para lossless es lo mismo que para todos los x264, excepto que es el verdadero sin pérdidas.

El OP tiene la intención de reproducir los archivos en un televisor, y la mayoría de los decodificadores h/w o s/w no son compatibles con el perfil Hi444, que es lo que crf/qp 0requiere.
@Gyan Sí, lo que dices es cierto. Excepto que dije "transformaciones". La idea que represento: la persona no sabe cómo jugar con el procesamiento sin pérdidas. Puede desarrollar el flujo de trabajo en forma sin pérdidas por etapas, y luego todo eso se puede mover al procesamiento masivo sobre la marcha a pérdidas. También sin pérdidas se puede comparar directamente. Como lo había hecho dos días antes. Si el archivo de entrada tiene 11,8 GB, el archivo en formato buzón también sería de 11,8 GB; verá de inmediato que se conserva toda la información. & Lossless siempre se puede codificar en con pérdida.
Aquí está mi solución con explicación.
ffmpeg -i input.mkv -filter:v "pad=3840:2160:0:280,setsar=1" -c:a copy -c:v libx265 -x265-params lossless=1 my_output_video.mkv
----------111111111----------------2222-3333-4-555----------------------------------------------------------6666666666666666666

Legend
1 - input filename
2 - Target X dimension
3 - Target Y
4 - Bar's target X pos. Best: Floor( (Target X - Current X) / 2) . If the value is 0, no vertical baps will be present.
5 - Bar's target Y pos. Best: Floor( (Target Y - Current Y) / 2) . If the value is 0, no horizontal baps will be present.
6 - output filename

Notes
-c:a copy is to maintain lossless-ness
-x265-params lossless=1 option is for lossless encoding. Adding -crf 0 is not required.
-c:v libx265 - added to reduce output video quality while maintaining lossless-ness
Floor() - means to floor DOWN where applicable (ideally, no non-integer calculations occur)

Mi comando de ejemplo para agregar barras de 1660x780 a 1920x1080,

ffmpeg -i input.mp4 -filter:v "pad=1920:1080:130:150,setsar=1" -crf 0 -c:v libx265 -x265-params lossless=1 my_output_video.mp4
Fuentes,