Extrair um quadro por minuto com ffmpeg e pular alguns segundos

1

Gostaria de extrair um quadro por minuto de um vídeo, a partir de um deslocamento especificado. Por exemplo, digamos que o deslocamento é 00:01 (mm: ss), então eu gostaria de extrair 00:01, 01:01, 02:01 e assim por diante.

O problema que enfrentei é que o ffmpeg parece estar arredondando meu deslocamento para o minuto mais próximo. Se eu pedir 00:01, recebo 00:00, 01:00, 02:00 e assim por diante. Se eu der 01:01, recebo 01:00, 02:00, 03:00 e assim por diante.

Restrições adicionais:

  • As legendas devem ser renderizadas. Eles estão em um arquivo .ass no mesmo diretório.
  • Cada quadro deve ter algum texto escrito no canto superior esquerdo

Veja como estou invocando o ffmpeg para o deslocamento 00:01 :

ffmpeg -y -i "HorribleSubs.mkv" -ss 00:00:01 \
 -vf "ass=HorribleSubs.ass,fps=1/60,drawtext=fontfile=...: fontcolor=white: fontsize=32: x=10: y=10: text=HorribleSubs" \
 "screenshots/%03d-HorribleSubs.png"

E aqui está a saída (eu pressionei c + quando percebi que não estava funcionando):

ffmpeg version git-2013-06-15-8a79a00 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jun 15 2013 16:36:45 with gcc 4.7 (Ubuntu/Linaro 4.7.3-1ubuntu1)
  configuration: --prefix=/home/sircmpwn/ffmpeg_build --extra-cflags=-I/home/sircmpwn/ffmpeg_build/include --extra-ldflags=-L/home/sircmpwn/ffmpeg_build/lib --bindir=/home/sircmpwn/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab --enable-libfreetype
  libavutil      52. 35.101 / 52. 35.101
  libavcodec     55. 16.100 / 55. 16.100
  libavformat    55.  8.102 / 55.  8.102
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 77.101 /  3. 77.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Input #0, matroska,webm, from 'HorribleSubs.mkv':
  Metadata:
    creation_time   : 2013-05-26 13:34:41
  Duration: 00:23:42.11, start: 0.000000, bitrate: 1900 kb/s
    Stream #0:0: Video: h264 (High), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 30.30 fps, 30.30 tbr, 1k tbn, 59.94 tbc (default) (forced)
    Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp (default) (forced)
    Stream #0:2: Subtitle: ssa (default) (forced)
Codec 0x18000 is not in the full list.
    Stream #0:3: Attachment: unknown_codec
    Metadata:
      filename        : OpenSans-Semibold.ttf
      mimetype        : application/x-truetype-font
[Parsed_ass_0 @ 0x19b2100] Added subtitle file: 'HorribleSubs.ass' (9 styles, 374 events)
Output #0, image2, to 'screenshots/%03d-HorribleSubs.png':
  Metadata:
    encoder         : Lavf55.8.102
    Stream #0:0: Video: png, rgb24, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 0.02 tbc (default) (forced)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> png)
Press [q] to stop, [?] for help
frame=    7 fps=0.5 q=0.0 Lsize=N/A time=00:07:00.00 bitrate=N/A dup=1 drop=0    
video:4306kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.000499%
Received signal 2: terminating.
    
por Drew DeVault 16.06.2013 / 06:30

2 respostas

1

O FFmpeg não pode ser cortado em todos os lugares ao usar a codificação de vídeo h.264 (que é o seu caso: Stream #0:0 -> #0:0 (h264 -> png) ).

Para cortar o FFmpeg em qualquer lugar, você precisará recodificar o vídeo. tente o seguinte:

ffmpeg -y -ss 00:00:01 -i "HorribleSubs.mkv" -c:v mpeg2video -g 1 -vf "ass=HorribleSubs.ass,fps=1/60,drawtext=fontfile=...: fontcolor=white: fontsize=32: x=10: y=10: text=HorribleSubs" "screenshots/%03d-HorribleSubs.png"

    
por 19.06.2013 / 03:58
0

Isso pode funcionar: coloque o -ss na frente do -i para que o ffmpeg procure essa posição antes de realmente fazer toda a filtragem e codificação. Ou tente a solução do LordNeckbeard para usar o filtro de seleção, mas fiquei confuso sobre todas essas opções e variáveis.

Você pode ir para a lista de discussão ffmpeg-users para mais ajuda.

    
por 18.06.2013 / 23:38