2015-06-23 16 views
5

Ich bin daran interessiert, ein Video auf eine größere Größe zu skalieren, ohne irgendeinen Filter oder irgendetwas anzuwenden. Das Ausgabevideo sollte sehr pixelig aussehen. Wie mache ich das in FFMPEG?FFMPEG Video ohne Filter skalieren

Auf Vorschlag von Ronald S. Bultje benutze ich die Nachbarflagge. Ich habe mich auch entschieden, den Rawvideo-Codec zu verwenden, um eine Komprimierung zu vermeiden.

Der aktuelle Befehl bei mir läuft wird

ffmpeg -i vid.avi -s 800x800 -sws_flags neighbor -sws_dither none -vcodec rawvideo vid2.avi 

Die Befehlszeile Ausgabe dieses Befehls ist

ffmpeg version 2.7 Copyright (c) 2000-2015 the FFmpeg developers 
    built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) 
    configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --enable-vda --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid 
    libavutil  54. 27.100/54. 27.100 
    libavcodec  56. 41.100/56. 41.100 
    libavformat 56. 36.100/56. 36.100 
    libavdevice 56. 4.100/56. 4.100 
    libavfilter  5. 16.101/5. 16.101 
    libavresample 2. 1. 0/2. 1. 0 
    libswscale  3. 1.101/3. 1.101 
    libswresample 1. 2.100/1. 2.100 
    libpostproc 53. 3.100/53. 3.100 
Input #0, avi, from 'vid.avi': 
    Duration: 00:00:25.00, start: 0.000000, bitrate: 226 kb/s 
    Stream #0:0: Video: rawvideo, pal8, 80x80, 206 kb/s, 4 fps, 4 tbr, 4 tbn, 4 tbc 
File 'vid2.avi' already exists. Overwrite ? [y/N] y 
Output #0, avi, to 'vid2.avi': 
    Metadata: 
    ISFT   : Lavf56.36.100 
    Stream #0:0: Video: rawvideo, pal8, 800x800, q=2-31, 200 kb/s, 4 fps, 4 tbn, 4 tbc 
    Metadata: 
     encoder   : Lavc56.41.100 rawvideo 
Stream mapping: 
    Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native)) 
Press [q] to stop, [?] for help 
frame= 100 fps=0.0 q=0.0 Lsize= 62608kB time=00:00:25.00 bitrate=20515.4kbits/s  
video:62600kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.012614% 
+0

Terminologie: Waage selbst ist ein Filter ... so ist Ihre Anfrage ein wenig verwirrend – EladG

Antwort

12
ffmpeg -i infile -vf scale=WIDTH:HEIGHT:flags=neighbor outfile 

oder

ffmpeg -i infile -s WIDTHxHEIGHT -sws_flags neighbor outfile 

Der kritische Teil hier ist flags oder -sws_flags, die den Filter (und andere skalierungsbezogene Flags) auswählt. Der voreingestellte Filterwert ist bicublin (IIRC), was einenLuma und bilinear Chroma-Filter bedeutet. Nearest-neighbour wird tun, was Sie verlangen.

Eine Liste anderer Skalierungsalgorithmen finden Sie unter scaler options.

+0

das ist näher, aber immer noch nicht genau richtig. Die aufgeblasenen "Pixel" sind immer noch nicht gleichförmig. Es gibt einige Streifenbildung, und sie sind nicht alle gleich groß, als ob eine Komprimierung vorgenommen worden wäre. – honi

+0

Nun, offensichtlich, weil man keine halben Pixel haben kann. Angenommen, Sie haben ein 2x2-Bild und versuchen, daraus ein 3x3-Bild zu erstellen. Sie können entweder die Skalierung "nächster Nachbar" durchführen, wobei die mittleren Pixel (Zeilen/Spalten) den Wert eines ihrer Nachbarn haben (abhängig davon, wie Sie runden), und die Kantenpixel haben ursprüngliche Kantenwerte. oder Sie können einen Filter anwenden und den mittleren Pixeln einen Wert (mathematisch) zuweisen, der von den Kantenpixeln abgeleitet (gefiltert) wird. Sie können nicht die Hälfte des Pixels einen Wert und die Hälfte des Pixels einen anderen Wert geben, ein Pixel kann nur einen Wert haben. –

+0

Ich skaliere von 80x80 zu 800x800, also sollte es kein Problem damit geben. Ich habe dieses Problem teilweise gelöst, indem ich die Option "-vcodec rawvideo" verwendet habe, aber jetzt gibt es dithering noise, das ich mit der Option "-sws_dither none" nicht loswerden kann. – honi