Simple VLC-based media player that can play multiple videos at the same time

Overview

GridPlayer

GitHub release (latest by date) PyPI version

Screenshots

Screenshot 1 Screenshot 2 Screenshot 3

About

Simple VLC-based media player that can play multiple videos at the same time. You can play as many videos as you like, the only limit is your hardware. It supports all video formats that VLC supports (which is all of them). You can save your playlist retaining information about the position, sound volume, loops, aspect ratio, etc.

Features

  • Cross-platform (Linux, Mac, and Windows)
  • Support for any video format (VLC)
  • Hardware & software video decoding
  • Control video aspect, playback speed, zoom
  • Set loop fragments with frame percision
  • Configurable grid layout
  • Easy swap videos with drag-n-drop
  • Playlist retains settings for each video

Installation

Windows

Download Windows Installer Download Windows Portable

Linux

Get it from the Flathub Get it from the Snap Store Download AppImage

For better system integration install via Flathub.

Note on AppImage

You may need to set execute permissions on AppImage file in order to run it:

$ chmod +x GridPlayer-0.1.6-x86_64.AppImage

MacOS

Download DMG

DMG image is not signed. You will have to add an exception to run this app.

PIP

$ pip install -U gridplayer

Python 3.8 or later required.

This type of installation will also require a vlc package present in your system. Please refer to VLC official page for instructions on how to install it.

Some distros (e.g. Ubuntu) might also require libxcb-xinerama0 package.

From source

This project uses poetry for dependency management and packaging. You will have to install it first. See poetry official documentation for instructions.

$ git clone https://github.com/vzhd1701/gridplayer.git
$ cd gridplayer/
$ poetry install --no-dev
$ poetry run gridplayer

The same notes about the Python version and external packages from PIP installation apply here.

Known issues

Linux (Snap): X screen when opening a file from the mounted disk

You need to allow GridPlayer snap to access removable storage devices via Snap Store or by running:

$ sudo snap connect gridplayer:removable-media

Linux (Snap): mounted drives are not visible in file selection dialog

You will also see following error if you run GridPlayer from terminal:

GLib-GIO-WARNING **: Error creating IO channel for /proc/self/mountinfo: Permission denied (g-file-error-quark, 2)

To fix this, you need to allow GridPlayer snap to access system mount information and disk quotas via Snap Store or by running:

$ sudo snap connect gridplayer:mount-observe

Linux (KDE): black screen issue when using hardware decoder

Switch on "Opaque overlay (fix black screen)" checkbox in settings.

Overlay might be a bit glitchy in KDE with hardware decoder.

MacOS: "GridPlayer" is damaged and can't be opened

To fix this, you need to execute the following command using terminal:

$ sudo xattr -rd com.apple.quarantine /Applications/GridPlayer.app

Attributions

This software was build using

Python packages

Graphics

  • Hack Font by Source Foundry
    • Licensed under MIT License
  • Basic Icons by Icongeek26
    • Licensed under Flaticon License
  • Suru Icons by Sam Hewitt
    • Licensed under Creative Commons Attribution-Share Alike 4.0
  • Clean App Download Buttons by Tony Thomas
    • Licensed under MediaLoot License

License

This software is licensed under the terms of the GNU General Public License version 3 (GPLv3). Full text of the license is available in the LICENSE file and online.

