【问题标题】:Split single video input files into 30 second blocks将单个视频输入文件拆分为 30 秒的块
【发布时间】:2016-10-05 14:35:28
【问题描述】:

我正在尝试将多个视频文件 (.mov) 拆分为 30 秒的块。

我不需要指定 30 秒的开始或结束位置。

示例- 单个 45 秒视频 (VID1.mov) 将被拆分为 VID1_part1.mov(30 秒)和 VID1_part2.mov(15 秒)。理想情况下,我也可以删除音频。

我尝试使用 bash (osx),但没有成功。它没有将视频分割成多个部分——而是似乎只是修改了原始文件(并使其长度为 1-2 秒):

find . -name '*.mov' -exec ffmpeg -t 30 -i \{\} -c copy \{\} \;

【问题讨论】:

  • 您的视频位于 MOV 容器中。如果要将其拆分为文件,我相信您还需要添加比特流标头(请参阅视频规范。)。我认为这就是为什么您只能播放原始剪辑的第一块的原因。尝试将您的视频剪辑/播放成较小的(可能是 4-5 个)片段,您可能会理解这个问题。

标签: bash macos ffmpeg


【解决方案1】:

您可以为此使用 FFmpeg 的段复用器。

ffmpeg -i input -c copy -segment_time 30 -f segment input%d.mov

根据视频关键帧的位置,每个片段不会在 mod 30 秒后开始。为此,您必须省略 -c copy

此外,FFmpeg 不进行就地编辑。您的 bash 脚本似乎也显示了输出的输入名称。那是行不通的。

【讨论】:

  • 你写了input。对于我的示例,我想简单地执行目录中的所有 .mov 文件(因此我将 input 替换为 *.mov)。但是,当我运行它时,它显示“video 1.mov 已经存在-覆盖?”。它不应该只是从中创建新的细分吗?
  • 你不能在 ffmpeg 的 -i 之后使用通配符 - 它只会看到 -i file1 file2 file3 ... 并假设 file2 是一个输出文件,你必须在它周围的 shell 中创建一个循环
  • 即使我指定了文件,它也会简单地复制整个视频,全长,并将其重命名为 input%d.mov...
猜你喜欢
  • 2021-11-23
  • 2014-05-21
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多