在搜索 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
在研究这个问题的解决方案时,我在问题跟踪器中偶然发现了这张票ffmpeg
,标题为:将输入视频分割成多个输出视频块。
这张票重点介绍了一个补丁,它使您最终能够提供时间点列表,使用单个命令行将视频切割成更小的部分,如下所示:
$ ffmpeg -i input.avi -f segment -segment_times 10,20,40,50,90,120,180 \
-vcodec copy output02%d.avi
该补丁似乎已在此版本的代码存储库中发布:
commit 2058b52cf8a4eea9bf046f72b98e89fe9b36d3e3
Author: Stefano Sabatini <[email protected]>
Date: Sat Jan 28 22:36:38 2012 +0100
lavf/segment: add -segment_times option
Address trac ticket #1504.
我下载了这个静态构建的版本ffmpeg
,ffmpeg.static.64bit.2013-10-05.tar.gz来自ffmpeg 站点,但它显然不包括该开关。
$ ./ffmpeg --help |& grep segment
$
有谁能让这个新开关正常工作吗?
答案1
是不是因为失踪了-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
如果您需要更精细的分割,您可以使用 OpenCV 读取原始视频并将所需的帧写入新的分割。检查这些:“使用 OpenCV 创建视频”和“根据多个起始和结束帧索引将视频分割为多个块”