Comments
  • [Bug]: Aspect Mode doesn't seem to work when opening from playlist

    [Bug]: Aspect Mode doesn't seem to work when opening from playlist

    GridPlayer version

    GridPlayer-0.3.0-x86_64.AppImage

    What OS are you using?

    Linux

    OS Version / Linux distribution

    Arch

    What distribution channel are you using? [LINUX ONLY]

    AppImage

    Bug description

    Example grid: two frames on top, one in the bottom. Even if I set the "Aspect mode:none" in Settings or is saved in the playlist, when I open the playlist, the bottom one is always loaded in "Aspect fit" mode. image

    When loaded the playlist, it is showing "Aspect none":

    #GRIDPLAYER
    #P:{"grid_state": {"mode": "auto_rows", "is_fit": true, "size": 0}, "window_state": [false, false, "AdnQywADAAAAAAAAAAADEAAAAoUAAASNAAAAAwAAAyMAAAKCAAAEigAAAAAAAAAAB4AAAAADAAADIwAAAoIAAASK"], "snapshots": {}, "seek_sync_mode": "disabled", "shuffle_on_load": false, "disable_click_pause": true, "disable_wheel_seek": true}
    #V0:{"id": "95fc8fd0-34ab-4fc4-a094-9573fd3f3e10", "title": "Africam - Tau", "color": "white", "repeat_mode": "single_file", "is_start_random": false, "rate": 1.0, "aspect_mode": "none", "is_muted": true, "scale": 1.0, "volume": 1.0, "stream_quality": "720p [95]"}
    #V1:{"id": "2ba07275-9b53-4448-8630-5f17cfd2900b", "title": "Africam - Olifants River", "color": "white", "repeat_mode": "single_file", "is_start_random": false, "rate": 1.0, "aspect_mode": "none", "is_muted": true, "scale": 1.0, "volume": 1.0, "stream_quality": "1080p [96]"}
    #V2:{"id": "5b4dae03-7de3-40e7-9248-597f5cd381dd", "title": "Africam - Nkorho", "color": "white", "repeat_mode": "single_file", "is_start_random": false, "rate": 1.0, "aspect_mode": "none", "is_muted": true, "scale": 1.0, "volume": 1.0, "stream_quality": "720p [95]"}
    https://www.youtube.com/watch?v=xtqkslRWaQg
    https://www.youtube.com/watch?v=nJdjWJr64Ps
    https://www.youtube.com/watch?v=IdeahH9ebp8
    

    image

    But it does not work: image

    However, when I click the already selected "Aspect none" again, only after that the aspect changes to the "Aspect none". image

    Log excerpt

    No response

    bug 
    opened by dv8472 8
  • Mail.ru fail and download media data independently from playback if weak connection and increase network cache

    Mail.ru fail and download media data independently from playback if weak connection and increase network cache

    GridPlayer version

    v0.3.0

    What OS are you using?

    Windows

    OS Version / Linux distribution

    windows10

    What distribution channel are you using? [LINUX ONLY]

    No response

    Bug description

    Hello, i tried to play this vidéo from mail.ru but Girdplayer failed to resolve url, it will be great if threr is fix please 👍

    https://my.mail.ru/mail/richard1339/video/_myvideo/1041.html?from=videoplayer

    and it will be great if Girdplayer add a button "paste url from clipboard" and option or button to increase network cache to avoid jerks and add this important option to people who have limited 4G data ou weak wifi please , option like the option made by "3DYD Youtube Source" software :

    Download media data independently from playback If this option is checked, filter performs media file download independently of playback. So it continues downloading even when playback is paused.

    This approach is useful when you have slow or unstable Internet connection (so playback is stuttering), or when you need to seek a lot within a file. However if all these cases are not about you, and usually you do not watch whole video, it may end up with bandwidth overuse since a lot of downloaded data eventually will be not watched.

    When this option is unchecked, filter downloads only part of data that is about to be played.

    Filter caches downloaded data in temporary directory regardless of the state of this option and never re-downloads the same data again. Caching is well visualized by Activity

    Log excerpt

    No response

    bug 
    opened by trimechee 7
  • [Feature request]: able to take snapshot of all movies and restore to the taken state

    [Feature request]: able to take snapshot of all movies and restore to the taken state

    Suggestion

    There is annoying task to set all movie time position and zoom level (and may be other things) to a particular state again and again while we analize them. It would be better if we can take a snapshot and than restore it whenever we need.

    enhancement 
    opened by the-liquid-metal 6
  • [Feature request]: Group speedup

    [Feature request]: Group speedup

    Suggestion

    Hello vzhd1701,

    Love this piece of software! I use it to observe the many recordings I have of the electroplating of microelectrodes. It is a great tool to just view or also present.

    Some features that would be awesome:

    • Speedup all the videos at once (or perhaps even a selection of them)
    • Sync all the video timelines
    • Render the complete playlist as a single video/gif

    2 Questions: Why does GridPlayer keep running in the background even when the program is closed? Why does the installation have "websockets" and "cryptodome" folders?

    enhancement 
    opened by SwaggerNiels 5
  • Plugin VLC 3DYD Youtube Source

    Plugin VLC 3DYD Youtube Source

    Hello, "3DYD Youtube Source" which is a set of plugins and has many amazing features like download media data independently from playback, manual quality selection before playback start, HLS live streams support, DASH streams support (video and audio goes from separate streams), support for audio-only playback.....

    and it works only for video players which support playback using DirectShow like "potplayer" and "mpc-hc" (or mpc-be) and they worked for me when i tried this software, an exception is VLC, for which is available separate plugin. : I admit, I installed the vlc plugin from "3DYD Youtube Source" but it didn't work with VLC player, I don't know if I did things wrong, so since our beloved GirdPlayer is compatible with VLC player, can GirdPlayer add an option to embed vlc plugin of "3DYD Youtube Source" so GirdPlayer will have even more outstanding options for streaming !

    Thanks a lot !

    https://ys.3dyd.com/download/

    https://ys.3dyd.com/home/

    Latest VLC plugin version details :

    preliminary support for VLC 3.0. Functionality and installation are the same as in VLC 2.2. Additionally added support for multiple ABI versions within one plugin. That means there will be single DLL plugin file for all VLC versions (per platform) instead of individual plugins for every VLC version.

    https://ys.3dyd.com/changelog/vlc/

    for developers, may it can help to integrate vlc plugin to GirdPlayer :

    https://ys.3dyd.com/developers/

    enhancement 
    opened by trimechee 5
  • Dailymotion fail

    Dailymotion fail

    GridPlayer version

    v0.3.0

    What OS are you using?

    Windows

    OS Version / Linux distribution

    windows 10

    What distribution channel are you using? [LINUX ONLY]

    No response

    Bug description

    Hello, i tried to play dailymotion video but it fails , Girdplayer says "buffering timeout" :

    https://www.dailymotion.com/video/x8bz3a5

    Log excerpt

    No response

    bug 
    opened by trimechee 5
  • [Feature request]: prevent accidentally mouse click and scroll

    [Feature request]: prevent accidentally mouse click and scroll

    Suggestion

    The default mouse click and scroll is useful if we just want to enjoy the show without being distracted by the state of the movie. This behavior is annoying when we want the state of all movies to not change while doing something.

    enhancement 
    opened by the-liquid-metal 5
  • [Bug]: jumbo size menu & setting font

    [Bug]: jumbo size menu & setting font

    GridPlayer version

    0.1.5

    What OS are you using?

    Windows

    OS Version / Linux distribution

    win10

    What distribution channel are you using? [LINUX ONLY]

    No response

    Bug description

    the menu & setting font are to big.

    Log excerpt

    No response

    bug 
    opened by the-liquid-metal 4
  • [Bug]: Error loading Python DLL

    [Bug]: Error loading Python DLL

    GridPlayer version

    0.1.4

    What OS are you using?

    Windows

    OS Version / Linux distribution

    Windows 10 64bit

    What distribution channel are you using? [LINUX ONLY]

    No response

    Bug description

    Version 0.1.4 doesn't work in Windows 10. It has a fatal error about loading a python module upon startup. Neither the installer version or portable version works.

    Error message is: Error loading Python DLL c:.......\GridPlayer\python38.dll. LoadLibrary: The specified module could not be found.

    Log excerpt

    No response

    bug 
    opened by johnnysmith65 4
  • [Feature request]: Sync all video timestamp

    [Feature request]: Sync all video timestamp

    Suggestion

    Due to the delay in opening several videos, there will often be 1+ second difference in the playback. Yes, it's possible to skip +15/-15 secs ahead/back, but I think what the player needs is a "Sync all video playback".

    Let's say you got 3 Video Windows

    Video 1: 00:00:01 Video 2: 00:00:02 Video 3: 00:00:03

    Suggestion either a right click video window, or a button that lets you enter the timestamp to sync to by input: XX:XX:XX or maybe even XX:XX is enough

    I would suggest an option to right click Video1 with an option to "Sync players", meaning all videos would sync to timestamp 00:00:01.

    If you right clicked Video 2 and chose "Sync Players" all videos would sync timestamp to 00:00:02 Video 3, 00:00:03.

    Another Example: Fast forward a video to say 04:00:00 and sync, and all other players would fast forward to 04:00:00 as well.

    Possible complication: if a videos duration is less than the sync time stamp though.

    Not sure if this is possible, but would appreciate if it could be considered as a feature request.

    enhancement 
    opened by eswiig 3
  • [Bug]: Differen length videos are out of sync after scrolling around

    [Bug]: Differen length videos are out of sync after scrolling around

    GridPlayer version

    0.2.0

    What OS are you using?

    Linux

    OS Version / Linux distribution

    Ubuntu 20.04.3 LTS

    What distribution channel are you using? [LINUX ONLY]

    Snap Store

    Bug description

    When playing videos of different length and skipping around or using the bar at the bottom the videos get out of sync. menaing, the playback time is not synchronized form the start, but by the length of each video, so each video is say 42% in, not 42seconds from the start, which with different lengths would be different values.

    Log excerpt

    No response

    bug 
    opened by joshinils 3
  • [Bug]:

    [Bug]:

    GridPlayer version

    0.4.3

    What OS are you using?

    Linux

    OS Version / Linux distribution

    Ubuntu 22.04.1

    What distribution channel are you using? [LINUX ONLY]

    None

    Bug description

    I download the source code of your project and try run it by "poetry run gridplayer" command but it crashed. Here is the full error log: 2022-12-14 14:51:31,300 (21039) | UNHANDLED | CRITICAL | Traceback (most recent call last): File "", line 1, in File "/home/harry/gridplayer/gridplayer/main.py", line 29, in main ret = run_app() File "/home/harry/gridplayer/gridplayer/main/run.py", line 14, in run_app vlc_version, vlc_python_version = init_vlc() File "/home/harry/gridplayer/gridplayer/utils/libvlc.py", line 32, in init_vlc vlc_version = _get_vlc_version() File "/home/harry/gridplayer/gridplayer/utils/libvlc.py", line 85, in _get_vlc_version with importing_embed_vlc(): File "/usr/lib/python3.10/contextlib.py", line 142, in exit next(self.gen) File "/home/harry/gridplayer/gridplayer/utils/libvlc_fixer.py", line 30, in importing_embed_vlc _fix_plugins_path() File "/home/harry/gridplayer/gridplayer/utils/libvlc_fixer.py", line 40, in _fix_plugins_path vlc_lib_root = _get_libvlc_root_path() File "/home/harry/gridplayer/gridplayer/utils/libvlc_fixer.py", line 62, in _get_libvlc_root_path vlc_lib_root = Path(vlc_module.dll._name) # noqa: WPS437 File "/usr/lib/python3.10/pathlib.py", line 960, in new self = cls._from_parts(args) File "/usr/lib/python3.10/pathlib.py", line 594, in _from_parts drv, root, parts = self._parse_args(args) File "/usr/lib/python3.10/pathlib.py", line 578, in _parse_args a = os.fspath(a) TypeError: expected str, bytes or os.PathLike object, not NoneType

    Can you tell me what is the problem here

    Log excerpt

    2022-12-14 14:51:31,300 (21039) | UNHANDLED | CRITICAL | Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/harry/gridplayer/gridplayer/__main__.py", line 29, in main
        ret = run_app()
      File "/home/harry/gridplayer/gridplayer/main/run.py", line 14, in run_app
        vlc_version, vlc_python_version = init_vlc()
      File "/home/harry/gridplayer/gridplayer/utils/libvlc.py", line 32, in init_vlc
        vlc_version = _get_vlc_version()
      File "/home/harry/gridplayer/gridplayer/utils/libvlc.py", line 85, in _get_vlc_version
        with importing_embed_vlc():
      File "/usr/lib/python3.10/contextlib.py", line 142, in __exit__
        next(self.gen)
      File "/home/harry/gridplayer/gridplayer/utils/libvlc_fixer.py", line 30, in importing_embed_vlc
        _fix_plugins_path()
      File "/home/harry/gridplayer/gridplayer/utils/libvlc_fixer.py", line 40, in _fix_plugins_path
        vlc_lib_root = _get_libvlc_root_path()
      File "/home/harry/gridplayer/gridplayer/utils/libvlc_fixer.py", line 62, in _get_libvlc_root_path
        vlc_lib_root = Path(vlc_module.dll._name)  # noqa: WPS437
      File "/usr/lib/python3.10/pathlib.py", line 960, in __new__
        self = cls._from_parts(args)
      File "/usr/lib/python3.10/pathlib.py", line 594, in _from_parts
        drv, root, parts = self._parse_args(args)
      File "/usr/lib/python3.10/pathlib.py", line 578, in _parse_args
        a = os.fspath(a)
    TypeError: expected str, bytes or os.PathLike object, not NoneType
    
    bug 
    opened by chudinhhai 0
  • [Bug]: Time shown is not accurate

    [Bug]: Time shown is not accurate

    GridPlayer version

    0.4.3

    What OS are you using?

    Windows

    OS Version / Linux distribution

    Windows 10

    What distribution channel are you using? [LINUX ONLY]

    None

    Bug description

    Video position (gridplayer.widgets.video_block.VideoBlock.video_params.current_position) is not the an actual timecode in the video.

    Log excerpt

    No response

    bug 
    opened by x4Cx58x54 0
  • Save a playlist with a relative path

    Save a playlist with a relative path

    Hi, I'd like to know if it is possible to save a playlist using a relative path for the video files. At the momento the videos are saved with a full path. Ex:

    C:\WTT\2022\000deg-P30\AXIS-P3245-LV_500.mp4

    I'd like save a playlist in order to be opened on different PCs, something like:

    ..\VIDEO\AXIS-P3245-LV_500.mp4

    Is it possible? thanks Lorenzo

    opened by lore7979 0
  • Hls streams and m3u8 bug

    Hls streams and m3u8 bug

    Hello, Ffmpeg seems to have some problems to decode hls m3u8 streams, but a tool like HLSDL seems to solve these problems, please it will be great if there is support for specific hls streams to some websites by integrating these m3u8 software , thank you very much !

    C program to download VoD HLS (.m3u8) files

    https://github.com/selsta/hlsdl

    m3u8 : Python m3u8 Parser for HTTP Live Streaming (HLS) Transmissions :

    https://github.com/globocom/m3u8

    [.NET] m3u8 downloader Open source command line m3u8/HLS/dash downloader, supports common AES-128-CBC decryption, multi-threading, custom request headers, etc. Supports Simplified Chinese, Traditional Chinese and English. English Supported.

    https://github.com/nilaoda/N_m3u8DL-CLI

    [.NET7] Cross-Platform stream downloader for DASH/HLS.

    https://github.com/nilaoda/N_m3u8DL-RE

    and

    https://github.com/HeiSir2014/M3U8-Downloader

    https://github.com/Spark-NF/hls-downloader

    " HLSDL appears working much better than ffmpeg in these cases. Hlsdl is public and the source code available. The stream plays almost immediately and is stable. No errors or buffering. Using ffmpeg for the download step gives a very long intial delay and is not very stable. so I assume that the new crypto+hls RAI flows are badly handled by ffmpeg based players now.

    the video is choppy and unable to buffer enough for a fluid vision. Parole has no problem.

    FFmpeg is not good for HLS streams, but I watched a lot of various HLS streams without any problems. The main problem is that FFmpeg downloads all streams (many video sizes at once), so you can watch only HLS stream with single video size"

    enhancement 
    opened by trimechee 0
  • [Feature request]: Add

    [Feature request]: Add "millisecond" in the Jump (to) Timecode settings

    Suggestion

    Hi, Love this software thank you so much for making it. Could you please Add "millisecond" in the Jump (to) Timecode settings as it is useful when syncing of different videos to precision otherwise i have to keep using the current option number of times to get it correct, as most times a lag or difference in time is caused due to it. Also is it possible to add subtitle viewing option for videos which have them.

    enhancement 
    opened by NightHawk007 1
