0

我正在尝试减慢在 Android 手机上录制的视频的速度960fps。我发现很多以前的帖子和博客基本上都说同样的事情,你需要更改“演示时间戳”(pts)。我还找到了说同样事情的官方文档。命令行基本上如下所示:

ffmpeg -i input.mp4 -filter:v "setpts=4*PTS" -r 30 -y output.mp4

我使用 Android Filter Transfer 复制了视频文件,当我使用上面的命令行时,它可以减慢速度,但结果输出不稳定。的输出ffmpeg还表明它正在复制帧:

frame=  687 fps=103 q=-1.0 Lsize=    4454kB time=00:00:22.80 bitrate=1600.1kbits/s dup=515 drop=0 speed=3.42x

在文件上运行ffprobe显示:

ffprobe version 3.1.1 Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.3.0 (clang-703.0.31)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-lda
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID_20161030_213810.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2016-10-30 16:08:14
    location        : +17.3874+078.3395/
    location-eng    : +17.3874+078.3395/
    com.android.version: 6.0.1
    com.android.capture.fps: 120.000000
  Duration: 00:00:05.73, start: 0.000000, bitrate: 14991 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 13859 kb/s, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2016-10-30 16:08:14
      handler_name    : VideoHandle

这似乎检测到视频30 fps不是960 fps,这可能是它填充重复帧而不是使用现有帧的原因。

我在 Lenovo Z2 Plus(AKA Zuk Z2)上录制视频。如果我使用内置播放器以慢速播放视频,它看起来非常流畅,所以帧肯定在那里。有人可以帮我找出正确的方法吗?该文件可在此处获得(大约 10MB),以防有人想尝试。

更新:用另一部手机录制的手机上的慢动作视频播放。注意火花是多么平滑和缓慢,如果原始视频是 30fps,这是不可能的。

4

0 回答 0