修剪视频并使用 FFmpeg 在其上添加回旋镖效果

问题描述

我有一个给定的源视频,总共 30 秒。 现在我想修剪前 5 秒并对其应用回旋镖效果。这是我目前所在的命令:

ffmpeg -i src.mp4 -y -an -filter_complex "[0]trim=start=0:end=5[a];[a]reverse[r];[a][r]concat,loop=0:250,setpts=N/30/TB" out.mp4

我对 ffmpeg 比较陌生,我试图了解原理,但我有点挣扎。阅读一些文档后,我了解到第一个括号 [0] 是操作的源流,前导结束括号是输出名称,因此我可以继续使用 concat 等其他操作处理它。

这就是我对 [a] 的尝试,它应该作为我修剪后的视频的输出流。但这并不奏效。

我发现的另一种方法是使用 -ss 0 -t 5,但这会在处理结束时对其进行修剪,这是低效的,因为 ffmpeg 会在整个 30 秒内应用我的操作,然后丢弃 25 秒.

我理解错了什么,我该如何解决

解决方法

类似的东西?

ffmpeg -i src.mp4 -filter_complex "
[0]trim=start=0:end=5[a];
[0]trim=start=0:end=5,reverse[b];
[a][b]concat
" -an out.mp4 -y -hide_banner
,

我发现的另一种方法是使用 -ss 0 -t 5,但这会在处理结束时对其进行修剪,这是低效的,因为 ffmpeg 会在整个 30 秒内应用我的操作,然后丢弃 25 秒.

请记住,所有标志都适用于 next 输入/输出文件。

如果您只想读取输入文件的前 5 秒,则必须将 -ss 0 -t 5 放在 -i 标志之前:

ffmpeg -ss 0 -t 5 -an -i src.mp4 -y -filter_complex "[0]split[b][c];[c]reverse[r];[b][r]concat" out.mp4

这将仅在 src.mp4 的前 5 秒运行过滤器链。

如果将 -ss 0 -t 5 放在输入文件之后,它将改为应用于输出 out.mp4,因此将处理完整的输入文件,但仅将结果的前 5 秒写入 { {1}}。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...