Video 修剪视频并使用FFmpeg在其上添加回飞棒效果

Video 修剪视频并使用FFmpeg在其上添加回飞棒效果,video,ffmpeg,video-processing,android-ffmpeg,Video,Ffmpeg,Video Processing,Android 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]是操作的源

我有一个给定的源视频,总共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]尝试的,它应该作为我剪辑过的视频的输出流。但这并不奏效

我发现的另一种方法是使用
-ss0-t5
,但这会在处理结束时对其进行修剪,效率低下,因为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
我发现的另一种方法是使用
-ss0-t5
,但这会在处理结束时对其进行修剪,效率低下,因为ffmpeg会在整个30秒内应用我的操作,然后丢弃25秒

请记住,所有标志都应用于下一个in-/output文件

如果只想读取输入文件的前5秒,则必须将
-ss0-t5
置于
-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秒运行过滤器链


如果将
-ss0-t5
放在输入文件之后,它将应用于输出
out.mp4
,因此将处理完整的输入文件,但只需将结果写入
out.mp4
的前5秒,谢谢您的回答!是的,这确实有效,但这不会占用不必要的处理时间,因为它会将视频剪辑两次吗?难道没有办法修剪一次并重新使用吗?您可以分割修剪过的视频:
[0]trim…[a];[a] 拆分[a][b];[b] 反向[b];[a] [b]concat