将视频速度提高 1.5 倍但保留所有帧

将视频速度提高 1.5 倍但保留所有帧

所以我试图加快我所有的电视剧集(因为其中一些节奏真的很慢)。源是 30fps。如果已经尝试使用以下命令执行此操作:(我执行 x1.6,因为这样更容易设置 setpts 值(否则它将是 0.66666666666...)

ffmpeg -i VideoOriginal.mkv -r 48 -filter:v "setpts=0.625*PTS" VideoSpeedup.mkv

但这里的文件大小要小得多(也许我应该使用预设的质量?)无论如何。该文件长达 40 分钟,并且在 10 分钟后就基本上坏了(VLC 开始误解时间戳,播放器基本上已经崩溃)。

而且使用此方法不会加速音频。

有什么建议可以使情况变得更好吗?

(我想要“保留所有帧”的原因是,因为我要使用 x1.6,所以我只用达到 48fps,这意味着我实际上不会丢失或必须生成新帧。)

编辑:刚刚意识到我的原始文件的 fps 是 23.97612......我猜这确实使事情变得更加复杂......?

答案1

更改视频速度时,通常无需设置-r,只需让 ffmpeg 更改帧的时间戳即可。这可能会导致丢帧,当然可以通过设置适当的帧速率来避免,但您必须设置它输入规范。

要加速视频和音频:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.625*PTS[v];[0:a]atempo=1.6[a]" -map "[v]" -map "[a]" output.mkv

音频节奏是修改帧时间戳的因素的倒数。随着帧速率的变化:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.625*PTS[v];[0:a]atempo=1.6[a]" -r 48 -map "[v]" -map "[a]" output.mkv

如果您的视频没有音频,您可以从中删除音频过滤器filter_complex

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.625*PTS[v]" -map "[v]" output.mp4

但这里的文件大小要小得多

这是因为所有内容都经过了重新编码。通常,libx264用于视频编码。默认质量应该不错,但您可以使用选项来更改它-crf。请参阅H.264 编码指南了解更多信息。

您也可以直接告诉 VLC 加快播放速度回放菜单。这样可以避免不必要的转换和速度变化的硬编码。

答案2

(因为您在问题中提到了 VLC...)

在 VLC 中,转到Playback菜单,选择Speed/FasterSpeed/Faster (fine)

编辑:并且@slhck 同意,所以我一定是对的:-)

答案3

我正在使用这个批处理文件:

rem Based on your findings i found the following for making screen recordings.
rem First set your devices and get https://github.com/rdp/screen-capture-recorder-to-video-windows-free/releases
rem To list your devices: (Remove rem...)
rem ffmpeg -list_devices true -f dshow -i dummy
rem ffmpeg  -f dshow  -list_options true -i video="screen-capture-recorder"
goto :end rem (remove rem...)
rem recording the screen with my audio out device: (Use no codec for compression, long file) (Also: match ffmpeg codecs agains own video card if not nvenc compat.)
ffmpeg -y -rtbufsize 256M -f dshow -video_size 1920x1080 -i video="screen-capture-recorder":audio="Stereo-mix (Realtek High Definition Audio)" -c:v h264_nvenc -b:v 10M -bufsize 20M -qp 0 output.mp4
rem Remove double frames (audio stays ok though)
ffmpeg -y -i output.mp4 -vf mpdecimate -c:v h264_nvenc -b:v 10M -bufsize 20M -qp 0 output_decimated.mp4
rem get the audio out and speed it up, my case times 2
ffmpeg -y -i output_decimated.mp4 -filter_complex "[0:a]atempo=(1/0.50)[a]" -map "[a]" -codec:a libmp3lame -q:a 2 output_fast.mp3
rem Add some volume, because the mixed music is loud. Other way around i made the mixed music less loud with:
rem ffmpeg -y -i 2018.mp3 -filter:a "volume=0.20" 2018_soft.mp3
ffmpeg -y -i output_fast.mp3 -filter:a "volume=6.0" -codec:a libmp3lame -q:a 2 output_fast_hard.mp3
rem Mix sped up audio only from decimated video with music
ffmpeg -y -i output_fast_hard.mp3 -i 2018_soft.mp3 -filter_complex "[0:0][1:0] amix=inputs=2:duration=shortest" output_mixed.mp3
rem Mix the (mixed) sound back to the 30 fps video. Now the sound will go twice as much to fast, but: (see next)
ffmpeg -y -i output_decimated.mp4 -i output_mixed.mp3 -map 0:v -map 1:a -c copy output_30.mp4
rem Speed up the video twice, but KEEP ALL (decimated) FRAMES! Sound stays same, so it should match the sped up video AND previous sped audio.
ffmpeg -y -i output_30.mp4 -vf settb=\(1/60\),setpts=N/TB/60 -r 60 -c:v h264_nvenc -profile:v high -pix_fmt yuv420p -b:v 10M -bufsize 20M -bf:v 3 -preset slow -rc:v vbr_hq -rc-lookahead 32 output_60.mp4

:结束暂停

如果我没记错的话,我测试了一下,结果看起来不错,视频流畅,但是:录制时你应该做慢动作……这就是它的缺陷。实时视频游戏不能减速,或者需要以某种方式进行修补,游戏中没有内部移动/时间修复,除非内置录制,比如 gta5

也许您会看到一些屏幕录制方面的改进。比如为什么不能录制 60 fps?ffmpeg 有没有办法在实时内存中以超快的速度存储,比如如果我有 32 或 64 GB 的 RAM?

https://www.youtube.com/watch?v=n76nhnMR6Tc&list=PLetXkEBOuSmaP0O9firbuT9lHcn25QuiW

相关内容