Filtr wyboru ffmpeg generuje niepożądane czarne ramki

5

Chcę wyciąć wideo według klatek za pomocą ffmpeg. Do tej pory wymyśliłem

ffmpeg -i P2.mp4 -vf "fps,setpts='PTS-STARTPTS',select='gte(n\,20)*lte(n\,30)',crop='600:430:100:650',scale='280:-1'" P2o.avi

Parametry są tutaj do testowania, aby sprawdzić, czy wszystko działa zgodnie z wymaganiami.

Dostaję wideo z 20 czarnymi ramkami, a następnie 10 klatkami treści. Chociaż chcę 10 klatek, nie wiem, jak się tam dostało 20 czarnych klatek. Dokumentacja parametru select-filter wyraźnie stwierdza, że ​​wybrane są tylko ramki, dla których wyrażenie ma wartość inną niż 0. W powyższym gte(n,20)należy je usunąć.

Jeśli to pomoże, tutaj wyjście ffmpeg:

G:\>ffmpeg -i P2.mp4 -vf "fps,setpts='PTS-STARTPTS',select='gte(n\,20)*lte(n\,30)',crop='600:430:100:650',scale='280:-1'" P2o.avi
ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
  built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 19.100 / 52. 19.100
  libavcodec     55.  0.100 / 55.  0.100
  libavformat    55.  0.100 / 55.  0.100
  libavdevice    54.  4.100 / 54.  4.100
  libavfilter     3. 45.103 /  3. 45.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[h264 @ 039a1ae0] mmco: unref short failure
    Last message repeated 5 times
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'P2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.0.100
  Duration: 01:51:58.78, start: 0.000000, bitrate: 8479 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080
 [SAR 1:1 DAR 16:9], 8084 kb/s, 49.96 fps, 50 tbr, 90k tbn, 50 tbc
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, stereo, fltp, 384 kb/s
    Metadata:
      handler_name    : SoundHandler
File 'P2o.avi' already exists. Overwrite ? [y/N] y
Invalid pixel aspect ratio 603/602, limit is 255/255 reducing
Output #0, avi, to 'P2o.avi':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    ISFT            : Lavf55.0.100
    Stream #0:0(und): Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 280x201 [SAR 1:1 DAR 280:201], q=2-31, 200 kb/s, SAR 603:602 DAR 60:43, 25 tbn, 25 tbc
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mpeg4)
  Stream #0:1 -> #0:1 (ac3 -> libmp3lame)
Press [q] to stop, [?] for help
[h264 @ 046f1680] mmco: unref short failure
    Last message repeated 1 times
[h264 @ 05e4a900] mmco: unref short failure
    Last message repeated 3 times
[swscaler @ 039b63e0] Warning: data is not aligned! This can lead to a speedloss

frame=    1 fps=0.0 q=4.2 size=      29kB time=00:00:01.82 bitrate= 131.8kbits/s
frame=   11 fps= 11 q=7.4 size=      71kB time=00:00:03.16 bitrate= 184.4kbits/s
frame=   11 fps=7.2 q=7.4 size=      71kB time=00:00:04.60 bitrate= 126.8kbits/s
frame=   11 fps=5.4 q=7.4 size=      71kB time=00:00:06.19 bitrate=  94.3kbits/s
frame=   11 fps=4.3 q=7.4 size=      71kB time=00:00:07.48 bitrate=  78.0kbits/s
frame=   11 fps=3.6 q=7.4 size=      71kB time=00:00:08.76 bitrate=  66.7kbits/s
frame=   11 fps=3.1 q=7.4 size=      71kB time=00:00:10.08 bitrate=  58.0kbits/s
frame=   11 fps=2.7 q=7.4 size=      71kB time=00:00:11.42 bitrate=  51.1kbits/s
frame=   11 fps=2.6 q=7.4 Lsize=     253kB time=00:00:12.04 bitrate= 171.8kbits/s
video:42kB audio:189kB subtitle:0 global headers:0kB muxing overhead 9.670474%

G:\>

Czy ktoś ma jakieś sugestie, jak mogę pozbyć się tych 20 klatek? Nie sądzę, żebym mógł -sstutaj użyć .

sjngm
źródło
Nie jestem pewien, czy to przyczyną tego problemu, ale może spróbować umieszczenie setptsfiltra po tym selectfiltrze?
evilsoup
@evilsoup Co, tak, dziękuję, to było łatwe :) Jeśli chcesz trochę reputacji, zrób to.
sjngm

Odpowiedzi:

5

Spróbuj umieszczenie setptsfiltra po tym selectfiltrze.

setpts='PTS-STARTPTS' resetuje znacznik czasu prezentacji każdej ramki (więc pierwsza ramka ma wartość 0,0 sekundy i zwiększają się prawidłowo) - wybrany filtr wyśle ​​wybrane ramki do reszty ffmpeg, ale sam nie zmieni znacznika czasu prezentacji , co może powodować różnego rodzaju problemy - jak się dowiedziałeś.

zła
źródło