1

この質問がされている場合はお詫び申し上げます。見つかりませんでしたが、見つかった場合はお知らせください。これを閉じます。

元のサイズが 480x360 で、ターゲットのサイズが 400x300 のビデオの単純なスケーリングを試みています。ビデオは FLV として始まり、最終的には MPEG になる必要があります。これを行うには、次のコマンドラインを使用しています。

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

スケーリングされたビデオを MPEG Streamclip で再生すると、スケールは正しく、ビデオ情報はサイズが 400x300 であることを示しています。ただし、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%
4

1 に答える 1

4

歯ぎしりをした後、問題は ffmpeg とは何の関係もなく、すべてQuicktimeと関係があると思います。

Quicktime Player (10.1 (501.5)) は、ビデオをウィンドウのサイズに合わせてスケーリングし、最小ウィンドウ サイズを設定します。そのため、実際のビデオ サイズに関係なく、Quicktime は少なくとも 480 x 360 にスケーリングします。これが、情報表示の「フォーマット」セクション (実際のサイズ) にサイズ情報が含まれているだけでなく、「現在のサイズ」セクションも含まれている理由です。ウィンドウ サイズを変更すると、後者の数値が変更されます。

したがって、ffmpeg を使用してビデオをスケーリングします-vf scale-s、Quicktime Player が正しいサイズで表示されるとは限りません。非常に有能な代替手段としてVLCをお勧めします。

于 2011-11-10T23:03:59.187 に答える