如何使用 FFmpeg 和 -segment_times 选项分割视频?

如何使用 FFmpeg 和 -segment_times 选项分割视频?

我尝试使用 FFmpeg 分割视频,-segment_times选项如下FFmpeg 票证。但它不起作用,错误输出没有帮助,并且结果输出是一个零大小的视频。

section_times 次

指定分割点列表。times 包含以逗号分隔的持续时间规范列表,按递增顺序排列。另请参阅“segment_time”选项。

请注意,由于很长的原因,我故意没有使用-ss-t选项,无法解释。

我的命令

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

输出

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
  • 示例视频@ HD 720p 仅用于测试。
    但它无法与另外 2 个完全不同的视频一起使用
  • 最新FFmpegWindows 版本(git-9b195dd,2013-12-22,静态,32 位)

我究竟做错了什么?

答案1

您需要告诉 ffmpeg 使用该-c copy选项复制所有输出流,此外将所有内容从输入映射到输出-map 0。这在段复用器的所有示例中都有提及。

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

请注意,如果视频的关键帧间隔不规则,则片段长度可能与您指定的时间不符,因为 ffmpeg 只能在关键帧处将视频分割成片段。如果您想要规则的片段大小,则需要重新编码视频(例如,选择像libx264而不是 这样的编码器copy)并使用 来设置关键帧间隔-g

相关内容