2011-11-01 105 views
0

如果已提出此問題,請致歉。我找不到它,但如果有,請讓我知道,我會將其關閉。FFMPEG - 不提供預期結果的縮放視頻過濾器

我在嘗試一個原始尺寸爲480x360,目標尺寸爲400x300的視頻的簡單比例尺。該視頻以FLV開頭,最終需要以MPEG的形式出現。我使用下面的命令行來做到這一點:

ffmpeg -i user.flv -vf "scale=400:300" user_scaled.mpg 

當我發揮MPEG Streamclip縮放視頻,規模是正確的,視頻信息顯示的尺寸是400×300。但是,當我在Quicktime中播放縮放的視頻時,視頻縮放至478x359。更重要的是,FFMPEG本身將視頻視爲478x359,因此在其上執行的任何未來命令(修剪,轉換,覆蓋等)都會產生478x359的視頻。

最初的工作流程需要FLV到MPEG的轉換,但我已經用幾種不同的輸入和輸出格式(FLV - > FLV,FLV - > MPEG,MPEG - > MPEG等) 。不過,只要我可以結束一個MPEG,我就可以處理這個縮放工作所需的很多步驟和轉換。

我會粘貼下面的命令行輸出,並且樣本輸入視頻也在下面鏈接,如果您願意的話。非常感謝您的幫助。

http://www.monkeydriver.com/dpassera/stack_flv.zip

命令行輸出:

ffmpeg -i user.flv -vf "scale=400:300" user_scaled.mpg 

ffmpeg version 0.7-rc1, Copyright (c) 2000-2011 the FFmpeg developers 
    built on May 21 2011 22:13:19 with gcc 4.1.2 20080704 (Red Hat 4.1.2-50) 
    configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 
--mandir=/usr/share/man --incdir=/usr/include --disable-avisynth 
--extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions 
-fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' 
--enable-avfilter --enable-libdirac --enable-libgsm --enable-libmp3lame 
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 
--enable-gpl --enable-postproc --enable-pthreads --enable-shared 
--enable-swscale --enable-vdpau --enable-version3 --enable-x11grab 
--disable-yasm --enable-filters --enable-filter=movie 

    libavutil 50. 40. 1/50. 40. 1 
    libavcodec 52.120. 0/52.120. 0 
    libavformat 52.108. 0/52.108. 0 
    libavdevice 52. 4. 0/52. 4. 0 
    libavfilter 1. 77. 0/1. 77. 0 
    libswscale 0. 13. 0/0. 13. 0 
    libpostproc 51. 2. 0/51. 2. 0 

[flv @ 0x11dd3b30] Estimating duration from bitrate, this may be inaccurate 
Input #0, flv, from 'user.flv': 

    Metadata: 
    duration  : 5 
    videocodecid : 2 
    audiocodecid : 6 
    canSeekToEnd : true 
    createdby  : FMS 4.0 
    creationdate : Mon Oct 31 11:43:44 2011 

    Duration: 00:00:04.62, start: 0.000000, bitrate: N/A 
    Stream #0.0: Video: flv, yuv420p, 640x480, 1k tbr, 1k tbn, 1k tbc 
    Stream #0.1: Audio: nellymoser, 44100 Hz, mono, s16 

[buffer @ 0x11ddc950] w:640 h:480 pixfmt:yuv420p 

[scale @ 0x11dda610] w:640 h:480 fmt:yuv420p -> w:400 h:300 fmt:yuv420p flags:0xa0000004 

[mpeg @ 0x11dd6bd0] VBV buffer size not set, muxing may fail 

Output #0, mpeg, to 'user_scaled.mpg': 
    Metadata: 
    duration  : 5 
    videocodecid : 2 
    audiocodecid : 6 
    canSeekToEnd : true 
    createdby  : FMS 4.0 
    creationdate : Mon Oct 31 11:43:44 2011 
    encoder   : Lavf52.108.0 

    Stream #0.0: Video: mpeg1video, yuv420p, 400x300, q=2-31, 200 kb/s, 90k tbn, 60 tbc 

    Stream #0.1: Audio: mp2, 44100 Hz, mono, s16, 64 kb/s 

Stream mapping: 
Stream #0.0 -> #0.0 
Stream #0.1 -> #0.1 

Press [q] to stop encoding 
frame= 230 fps= 0 q=10.2 size=  366kB time=3.82 bitrate= 785.6kbits/s dup=175 drop=0 
frame= 267 fps= 0 q=10.7 Lsize=  412kB time=4.43 bitrate= 761.3kbits/s dup=203 drop=0  

video:370kB audio:36kB global headers:0kB muxing overhead 1.568959% 
+0

這一切看起來不錯。 'ffprobe -show_streams user_scaled.mpg'的輸出是什麼? – blahdiblah

+0

嗨。感謝您看這個。完整的輸出太長,無法粘貼,所以我把它放在一個文本文檔中,網址是http://monkeydriver.com/docs/ffprobe_output.rtf 這裏是輸出摘錄,其中提到了尺寸。希望它有幫助: 'Input#0,mpeg,from'user_scaled.mpg': ... Stream#0.0 [0x1e0]:Video:mpeg1video,yuv420p,400x300 [PAR 1:1 DAR 4:3],104857 kb/s,60 fps,60 tbr,90k tbn,60 tbc ... [STREAM] 索引= 0 codec_name = mpeg1video codec_long_name = MPEG-1視頻 codec_type =視頻 codec_time_base =六十〇分之一 codec_tag_string = [0] [0] [0] [0] codec_tag = 0×0000 寬度= 400 height = 300' – dpassera

+0

這一切看起來都正確,'ffprobe -show_format'(唯一重要的輸出是'[FORMAT]'標籤之間的位,而不是整個ffmpeg前導碼)。如果容器格式化有問題,您也可以嘗試投入「-s 400x300」。 – blahdiblah

回答

4

牙多少咬牙切齒後,我認爲這個問題無關的有關ffmpeg,以及一切與的Quicktime

Quicktime Player(10.1(501.5))會縮放視頻以匹配窗口大小,並具有最小窗口大小。因此,無論實際的視頻大小如何,Quicktime都會將其縮放到至少480 x 360。這就是信息顯示在「格式」部分(真實大小)中具有大小信息的原因,但也具有「當前大小」部分。更改窗口大小會改變後面的數字。

因此,使用ffmpeg或-vf scale-s來縮放視頻,但不要相信Quicktime Player以正確的大小顯示給您。我建議VLC是一個非常有用的選擇。

+0

謝謝。這麼簡單,但是那幫助了我。 – dpassera