5个版本
0.1.4 | 2023年5月28日 |
---|---|
0.1.3 | 2023年5月28日 |
0.1.2 | 2023年5月28日 |
0.1.1 | 2023年5月27日 |
0.1.0 | 2023年5月27日 |
152 in 视频
每月55次下载
41KB
850 行
更多FPS
使用可以生成中间帧的AI模型,我们可以使我们的视频更平滑。
本项目旨在自动化此过程。
✔️ 要求 ✔️
- ffmpeg
- 提取视频帧
- 提取音频
- ffprobe
- 提取场景
- 支持通过“-n”选项指定帧数的AI模型
- (rife v4.6)https://github.com/nihui/rife-ncnn-vulkan
⚠️ 您需要将ffmpeg和ffprobe添加到PATH。Windows用户,您可能需要手动添加它们到PATH。
安装
安装 rust
cargo install more-fps
用法
首先我们需要设置一些环境变量(使用正确的路径)
AI_MODEL
- 模型文件夹的路径
AI_BINARY
- AI二进制文件的路径(它是一个文件!)
例如,假设AI模型和二进制文件在您的当前目录中
Linux
export AI_MODEL=models/rife-v4.6
export AI_BINARY=rife-ncnn-vulkan
RUST_LOG=info more-fps -t /tmp/more_fps/ input.mkv output.mkv
Windows
命令提示符
set AI_MODEL=models/rife-v4.6
set AI_BINARY=rife-ncnn-vulkan
TODO:完整的Windows命令
Usage: more-fps [OPTIONS] -t <TEMP_DIR> <INPUT> <OUTPUT> <AI_BINARY> <AI_MODEL>
Arguments:
<INPUT>
Path to the file for which we'll increase the frame rate
<OUTPUT>
final output path if it exists, we'll try to build on-top of it
<AI_BINARY>
AI Model used to generate intermediate frames
[env: AI_BINARY=]
<AI_MODEL>
[env: AI_MODEL=]
Options:
--fps <FPS>
The target frame count for the ai binary The default will have the ai binary change your (most likely 24fps) video to 60fps
[default: sixty]
Possible values:
- sixty: 60 fps
-t <TEMP_DIR>
Path to put temporary/intermediate data like ffmpeg generated frames and ai generated frames If the path doesn't exist, it will be created Perferably a fast m.2 ssd or ramdisk because they are fast
-m <MAX_STEP_SIZE>
Maximum number of seconds to extract (assuming the scene splits are too big)
[default: 50]
--ai-args <AI_ARGS>
Extra args you may want to pass to the ai binary
[default: "-g 0,-1 -j 8:8,16:32:16"]
-r <RESET>
Clears cached data
[default: everything]
Possible values:
- everything: Delete the entire temp_directory which contains a few building blocks: "ffmpeg" - used for storing extracted frames "generated_frames" - used for storing generated frames "scene_data.txt" - holds scene timestamps
- nothing: Nothing will be deleted... meaning we try to continue from where we left off
-s <SCENE_GT>
Defines how we should split the video up before generating frames If there is a big difference between frames, the ai will generate bad frames
[default: .1]
--crf <CRF>
https://trac.ffmpeg.org/wiki/Encode/H.264#a1.ChooseaCRFvalue
[default: 18]
-h, --help
Print help (see a summary with '-h')
🧠 高级技巧 🧠
- 将临时目录的目标设置为RAM磁盘。这将显著加快进程,因为我们进行了大量的写入。
- 如果您想从上次停止的地方继续,将重置选项(
-r
)设置为nothing
。使用此选项设置为nothing
时,我们将简单地从上次停止的地方继续提取。
💡 工作原理 💡
- 识别视频的场景变化
- 提取帧
- 生成与目标FPS匹配的帧(默认:60)
- 将生成的帧聚合到一个新的视频中
- 包含来自原始视频的音频和字幕
识别场景变化
如果两个连续的帧差异足够大,模型可能会生成一个非常差的中间帧。为了避免这种情况,我们使用ffmpeg来识别具有足够场景差异的时间戳。您可以使用 -s
选项更改此场景值(见上面的帮助文本)
https://www.ffmpeg.org/ffmpeg-filters.html#select_002c-aselect
然后我们将这些时间戳用作提取帧的起始/结束时间。
⚠️ 如果您注意到这些差的帧,我建议使用 -s
选项降低场景切割阈值。
提取帧
我们希望从原始视频文件中提取帧,但出于两个原因,我们不希望一次性提取所有帧:
- 如上所述,AI模型可能会生成不良的中间帧。
- 提取所有帧可能需要数百GB的数据,这可能会超出您磁盘的容量。
因此,我们不是提取所有帧,而是根据时间戳给出的间隔提取。
这些时间间隔可能仍然非常大... 为了避免超出磁盘容量,我设置了一个默认的 MAX_STEP_SIZE。此选项用于限制每次帧提取将使用多少秒。
生成与目标FPS匹配的帧
这是使用AI模型的地方。我们需要一个支持上述 "-n" 选项的模型,这样我们就可以告诉模型每次帧提取应生成多少帧。
最简单的例子是,如果我们有1秒(通常是23.998即24 fps),AI模型将被指示生成60帧。并非所有场景切割都这么理想,因此会涉及小数...
⚠️ 我假设您有一个CPU和GPU想要使用... 如果不是这种情况,请随意更改 --ai-args
选项
聚合生成的帧
现在我们有了AI生成的帧,我们使用ffmpeg生成视频。
包含来自原始视频的音频和字幕
在提取帧完成后,我们将音频+字幕从原始文件复制到输出文件。
其他
如果您想支持我,您可以发送任何金额的Monero
42NTT1Q91P2TcG7vzN3oi2cYEJEaJ6QbzH3pwXGDKiSQiaBVAeZkYnBX6SijCxgKpc5tTUeVW5AuwDWBNdewZia9AJ5TgLT
TODO
- 添加测试管道
- cli应包括预设设置,以便我们可以针对超快/非常慢
- 支持更高的FPS,如75、90、120、144、165、180、240等
- 支持Windows
- 使用场景文本文件来确定提取的间隔
- 检查每个视频文件的时间范围,以确保其足够长。在错误的时间取消程序可能会创建更短的视频(BUG)
依赖关系
~5–7MB
~124K SLoC