使用FFmpeg将视频分割成等长的片段

ama*_*057 3 bash video split ffmpeg

我需要将许多长度未知的视频分成 2 分钟的块。我可以使用https://unix.stackexchange.com/questions/1670/how-can-i-use-ffmpeg-to-split-mpeg-video-into-10-minute-chunks中接受的答案来执行此操作,但这需要复制、粘贴和修改许多行,并手动计算每个视频中有多少个 2 分钟的部分(对于一些视频来说没什么大不了的,但过了一段时间就会变得非常乏味)。

我过去使用过代码,其中我所要做的就是指定输入视频、开始时间、片段长度和输出名称,并在与它生成的输入视频相同的文件夹中的 .sh 文件中运行它所有必要的单独视频,标记为“output_video01”、“output_video02”等。但是,不知何故,它不想在我的新计算机上工作。其他声称能够做到这一点的答案对我来说也不起作用(当作为 .bat 或 .sh 文件运行时)。我相信我之前使用的代码是:

ffmpeg -i "input_video.MTS" -ss 164 -f segment -segment_time 120 -vcodec copy -reset_timestamps 1 -map 0:0 -an output_video%d.MTS
Run Code Online (Sandbox Code Playgroud)

另一个建议对我不起作用,但显然对其他人有用(请参阅https://superuser.com/a/820773/313829):

ffmpeg -i input_video.MTS -c copy -map 0 -segment_time 8 -f segment output_video%03d.MTS
Run Code Online (Sandbox Code Playgroud)

我目前拥有带有周年纪念更新版本的 Windows 10,其中启用了 Bash,但由于某种原因它无法工作。我什至看不到它给我的错误,因为窗口关闭得如此突然。

ama*_*057 9

原始代码(对我不起作用)是:

ffmpeg -i input_video.MTS -c copy -map 0 -segment_time 8 -f segment output_video%03d.MTS
Run Code Online (Sandbox Code Playgroud)

最终对我有用的代码:

ffmpeg -i input_video.MTS -c copy -map 0 -segment_time 8 -f segment output_video%%03d.MTS
Run Code Online (Sandbox Code Playgroud)

“%”必须是“%%”。此外,它在 .bat 文件(而不是 .sh)中运行。

  • % 是 Windows 中的保留字符,因此每当您需要在 shell 命令中使用它时,您都需要将其转义 %% 在 unix 中则不需要 (3认同)