【问题标题】:Trim a video and add the boomerang effect on it with FFmpeg使用 FFmpeg 修剪视频并在其上添加回旋镖效果
【发布时间】:2021-04-28 15:23:39
【问题描述】:

我有一个总时长为 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 秒,所以效率会很低。

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

【问题讨论】:

    标签: video ffmpeg video-processing android-ffmpeg


    【解决方案1】:

    这样的?

    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
    

    【讨论】:

    • 感谢您的回答!是的,这确实有效,但这不会花费不必要的处理时间,因为它会修剪视频两次?难道没有办法修剪一次并重复使用它吗?
    • 您可以分割修剪后的视频:[0]trim...[a];[a]split[a][b];[b]reverse[b];[a][b]concat
    【解决方案2】:

    我发现的另一种方法是使用-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 秒写入out.mp4

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 2018-01-03
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多