如何批量剪切 avi 文件到一定的长度?

如何批量剪切 avi 文件到一定的长度?

问题

我有一个文件夹,里面有大约 1000 个 .avi 视频文件,这些文件应该被分割成 1 秒长的电影剪辑,或者在某个点(比如说 7 秒到 8 秒之间)剪切成 1 秒长。这些电影剪辑包含移动的粒子,我用来测量这些粒子速度的程序需要 1 秒长的电影剪辑。.avi 文件的开头和结尾已损坏,所以我想从中间的某个地方截取 1 秒的剪辑。我想保留文件名,因为它们是我所拍摄的视频样本的参考。我正在使用 Windows 7,完全没有编程背景(除了 R),所以把我当成新手吧。

早期试验

我一直在尝试寻找这个问题的解决方案。第一次这样做时,我用 Final Cut Pro 手动剪切了大约 1000 个剪辑。这花了我几天时间,但我无法使用该软件。无论如何,我认为一定有更好的解决方案。我试图理解虚拟配音,但我不知所措并放弃了。现在我一直在寻找 FFmpeg 是否可以解决问题。我很确定它可以,但我又不知所措了。我找到了这个BASH 脚本以及@evilsoup 的回答这个问题。如果我能设法将这两者结合起来,这可能会奏效。我对这个过程有很多疑问,所以我最好简明扼要地讲一下:

如何在 Windows 7 下的 FFmpeg 中结合这两个脚本(拆分和 for 循环)?

(即我可以在 Windows 下使用 BASH 脚本吗?如果可以,如何使用?)

答案1

您确实不需要任何复杂的脚本。

这个简单的 Bash 循环将获取每个.avi文件,跳过视频中的 5 秒,从中剪切一秒(-t 1),然后写入-cut.avi。它将复制视频流并丢弃音频。

for i in *.avi; do ffmpeg -ss 5 -i "$i" -c:v copy -an -t 1 "${i%.avi}-cut.avi"; done

您可以替换"${i%.avi}-cut.avi""output/$i"将输出文件写入文件夹output而不更改其名称。

您可以在 Windows 上使用 Bash使用 Cygwin,但这个循环应该很容易转换成 Windows 原生循环(如果有人知道,请随意编辑这篇文章)。

视频注释:

  • FFmpeg 是可作为静态构建对于每个主要的操作系统 - 只需提取下载的档案即可安装。
  • 如果您想要更准确的切割起点,请考虑将其放置在-ss后面-i "$i"
  • 如果视频文件一开始就损坏了,并且 FFmpeg 无法解码输入,那么这可能根本不起作用。

相关内容