FFMPEG:剪切视频的特定部分,并将它们合并到一个文件中

时间:2017-02-18 15:04:55

标签: video ffmpeg mp4 video-editing

我想删除mp4视频的特定部分,并合并这些部分以创建单个视频文件。这是为了制作视频的动画预览。

更具体地说: 剪掉视频的这些部分:

  • 第1部分:切割的开始时间=总时间的20%;结束时间 cut =总时间的20%+ 3秒,
  • 第2部分:总时间的40%; 40%nof总时间+3秒
  • 第3部分:总时间的60%; 60%的总时间+ 3秒
  • 第4部分:总时间的80%; 80%的总时间+ 3秒

(视频超过3分钟,所以部分不应有任何重叠)

然后将这4个部分合并到一个新的mp4视频文件中。你是如何用FFMPEG做到的?

编辑:所以这就是我对这个问题的看法:

我在FFMPEG上找到了关于“超级用户”和“Stackexchange”问题的答案: - 如何在几秒钟内获得视频持续时间 - 从视频文件中选择具有开始/结束位置的部分 -Concatenate mp4文件

所以:获取视频的总时间:

$ ffprobe -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 -sexagesimal inputvideo.mp4

使用-sexagesimal,我应该得到正确的时间格式。

剪掉部分视频

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy /path/videopart[number].mp4

就在这里我不知道: 如何对总时间进行操作(20%,40%......然后20%+ 3秒,40%+ 3秒..) 如何在代码行中正确实现它

使用文件名创建文件videoparts.txt:

$ cat videoparts.txt
file '/path/videopart1.mp4'
file '/path/videopart2.mp4'
file '/path/videopart3.mp4'
file '/path/videopart4.mp4'

然后这应该将它们合并到一个文件中:

$ ffmpeg -f concat -i videoparts.txt -c copy outputvideo.mp4

1 个答案:

答案 0 :(得分:1)

根据ffmpeg文件SeekingTime Duration,指定“寻找时间”的唯一方法是给出确切的时间。

您可以编写一个shell脚本来使用ffprobe提取视频的总持续时间,计算起点并使用这些起点调用ffmpeg。