PianoVis 0.2.1
A Python piano video exporter.
Examples:
Quick Start
- Install PianoVis:
pip install piano-vis
- Dependencies:
- pygame
- opencv-python
- mido
- colorama
- vext (optional, for playing sound during preview)
- vext.gi (optional, for playing sound during preview)
- playsound (optional, for playing sound during preview)
- win10toast (only on Windows)
- Dependencies:
- Follow this code format:
import pianovis
resolution = (1920, 1080)
fps = 30
offset = 1
vid = pianovis.Video(resolution, fps, offset)
vid.add_midi("midi1.mid")
vid.add_midi("midi2.mid")
vid.set_audio("audio.mp3")
vid.export("video.mp4")
pianovis.Video
pianovis.Video
is the main video class which stores all midi and audio files, and exports the final video.
-
Video.__init__(resolution: Tuple[int, int], fps: int, offset: int) -> None
- Initializes video.
-
resolution
: (x, y) pixel resolution of video. -
fps
: FPS (frames per second) of video. -
offset
: Offset (frames) of video from audio. Usually, a value of 1 makes the video look lined up with the audio. -
decor_surf
=None Decoration surface, blitted under the piano.
-
Video.configure(path: str, value: Any) -> None
- Sets an option for the video (read more in the Customization section).
-
path
: Option path. -
value
: Value to set path to.
-
Video.add_midi(path: str) -> None
- Appends path to midi list.
-
path
: Midi file path.
-
Video.set_audio(path: str) -> None
- Sets audio file to path.
-
path
: Audio file path.
-
Video.preview(resolution: Tuple[int, int] = (1600, 900), show_meta: bool = True) -> None:
- Opens a pygame window to preview the animation.
-
resolution
=(1600, 900): Resolution of pygame window. -
show_meta
=True: Show metadata in the corner of window. -
audio
=True: Play audio along preview.
-
Video.export(self, path: str, multicore: bool = False, max_cores: int = multiprocessing.cpu_count(), notify: bool = False) -> None:
- Exports video to path.
-
path
: Path to export (mp4) -
multicore
=False: Use multiple cores to export. Can be faster, but will take more power. -
max_cores
=multiprocessing.cpu_count(): Maximum cores to use. Only relevant if using multicore. -
notify
=False: Sends notification when done exporting. Requireswin10toast
on Windows.
Customization
Run Video.configure
to change options.
-
keys.white.gap
: Gap (pixels) between white keys. -
keys.white.color
: Color (RGB) of white keys. -
keys.black.width_fac
: Factor of white key width. -
keys.black.height_fac
: Factor of white key height. -
keys.black.color
: Color (RGB) of black keys. -
blocks.speed
: Speed (pixels per second) of blocks. -
blocks.border
: Border width (pixels) of blocks. -
blocks.color_grad
: Color gradient of blocks: ((fac1, hsv1), (fac2, hsv2)...) -
blocks.color_hue
: Hue adjustment (additive) to color. -
blocks.color_saturation
: Saturation adjustment (multiplicative) to color. -
blocks.color_value
: Value adjustment (multiplicative) to color. -
blocks.color_border
: Color (RGB) of border. -
blocks.rounding
: Rounding radius of blocks. -
blocks.motion_blur
: Use motion blur in blocks. -
blocks.light
: Light up blocks when hit. Still in development.
How It Works
- The user adds midis and sets an audio.
- When the user calls
Video.export
, a few things happen:- All midis are parsed.
- Single core:
- Each frame is rendered with pygame, saved, and encoded with opencv.
- All temporary files are deleted.
- Multi core:
- Each core is assigned a chunk of frames and renders and saves them.
- Each frame is encoded with opencv.
- All temporary files are deleted.
- The audio is combined with video with ffmpeg.
Extras
pianovis.constants
)
Constants (Note: pianovis.BLACK == pianovis.constants.BLACK
- Colors (Normalized HSV)
- Block color gradient presets.
pianovis.app
)
App (- Create piano videos in a GUI.
- Currently version 1 (in development)
- Run
pianovis.app.launch()
to launch the latest version.