使用 ffmpeg 将视频文件分割成多个片段

使用 ffmpeg 将视频文件分割成多个片段

当你想提取一个视频文件中第2分钟到第4分钟的两分钟时,你将使用命令

ffmpeg -i input.mpg -sameq -ss 00:02:00 -t 00:02:00 output.mpg

我想将视频分成两分钟的片段。我有一个使用 bash 脚本的想法,但有一些错误。

for i in seq 50;
do ffmpeg -i input.mpg -sameq -ss 00:`expr $i \* 2 - 2`:00 -t 00:02:00 output.mpg; done

您知道如何纠正我使用表达式的脚本中的错误吗$i?或者有更好的解决方案吗?

答案1

您忘记在调用中使用反引号 - 或更好:$( )subshel​​l seq。这有效:

for i in $( seq 50 );
do ffmpeg -i input.mpg -sameq -ss 00:`expr $i \* 2 - 2`:00 -t 00:02:00 output.mpg; done

另一件事是您可能不希望output.mpg在每次运行中都被覆盖,是吗? :)$i也可用于输出文件名。

除此之外:在 bash 中,您可以只使用$(( ))or$[ ]代替expr- 它看起来也更清晰(在我看来)。另外,不需要seq- 大括号扩展就是获得序列所需的全部。这是一个例子:

for i in {1..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

大括号的另一个好处是您可以在名称中包含前导零(对于将来的文件排序非常有用):

for i in {01..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

另请注意,如果您只需更改范围,则i*2 - 2可以轻松简化为:i*2

for i in {00..49}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i*2 ]:00 -t 00:02:00 output_$i.mpg
done

相关内容