2015-06-23 102 views
5

我有興趣將視頻縮放到更大尺寸,而無需應用任何過濾器或任何東西。輸出視頻應該看起來非常像素化。我如何在FFMPEG中做到這一點?FFMPEG無需過濾的縮放視頻

根據Ronald S. Bultje的建議,我使用鄰居標誌。我也決定使用rawvideo編解碼器來避免壓縮。

我當前運行的命令

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

該命令的命令行輸出

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

術語:規模本身是一個過濾器...所以你的要求有點混亂 – EladG

回答

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

ffmpeg -i infile -s WIDTHxHEIGHT -sws_flags neighbor outfile 

這裏的關鍵部分是flags-sws_flags,它選擇過濾器(和其他縮放相關的標誌)。默認過濾器值是bicublin(IIRC),這意味着色度過濾器的色度爲bicubic,亮度爲bilinearNearest-neighbour會做你所要求的。

請參閱scaler options瞭解其他縮放算法的列表。

+0

這是更接近,但仍然不完全正確。被炸開的「像素」仍然不統一。有一些條帶,它們的大小並不完全相同,就好像有一些壓縮一樣 – honi

+0

很明顯,因爲你不能有半像素。看,假設你有一個2×2的圖像,你試圖從中創建一個3x3的圖像。您可以執行「最近鄰居」縮放,其中中間像素(行/列)將具有其鄰居中的任何一個的值(取決於您如何圓整),並且邊緣像素將具有原始邊緣值;或者,您可以應用一些濾鏡併爲中間像素從邊緣像素派生(過濾)一些值(數學)。你不能給像素的一半一個值和半個像素的另一個值,一個像素只能有一個值。 –

+0

我從80x80擴展到800x800,所以應該沒有問題。我通過使用'-vcodec rawvideo'選項部分解決了這個問題,但現在出現抖動噪聲,我無法使用'-sws_dither none'選項去掉。 – honi