所以我试图加快我所有的电视剧集(因为其中一些节奏真的很慢)。源是 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/Faster
或Speed/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