Releases(v0.4.3)
Cvplayer - A simple video player written in python using ffpyplayer and OpenCV

Video Player cvplayer is a minimal wrapper around the ffpyplayer.MediaPlayer cla

ADI 7 Dec 19, 2022
Video stream image stacking -- live version

video stream image stacking v2 -- live version A very simple streamed video image stacking code! Version 2.1 left mouse click to select a small region

Chakravarthy Mathiazhagan 1 Jan 03, 2022
OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows, and is dedicated to delivering high quality video editing and animation solutions to the world.

OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows, and is dedicated to delivering high quality v

OpenShot Studios, LLC 3.1k Jan 01, 2023
High-performance cross-platform Video Processing Python framework powerpacked with unique trailblazing features :fire:

Releases | Gears | Documentation | Installation | License VidGear is a High-Performance Video Processing Python Library that provides an easy-to-use,

Abhishek Thakur 2.6k Dec 28, 2022
Streams video from raspberry pi to desktop T1 - Recognizes Faces on client T2

VideoStreamingServer Completed: Streams video from raspberry pi to desktop T1 - Recognizes Faces on client T2 In progress: Change the transmission Pro

1 Dec 06, 2021
MoviePy is a Python library for video editing, can read and write all the most common audio and video formats

MoviePy is a Python library for video editing: cutting, concatenations, title insertions, video compositing (a.k.a. non-linear editing), video processing, and creation of custom effects. See the gall

