2011-11-17 162 views
4

我正在使用FFmpeg從視頻文件的特定位置提取縮略圖。使用FFmpeg創建縮略圖

我在網上找到了兩種方法來做到這一點:

  1. 隨着-ss(尋求)參數之前-i(輸入)參數:

    ffmpeg -y -ss $SEEK_POINT -i input.ogv -vcodec mjpeg -vframes 1 -an -s 120x90 -f rawvideo output.jpg

  2. 隨着-ss(尋求)參數-i(輸入)參數:

    ffmpeg -y -i input.ogv -vcodec mjpeg -ss $SEEK_POINT -vframes 1 -an -s 120x90 -f rawvideo output.jpg

第一種方法產生不好的縮略圖,灰色斑點,但工程非常快。返回的錯誤是[theora @ 0x8097240] vp3: first frame not a keyframe

第二種方法總能正常工作,但顯示一個錯誤,導致提取花費大量時間。這段時間不是固定的,它取決於我注意到的尋求點。有時需要幾秒鐘,其他時間需要幾分鐘才能提取縮略圖。我得到的錯誤Buffering several frames is not supported. Please consume all available frames before adding a new one.以下輸出:

Input #0, ogg, from 'input.ogv': 
    Duration: 00:21:52.76, start: 0.000000, bitrate: 844 kb/s 
    Stream #0.0: Video: theora, yuv420p, 800x600 [PAR 4:3 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc 
    Stream #0.1: Audio: vorbis, 44100 Hz, stereo, s16, 192 kb/s 
    Metadata: 
     ENCODER   : Lavf52.102.0 
Incompatible pixel format 'yuv420p' for codec 'mjpeg', auto-selecting format 'yuvj420p'                   
[buffer @ 0x9250840] w:800 h:600 pixfmt:yuv420p         
[scale @ 0x92508a0] w:800 h:600 fmt:yuv420p -> w:120 h:90 fmt:yuvj420p flags:0x4 
Output #0, rawvideo, to 'output.jpg': 
    Metadata: 
    encoder   : Lavf53.2.0 
    Stream #0.0: Video: mjpeg, yuvj420p, 120x90 [PAR 4:3 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 25 tbc 
Stream mapping: 
    Stream #0.0 -> #0.0 
Press ctrl-c to stop encoding 
[buffer @ 0x9250840] Buffering several frames is not supported. Please consume all available frames before adding a new one.          
frame= 0 fps= 0 q=0.0 size=  0kB time=10000000000.00 bitrate= 0.0kbit 
Last message repeated 15448 times 
frame= 1 fps= 0 q=3.4 Lsize=  3kB time=0.04 bitrate= 598.8kbits/s  
video:3kB audio:0kB global headers:0kB muxing overhead 0.000000% 

我如何可以提取縮略圖,而無需使用FFmpeg的距離,而與輸入格式的視頻的自定義位置的任何問題?

回答

4

嘗試這樣的事情與itsoffset選項:

ffmpeg -itsoffset 4 -i "$INFILE" -vcodec png -vframes 1 -an -f rawvideo -s 120x90 -y "$OUTFILE" 

從FFmpeg的文檔上itsoffset

設置輸入時間,以秒偏移。 [ - ] hh:mm:ss [.xxx]語法也受支持。偏移量被添加到輸入文件的時間戳中。指定正偏移量意味着相應的流延遲了偏移秒。

+1

不,它不起作用。每次運行時,無論我設置爲「-itoffset」的參數如何,它都只會從視頻中提取第一幀。你有什麼想法,爲什麼? –

+5

對於任何後來發現此問題的人的最新回覆。我相信'-itsoffset'參數應該是負值。在這種情況下'-4',因爲您想要及時更早地移動視頻流,請不要延遲它。 – runfalk