Links rechts

Links rechts

Ich muss das Video von einem DOS-Spiel vergrößern mitFFmpeg. Aber mitNächster-Nachbar-Interpolationauf der linken Seite undxBRFilter auf dem anderen.

Eingabe (320 x 200)

Bildbeschreibung hier eingeben

Ausgabe (1280 x 800)

Bildbeschreibung hier eingeben

Hier ist ein Befehl, bei dem xBR den gesamten Bildschirm verarbeitet …

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

Antwort1

Links rechts

Unterschiedlicher Filter auf jeder Seite
Ich habe das Bild zugeschnitten, um die Ausgabegröße nur zu Anzeigezwecken zu verringern.

Dadurch wird das gesamte Video auf jeder Seite angezeigt. Links istxbrund rechts istscale.

Verwenden vonhstack

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

Alle Eingabeströme zuhstackmüssen das gleiche Pixelformat und die gleiche Breite haben.

Verwenden vonpadundoverlay

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

Diese Methode ist langsamer und komplexer als die Verwendung vonhstack.


Links & rechts: Mit 10 Pixel Rand

Mit 10 Pixel Rand

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

Geteilter Bildschirm: links und rechts

Geteilter Bildschirm: links und rechts

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

Oben unten

Oben unten

Verwenden vonvstack

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

Alle Eingabeströme zuvstackmüssen das gleiche Pixelformat und die gleiche Breite haben.

Verwenden vonpadundoverlay

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

Diese Methode ist langsamer und komplexer als die Verwendung vonvstack.


Geteilter Bildschirm: oben und unten

Geteilter Bildschirm: oben und unten

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

verwandte Informationen