我正在尝试减慢在 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,这是不可能的。