10k Jan 08, 2023
Rembg Video Virtual Green Screen Edition

Rembg Virtual Greenscreen Edition is a tool to create a green screen matte for videos

Tim Scarfe 217 Jan 06, 2023
Automatically segment in-video YouTube sponsorships.

SponsorBlock Auto Segment [Model Download] Automatically segment in-video YouTube sponsorships. Trained on a large dataset of YouTube sponsor transcri

Akmal 7 Aug 22, 2022
PyAV is a Pythonic binding for the FFmpeg libraries.

PyAV is a Pythonic binding for the FFmpeg libraries. We aim to provide all of the power and control of the underlying library, but manage the gritty details as much as possible.

PyAV 1.8k Jan 01, 2023
BlogBot - a Python script that create blogs from YouTube videos.

BlogBot - Convert Youtube Videos To Blogs BlogBot is a Python script that create blogs from YouTube videos.

Nikhil Bhamere 4 Apr 22, 2022
A telegram bot for compressing/encoding videos in h264 format.

Video-Encoder-Bot a telegram bot for compressing/encoding videos in h264 format. Configuration Add values in environment variables or add them in conf

Weeb >.< 61 Dec 29, 2022
Video-stream - A telegram video stream bot repo

This is a Telegram Video stream Bot. Binary Tech 💫 Features stream videos downl

