Compare commits
3 Commits
90b0981039
...
0546ddb615
Author | SHA1 | Date | |
---|---|---|---|
0546ddb615 | |||
418f1bc436 | |||
db081f8bb2 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -10,6 +10,8 @@
|
||||
!/docs/*
|
||||
!/render/*
|
||||
!/src/main.py
|
||||
!/tools/convert.py
|
||||
!/tools/notes.md
|
||||
!/.gitignore
|
||||
!/LICENSE.txt
|
||||
!/README.md
|
||||
|
@ -1,4 +1,6 @@
|
||||
# Readme
|
||||
**This project is no longer being maintained. MiraiNikkiBot is being merged into [YandereLewdBot](https://git.yandere.cc/Anon/YandereLewdBot) since the two bots are largely redundant. See the tools folder for switching bots. This repository will be archived.**
|
||||
|
||||
Mirai Nikki Bot is a customizable, no frills video-screenshot posting bot for Pleroma.
|
||||
|
||||
A live example can be viewed at [GNU/Yandere](https://yandere.cc/MiraiNikkiBot).
|
||||
|
65
tools/convert.py
Executable file
65
tools/convert.py
Executable file
@ -0,0 +1,65 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import importlib
|
||||
import os
|
||||
import argparse
|
||||
|
||||
def get_modded_range(ranges, endseconds, fps, endframe):
|
||||
d = []
|
||||
multiply_factor = endframe / (fps * endseconds)
|
||||
for i in ranges:
|
||||
begin = int(i[0] * multiply_factor)
|
||||
end = int(i[1] * multiply_factor)
|
||||
d.append((begin, end))
|
||||
return d
|
||||
|
||||
def is_in_range(ranges, frame):
|
||||
for i in ranges:
|
||||
if frame in range(i[0], i[1] + 1):
|
||||
return True
|
||||
return False
|
||||
|
||||
def main():
|
||||
DEFAULT_CFG="cfg"
|
||||
DEFAULT_FPS=24
|
||||
|
||||
# Parser
|
||||
parser = argparse.ArgumentParser(
|
||||
description="CLI tool to help convert time to frames. MiraiNikkiFrameBot is being depricated in favor of pre-rendered frames posted using YandereLewdBot",
|
||||
epilog="See YandereLewdBot for examples on how to post frames.",
|
||||
add_help=True)
|
||||
parser.add_argument("-c", "--config", help="Set custom config file (Default: {})".format(DEFAULT_CFG))
|
||||
parser.add_argument("-f", "--fps", help="Set fps manually (Default: {})".format(str(DEFAULT_FPS)), type=int, default=DEFAULT_FPS)
|
||||
parser.add_argument("-r", "--ranges", help="Show time ranges of skip and nsfw converted into frames and exit", action="store_true")
|
||||
parser.add_argument("profile", help="The index of settings_post to operate on", type=int)
|
||||
parser.add_argument("endframe", help="The final frame count of the new pre-rendered frames", type=int)
|
||||
arguments = parser.parse_args()
|
||||
|
||||
cfg = importlib.import_module(arguments.config)
|
||||
|
||||
settings_post = cfg.settings_post[arguments.profile]
|
||||
setting_skip = get_modded_range(settings_post["skip"], settings_post["frames"], arguments.fps, arguments.endframe)
|
||||
setting_nsfw = get_modded_range(settings_post["nsfw"], settings_post["frames"], arguments.fps, arguments.endframe)
|
||||
|
||||
if arguments.ranges:
|
||||
print("Settings Skip:")
|
||||
print(setting_skip)
|
||||
print("Settings NSFW:")
|
||||
print(setting_nsfw)
|
||||
return 0
|
||||
|
||||
print(settings_post["profile_name"])
|
||||
for i in range(1, arguments.endframe + 1):
|
||||
status = "safe"
|
||||
frame_name = os.path.basename(settings_post["output_name"].replace("${frame}", str(i).zfill(5)))
|
||||
if is_in_range(setting_skip, i):
|
||||
status = "skip"
|
||||
elif is_in_range(setting_nsfw, i):
|
||||
status = "nsfw"
|
||||
print("mv -nv '{}' '{}'".format(str(frame_name), "{}/".format(status)))
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
64
tools/notes.md
Normal file
64
tools/notes.md
Normal file
@ -0,0 +1,64 @@
|
||||
# Notes
|
||||
These notes will detail how to switch from MiraiNikkiBot to YandereLewdBot.
|
||||
|
||||
This bot is being depreciated because it is largely redundant to YandereLewdBot.
|
||||
|
||||
Pre-rendering the frames using ffmpeg and using cli tools can achieve the same effect.
|
||||
|
||||
[YandereLewdBot can be downloaded here.](https://git.yandere.cc/Anon/YandereLewdBot)
|
||||
|
||||
## Pre-rendering the Frames
|
||||
Pre-render the frames with ffmpeg using the following commands:
|
||||
|
||||
## FFMPEG
|
||||
Use ffprobe -i input.mkv to get the fps. If the video is 60 fps, set -r to 60/1. If it is 24 fps, use 24/1.
|
||||
|
||||
For videos with subtitles
|
||||
```
|
||||
ffmpeg -i 'input.mkv' -q:v 1 -vf subtitles=input.mkv -r 24/1 'jpg/HappySugarLife_EP01_%05d.jpg'
|
||||
```
|
||||
|
||||
For videos without subtitles
|
||||
```
|
||||
ffmpeg -i 'input.mkv' -q:v 1 -r 24/1 'jpg/HappySugarLife_EP01_%05d.jpg'
|
||||
```
|
||||
|
||||
## MPV with Imagemagick
|
||||
For dvdsubs that cannot be rendered with ffmpeg use the following commands that utilize mpv with imagemagick.
|
||||
|
||||
This will render png's with mpv, then convert them to jpg using imagemagick.
|
||||
|
||||
```
|
||||
mkdir {png,jpg}
|
||||
mpv --pause --no-audio --framedrop=no --screenshot-format=png --screenshot-png-compression=0 --screenshot-template=png/Future_Diary_EP"${1}"_%05n --sid=1 --input-ipc-server=${HOME}/.config/mpv/socket input.mkv &
|
||||
echo 'screenshot subtitles+each-frame ; set pause no' | socat - /home/anon/.config/mpv/socket
|
||||
wait
|
||||
while IFS= read -r line;do echo convert -quality 95 "/home/anon/sshfs/${line}" "/media/anon/luks-13058f5c-674c-41da-82b9-2d6d9c1b9787/mov/FutureDiary/jpg/fd${1}/${line%.*}.jpg";done < <(ls -1 png/) | parallel
|
||||
```
|
||||
|
||||
## Converting cfg Files
|
||||
Copy the convert.py into src/convert.py (the same folder with your existing config files).
|
||||
|
||||
You will need to make note of the last frame rendered by the above commands, as well as the fps of each episode.
|
||||
|
||||
Use `./convert.py -h` to see the usage information.
|
||||
|
||||
Typical usage of the command:
|
||||
-c cfg is the config file (minus the .py extension)
|
||||
-f 24 means the video is 24 fps
|
||||
0 means profile index 0
|
||||
32000 is the last frame rendered
|
||||
```
|
||||
./convert -c cfg -f 24 0 32000
|
||||
```
|
||||
This will output sh move commands you can use to sort into safe, nsfw, and skip folders assuming you are in the correct working directory.
|
||||
|
||||
You can also pipe this into the shell of your choice to execute the commands.
|
||||
```
|
||||
./convert -c cfg -f 24 0 32000 | sh
|
||||
```
|
||||
## Generate the Master List
|
||||
Finally, you can generate the master list for usage in YandereLewdBot.
|
||||
```
|
||||
find ./png/ -type f -print | grep -Fv '/skip/' | sort > master_list.txt
|
||||
```
|
Reference in New Issue
Block a user