任何人都获得了与 ffmpeg 一起使用的开关“-segment_times”?

slm*_*slm 5 ffmpeg video-editing

在搜索 U&L 时,我注意到有相当多的问题询问如何编写如下ffmpeg命令行的生成:

ffmpeg -i video.mp4 -ss 00:00:00 -t 00:10:00 -c copy 01.mp4
ffmpeg -i video.mp4 -ss 00:10:00 -t 00:10:00 -c copy 02.mp4
ffmpeg -i video.mp4 -ss 00:20:00 -t 00:10:00 -c copy 03.mp4
Run Code Online (Sandbox Code Playgroud)

在为此研究解决方案时,我在ffmpeg问题跟踪器中偶然发现了这张票,标题为:将输入视频拆分为多个输出视频块

这张票突出显示了一个补丁,它使您最终能够提供一个时间点列表,以使用这样的单个命令行将视频切割成更小的部分:

$ ffmpeg -i input.avi -f segment -segment_times 10,20,40,50,90,120,180 \
      -vcodec copy output02%d.avi
Run Code Online (Sandbox Code Playgroud)

该补丁似乎已在此版本的代码存储库中发布:

commit 2058b52cf8a4eea9bf046f72b98e89fe9b36d3e3
Author: Stefano Sabatini <stefasab@gmail.com>
Date:   Sat Jan 28 22:36:38 2012 +0100

    lavf/segment: add -segment_times option

    Address trac ticket #1504.
Run Code Online (Sandbox Code Playgroud)

我从ffmpeg 站点下载了这个静态构建的ffmpeg, ffmpeg.static.64bit.2013-10-05.tar.gz版本,但它显然不包含该开关。

$ ./ffmpeg --help |& grep segment
$
Run Code Online (Sandbox Code Playgroud)

有没有人能够让这个新开关工作?

Jon*_*Jon 2

是否是因为缺少-map选项,该选项将输入流指定为输出文件的源。我正在使用 ffmpeg 2.6.1 并且能够使用以下命令分割视频-segment_times

ffmpeg -i foo.mp4 -segment_times 10,20,30,40 -c copy -map 0 -f segment  %03d.mp4
Run Code Online (Sandbox Code Playgroud)

如果您需要更精细的分割,您可以使用 OpenCV 读取原始视频并将所需的帧写入新的分割。查看这些:“使用 OpenCV 创建视频”“根据多个起始和结束帧索引将视频分割为多个块”