Izquierda derecha

Izquierda derecha

Necesito ampliar el video de un juego de DOS usandoFFmpeg. Pero conInterpolación del vecino más cercanoen el lado izquierdo yxBRfiltro en el otro.

Entrada (320x200)

ingrese la descripción de la imagen aquí

Salida (1280x800)

ingrese la descripción de la imagen aquí

Aquí hay un comando, ¿dónde está xBR procesando la pantalla completa?

ffmpeg
    -i input.avi
    -sws_flags neighbor
    -vcodec libx264 -strict -2
    -preset veryslow -qp 0
    -filter:v "xbr=4"
    output.mp4

Respuesta1

Izquierda derecha

Filtro diferente en cada lado
Recorté la imagen para reducir el tamaño de salida solo con fines de visualización.

Esto mostrará el video completo en cada lado. La izquierda esxbry lo correcto esscale.

Usandohstack

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor[fg]; \
 [bg][fg]hstack,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

Todos los flujos de entrada ahstackdebe tener el mismo formato de píxel y el mismo ancho.

Usandopad&overlay

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4,pad=iw*2[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor[fg]; \
 [bg][fg]overlay=w,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

Este método es más lento y complejo que simplemente usarhstack.


Izquierda y derecha: con borde de 10 píxeles

Con borde de 10 píxeles

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4,pad=iw*2+10[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor[fg]; \
 [bg][fg]overlay=w+10,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

Pantalla dividida: izquierda y derecha

Pantalla dividida: izquierda y derecha

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor,crop=iw/2:ih:ow:0[fg]; \
 [bg][fg]hstack[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

Arriba y abajo

Arriba y abajo

Usandovstack

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor[fg]; \
 [bg][fg]vstack,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

Todos los flujos de entrada avstackdebe tener el mismo formato de píxel y el mismo ancho.

Usandopad&overlay

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4,pad=iw*2[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor[fg]; \
 [bg][fg]overlay=0:h,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

Este método es más lento y complejo que simplemente usarvstack.


Pantalla dividida: arriba y abajo

Pantalla dividida: arriba y abajo

ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
 [0:v]scale=iw*4:-1:flags=neighbor,crop=iw:ih/2:0:oh[fg]; \
 [bg][fg]vstack[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4

información relacionada