如何用 OBS 录制延时(倍速)视频
延时摄影(Time-lapse photography)是一种通过延长摄影时间间隔来观察缓慢变化的摄影技术。 与 Adobe 官方网站 《How to create time-lapse videos》 讲解延时摄影的文章略有不同,本篇文章更多地是讲解如何使用类似 OBS Studio 这样的软件来录制延时视频。 具体案例是:我是一个长期在电脑前学习和工作的人,因此大部分有关活动可以用电脑屏幕来展示。 希望用每 1 分钟的最终视频长度来对应现实生活中 1 小时实际流逝时间,也就是 60 倍速的延时视频。 这样我只需要 10 分钟左右的时间就能够快速回顾我在镜头下的一天。
其它类似场景:板绘、3D 建模、动画、特效等制作过程的记录。
虽然 60 倍速的画面看起来很鬼畜,但是效果还是很不错的,是不错的信息压缩手段。
原始方法
前期录制一切照常,后期用如 FFMPEG 对视频进行倍速处理,但这样会导致:
- 前期录制需要更高的机器性能,有较高的 CPU 占用率
- 前期录制的视频文件体积过大,直接导致后期处理的时间过长
- 如果你设置不正确或做了多余的改动,甚至会导致视频重新渲染编码
问题在于,很多人并不知道 OBS 上面更正确、也是更轻松的延时视频的录制方法。
更轻松的方法
在录制时就降低视频的帧率,大幅减少视频文件的体积、后期处理的时间、机器资源的占用。
以 OBS 为例子,跑到 “设置-视频” 面板,将帧率调整为 1 FPS(每秒只录制 1 张图片)。 后期想得到 60 倍速的延时视频,只需要将视频加速 60 倍,帧率调整为 60 FPS 即可。 这样最终输出的视频每秒钟有 60 张图片,代表着在对应一分钟内的 60 次采样。
以 FFMPEG 为例子,使用如下命令:
ffmpeg -i input.mkv -filter:v "setpts=PTS/60" -an -r 60 output.mkv
参数解释:
-i input.mkv
:输入文件-filter:v "setpts=PTS/60"
:将视频的时间戳除以 60,即加速 60 倍-an
:去掉音频-r 60
:设置输出视频的帧率为 60 FPSoutput.mkv
:输出文件
为了方便,我直接在 Windows 下写了个批处理文件,把源文件拖上去即可:
@echo off
set "input_file=%~1"
if "%input_file%"=="" goto NoFile
set "output_file=%~dpn1_60fps.mkv"
ffmpeg -i "%input_file%" -filter:v "setpts=PTS/60" -an -r 60 "%output_file%"
echo Output saved to "%output_file%"
goto End
:NoFile
echo No file provided.
echo Please drag and drop a file onto the script.
goto End
:End
pause
新建一个 convert-to-60fps.bat
文件,将上面的代码复制进去,保存即可。
如果你录制中途突然中断,可以使用下面的代码来快速合并多个文件:
@echo off
setlocal enabledelayedexpansion
:: Check if at least two files are provided
if "%~1"=="" (
echo Please drag at least two video files onto this script.
pause
exit /b
)
:: Create filelist.txt file
set "listFile=filelist.txt"
if exist "%listFile%" del "%listFile%"
:: Create a temporary file for sorting
set "tempFile=sorted_files.txt"
if exist "%tempFile%" del "%tempFile%"
:: List files and sort by name
for %%f in (%*) do (
echo %%~f >> "%tempFile%"
)
:: Sort the files and write to filelist.txt
for /f "delims=" %%f in ('sort "%tempFile%"') do (
echo file '%%f' >> "%listFile%"
)
:: Delete temporary file
del "%tempFile%"
:: Concatenate videos
ffmpeg -f concat -safe 0 -i "%listFile%" -c copy output.mkv
:: Delete the temporary filelist.txt file
del "%listFile%"
:: Completion message
echo Concatenation completed. Output file: output.mkv
pause
关于 OBS 其它地方的设置,视频封装格式采用了默认的 MKV 格式,可按需修改。 录像设置,我使用的是 AMD HW H.265 (HEVC) 编码器,VBR 1000 Kbps 速率,1080p 分辨率。 差不多平均每天录制的视频文件大小在 1.5 GB 左右,加速后的视频文件大小在 350 MB 左右。 而且最终视频的每一帧都是清晰的,没有丢帧的情况。
最终的文件你可以用私享视频的形式上传到 YouTube,或者直接保存在本地硬盘上。 以此换算,大概一年需要 128 GB 的存储空间,这个量对于现在的硬盘来说并不算多。 尤其是 NAS 玩家,一块 16 TB 的硬盘就能够存储近 40 年的视频。害怕 😱😱😱