Como dividir vídeos com a opção FFmpeg e -segment_times?

5

Tento dividir um vídeo com o FFmpeg e a opção -segment_times , como é mostrado neste tíquete do FFmpeg . Mas não está funcionando, a saída de erro não ajuda e a saída resultante é um único vídeo de tamanho zero.

segment_times times

Specify a list of split points. times contains a list of comma separated duration specifications, in increasing order. See also the ‘segment_time’ option.

Por favor, note que eu intencionalmente não usei a opção -ss e -t por razões que demoram a explicar.

Meu comando

ffmpeg -i input.mp4 -f segment -segment_times 10,20 -vcodec copy output02%d.mp4

Saída

ffmpeg version N-59275-g9b195dd Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec 21 2013 22:01:05 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheo
ra --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 58.101 / 52. 58.101
  libavcodec     55. 45.103 / 55. 45.103
  libavformat    55. 22.100 / 55. 22.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  0.100 /  4.  0.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-12-16 21:59:06
  Duration: 00:01:53.06, start: 0.000000, bitrate: 1467 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1272 kb/s, 29.97 fps, 29.97 tbr, 60k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2013-12-16 21:59:06
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Output #0, segment, to 'output02%d.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
Output file #0 does not contain any stream
  • Vídeo de exemplo @ HD 720p apenas para teste.
    Mas não está trabalhando com outros 2 vídeos completamente diferentes também
  • Versão mais recente do FFmpeg do Windows (git-9b195dd, 2013-12-22, static, 32-bit)

O que estou fazendo de errado?

    
por nixda 24.12.2013 / 19:32

1 resposta

5

Você precisa dizer ao ffmpeg para copiar todos os fluxos de saída com a opção -c copy e, adicionalmente, mapeie tudo desde a entrada até a saída com -map 0 . Isso é mencionado em todos os exemplos do muxer do segmento.

ffmpeg -i input.mp4 -f segment -segment_times 10,20 -c copy -map 0 output02%d.mp4

Não me pergunte porque é necessário. Eu diria que faria sentido mapear todos os fluxos automaticamente. Talvez alguém possa enviar um ingresso para isso, se não houver nada de óbvio que esteja faltando.

    
por 24.12.2013 / 20:57