如何通过丢帧来加速视频?

Ror*_*ory 6 linux video encoding gstreamer

我有一段30分钟的视频.我想制作一个加速版本(比方说)15分钟.我可以通过丢弃每第2帧来做到这一点.我怎么能在linux上这样做?

我正在玩gstreamer,看起来很酷.有没有办法用gstreamer做到这一点?这样做的gst-launch命令行是什么?

我的源视频是Motion JPEG,所以我确实要删除帧.即使它使用关键帧,仍然应该有一种方法来"加倍"电影?

我想要一个命令行方式来实现这一点,因为我想自动化它.

joh*_*les 5

最近,我环顾了片刻,以寻求最佳方法。我尝试了mencoder -speed和libavfilter的setpts选项。我发现最好的方法是输出单个帧,然后将这些帧重新编码为单个视频。本示例假定输入视频为30fps,以获得最佳效果,然后每隔一帧丢帧。

# Output the video at 15fps as jpegs
ffmpeg -i input.m4v -r 15 -f image2 /tmp/output-%06d.jpg
# Re-encode the frames at 30fps as h264
ffmpeg -r 30 -i "/tmp/output-%06d.jpg" -vcodec libx264 -threads 0 -an output.m4v
Run Code Online (Sandbox Code Playgroud)


jer*_*ity 5

我有一个视频最初长 16 分 6 秒,帧率为 29.97,但我想加快它的速度(通过丢帧),以便它以正常速度的 16 倍左右播放。这是我使用的命令:

ffmpeg -r:v "480/1" -i input.avi -an -r:v "12/1" output.avi
Run Code Online (Sandbox Code Playgroud)

  • @Hendy,不。480/30(“强制”FPS / 当前输入 FPS)= 16(将 29.97 舍入为 30 后)。现在,这就是“放缓”发生的地方。现在,在 1 秒的 480 个帧中,我们将选择 12 个出现在输出影片的 1 秒中(实际上,每 40 个帧一次,但它们之间的间隔为 1/12 秒) (2认同)

小智 5

要通过删除帧来加速视频文件,可以使用以下语法:

ffmpeg -r:v "Fin*M/1" -i input.mp4 -an -r:v "Fout/1" output.mp4
Run Code Online (Sandbox Code Playgroud)
  • Fout”:这只不过是你想要的output.mp4的FPS(每秒帧数)的数量,例如30 FPS。
  • " Fin": input.mp4 的 FPS 数,例如 25 FPS。您可以通过以下方式找到这一点:ffmpeg -i input.mp4
  • M”:倍增器,您想要的速度系数,例如 15 使视频速度快 15 倍。
  • " Fin * M":所以在这个例子中,即 25 * 15 = 375

这个例子的最终结果是:

ffmpeg -r:v "375/1" -i input.mp4 -an -r:v "30/1" output.mp4
Run Code Online (Sandbox Code Playgroud)

从这篇文章中提取这些信息很困难。就我而言,这是试图澄清网上缺失的信息。


dan*_*nio 1

avidemux可以改变电影的帧速率并提供命令行控制