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

Jay*_* D. 5 video mp4 ffmpeg video-editing

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

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

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

(视频长度超过3分钟,部分内容不能有重叠)

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

编辑:这就是我对这个问题的了解:

我在 FFMPEG 上找到了有关“超级用户”和“Stackexchange”的问题的答案: -如何以秒为单位获取视频持续时间 -从视频文件中剪切具有开始/结束位置的部分 -连接 mp4 文件

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

$ ffprobe -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 -sexagesimal inputvideo.mp4
Run Code Online (Sandbox Code Playgroud)

使用 -sexagesimal 我应该得到正确的时间格式以便之后使用。

剪掉部分视频

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy /path/videopart[number].mp4
Run Code Online (Sandbox Code Playgroud)

在这里我不知道:如何对总时间进行操作(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'
Run Code Online (Sandbox Code Playgroud)

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

$ ffmpeg -f concat -i videoparts.txt -c copy outputvideo.mp4
Run Code Online (Sandbox Code Playgroud)

小智 1

根据 ffmpeg 文档“查找时间持续时间”,指定“查找时间”的唯一方法是给出准确的时间。

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