silentz lk 1 Feb 02, 2022
Help for manipulating the plex-media-server transcode on the raspberry pi

raspi-plex-transcode Help for manipulating the plex-media-server transcode on the raspberry pi Ensure hardware decoding works and your firmware is up

10 Sep 29, 2022
LL-HLS implementation written in Python3

biim mpegts stream to Apple Low Latency HLS Feature mpegts demuxing in pure python3 (using asyncio) mpegts stream to fragmented ts use piping from ffm

もにょ~ん 15 Jan 03, 2023
Your self hosted Youtube media server

The Tube Archivist Your self hosted Youtube media server Core functionality Subscribe to your favourite Youtube channels Download Videos using yt-dlp

Simon 2.1k Dec 31, 2022
In this project, we will be blurring the background in a live video feed

In this project, we will be blurring the background in a live video feed. This can be further integrated into online meetings, streamings etc.

Hassan Shahzad 2 Jan 06, 2022
Cross-platform command-line AV1 / VP9 / HEVC / H264 encoding framework with per scene quality encoding

Av1an A cross-platform framework to streamline encoding Easy, Fast, Efficient and Feature Rich An easy way to start using AV1 / HEVC / H264 / VP9 / VP

Zen 947 Jan 01, 2023
Python application that can be used to generate video thumbnail for mp4 and mkv file types.

Thumbnail Generator 🎬 What is This This is a Python application that can be used to generate video thumbnail for mp4 and mkv file types. Installation

Tharindu N. 13 Jan 03, 2023
A youtube video link or id to video thumbnail python package.

Youtube-Video-Thumbnail A youtube video link or id to video thumbnail python package. Made with Python3

Fayas Noushad 10 Oct 21, 2022
Media player custom component which works with MQTT.

Media player custom component which works with MQTT. I designed this to specifically work with a ESP32 which i used to control a speakercraft amp.

2 Feb 10, 2022