如果已提出此问题,请致歉。我找不到它,但如果有,请让我知道,我会将其关闭。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%
这一切看起来不错。 'ffprobe -show_streams user_scaled.mpg'的输出是什么? – blahdiblah
嗨。感谢您看这个。完整的输出太长,无法粘贴,所以我把它放在一个文本文档中,网址是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
这一切看起来都正确,'ffprobe -show_format'(唯一重要的输出是'[FORMAT]'标签之间的位,而不是整个ffmpeg前导码)。如果容器格式化有问题,您也可以尝试投入“-s 400x300”。 – blahdiblah