# mySlidesLive
> ...helps you to extract your SlidesLive presentation.
[![Licence][licence-badge]][licence-link]
[![Python][python-badge]][python-link]
[![PyPI][pypi-badge]][pypi-link]
[![Documentation][doc-badge]][doc-link]
[licence-badge]: https://img.shields.io/github/license/so-cool/myslideslive.svg
[licence-link]: https://github.com/so-cool/myslideslive/blob/master/LICENSE
[python-badge]: https://img.shields.io/badge/python-3.6-blue.svg
[python-link]: https://github.com/so-cool/myslideslive
[pypi-badge]: https://img.shields.io/pypi/v/myslideslive.svg
[pypi-link]: https://pypi.org/project/myslideslive
[doc-badge]: https://img.shields.io/badge/read-documentation-blue.svg
[doc-link]: https://so-cool.github.io/myslideslive
## Install
```bash
pip install myslideslive
```
## Usage
### Python
In a Python console:
```
from myslideslive import SlidesLive
msl = SlidesLive('https://slideslive.com/38956531/'
'beyond-static-papers-'
'rethinking-how-we-share-scientific-understanding-in-ml')
msl.download_slides(slide=(1074, 1075))
msl.compose_video()
```
### CLI
Directly from terminal:
```bash
msl --slide 1074 1075 \
https://slideslive.com/38956531/beyond-static-papers-rethinking-how-we-share-scientific-understanding-in-ml
```
## Development
- To develop this package you need [nbdev] v1 and [unidecode] (`pip install "nbdev<2" unidecode`).
- The library (and `Makefile`) is built with `nbdev_build_lib`.
- `nbdev_update_lib` updates the notebooks based on changes in the library.
- The `README.md` is regenerated with `nbdev_build_docs`.
- The git hooks are set up with `nbdev_install_git_hooks`.
- `jupyter nbconvert --clear-output --inplace notebook.ipynb` clears all output cells of a notebook.
Before committing code changes make sure to run:
```bash
nbdev_install_git_hooks && \
nbdev_build_lib && \
nbdev_build_docs && \
nbdev_clean_nbs --clear_all True && \
nbdev_test_nbs
```
[nbdev]: https://nbdev.fast.ai/
[unidecode]: https://github.com/avian2/unidecode
## What about the SlidesLive video recording?
If you want to get the video recording of your SlidesLive presentation as well,
[youtube-dl] can take care of that.
## Cutting the video
Then you can cut the video with:
```bash
ffmpeg -i video_in.mp4 -ss [start] -t [duration] -c copy video_out.mp4
```
where `[start]` specifies the start time, e.g. `00:01:23.000` or `83` (in seconds);
and `[duration]` specifies the duration in the same format.
Alternatively to `-t [duration]`, you may use `-to [end]`, i.e.:
```bash
ffmpeg -i video_in.mp4 -ss [start] -to [end] -c copy video_out.mp4
```
**NOTE:** the order of ffmpeg flags seems to influence the precision of
the video cut.
## Picture-in-Picture embedding
To embed the video recording within the bottom-right part of the presentation video,
preserving the audio stream from the former use:
```bash
ffmpeg -i embedded_video.mp4 -i main_video.mp4 \
-filter_complex "[0] scale=iw/10:ih/10 [embed]; \
[1] fps=25 [bg]; \
[bg][embed] overlay=main_w-overlay_w:main_h-overlay_h" \
-framerate 25 \
-b:v 4810k \
-b:a 126k \
-ar 44100 \
PiP_video.mp4
```
The sound stream is always taken from the first video in the input (`-i`) list;
if you swap the input videos, you also need to swap `[0]` and `[1]` in
the filter string (`-filter_complex`).
To move the embedded video to a different position, you need to change
the `overlay` parameter.
For example, `overlay=main_w-overlay_w:0` will place the embed in
the top-right corner; `overlay=0:0` in the top-left; and
`overlay=0:main_h-overlay_h` in the bottom-left.
[youtube-dl]: https://github.com/ytdl-org/youtube-dl
## About
This Python module was inspired by:
* <https://github.com/Chandrahasd/slideslive-slides-dl>; and
* <https://github.com/AugustKarlstedt/slideslive-downloader>.
PiP ffmpeg command comes from [here](https://www.oodlestechnologies.com/blogs/PICTURE-IN-PICTURE-effect-using-FFMPEG/).
Raw data
{
"_id": null,
"home_page": "https://github.com/So-Cool/myslideslive/tree/master/",
"name": "myslideslive",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "SlidesLive",
"author": "Kacper Sokol",
"author_email": "dev@kcpr.me",
"download_url": "https://files.pythonhosted.org/packages/40/1f/993d402afbf3182bf221e07e5baa31926dccc5ff1185e7508995cf39b985/myslideslive-0.7.tar.gz",
"platform": null,
"description": "# mySlidesLive\n> ...helps you to extract your SlidesLive presentation.\n\n\n[![Licence][licence-badge]][licence-link]\n[![Python][python-badge]][python-link]\n[![PyPI][pypi-badge]][pypi-link]\n[![Documentation][doc-badge]][doc-link]\n\n[licence-badge]: https://img.shields.io/github/license/so-cool/myslideslive.svg\n[licence-link]: https://github.com/so-cool/myslideslive/blob/master/LICENSE\n[python-badge]: https://img.shields.io/badge/python-3.6-blue.svg\n[python-link]: https://github.com/so-cool/myslideslive\n[pypi-badge]: https://img.shields.io/pypi/v/myslideslive.svg\n[pypi-link]: https://pypi.org/project/myslideslive\n[doc-badge]: https://img.shields.io/badge/read-documentation-blue.svg\n[doc-link]: https://so-cool.github.io/myslideslive\n\n## Install\n\n```bash\npip install myslideslive\n```\n\n## Usage\n\n### Python\n\nIn a Python console:\n\n```\nfrom myslideslive import SlidesLive\n\nmsl = SlidesLive('https://slideslive.com/38956531/'\n 'beyond-static-papers-'\n 'rethinking-how-we-share-scientific-understanding-in-ml')\nmsl.download_slides(slide=(1074, 1075))\nmsl.compose_video()\n```\n\n### CLI\n\nDirectly from terminal:\n```bash\nmsl --slide 1074 1075 \\\nhttps://slideslive.com/38956531/beyond-static-papers-rethinking-how-we-share-scientific-understanding-in-ml\n```\n\n## Development\n- To develop this package you need [nbdev] v1 and [unidecode] (`pip install \"nbdev<2\" unidecode`).\n- The library (and `Makefile`) is built with `nbdev_build_lib`.\n- `nbdev_update_lib` updates the notebooks based on changes in the library.\n- The `README.md` is regenerated with `nbdev_build_docs`.\n- The git hooks are set up with `nbdev_install_git_hooks`.\n- `jupyter nbconvert --clear-output --inplace notebook.ipynb` clears all output cells of a notebook.\n\nBefore committing code changes make sure to run:\n```bash\nnbdev_install_git_hooks && \\\nnbdev_build_lib && \\\nnbdev_build_docs && \\\nnbdev_clean_nbs --clear_all True && \\\nnbdev_test_nbs\n```\n\n[nbdev]: https://nbdev.fast.ai/\n[unidecode]: https://github.com/avian2/unidecode\n\n## What about the SlidesLive video recording?\nIf you want to get the video recording of your SlidesLive presentation as well,\n[youtube-dl] can take care of that.\n\n## Cutting the video\nThen you can cut the video with:\n```bash\nffmpeg -i video_in.mp4 -ss [start] -t [duration] -c copy video_out.mp4\n```\nwhere `[start]` specifies the start time, e.g. `00:01:23.000` or `83` (in seconds);\nand `[duration]` specifies the duration in the same format.\nAlternatively to `-t [duration]`, you may use `-to [end]`, i.e.:\n```bash\nffmpeg -i video_in.mp4 -ss [start] -to [end] -c copy video_out.mp4\n```\n**NOTE:** the order of ffmpeg flags seems to influence the precision of\nthe video cut.\n\n## Picture-in-Picture embedding\nTo embed the video recording within the bottom-right part of the presentation video,\npreserving the audio stream from the former use:\n```bash\nffmpeg -i embedded_video.mp4 -i main_video.mp4 \\\n -filter_complex \"[0] scale=iw/10:ih/10 [embed]; \\\n [1] fps=25 [bg]; \\\n [bg][embed] overlay=main_w-overlay_w:main_h-overlay_h\" \\\n -framerate 25 \\\n -b:v 4810k \\\n -b:a 126k \\\n -ar 44100 \\\n PiP_video.mp4\n```\nThe sound stream is always taken from the first video in the input (`-i`) list;\nif you swap the input videos, you also need to swap `[0]` and `[1]` in\nthe filter string (`-filter_complex`).\nTo move the embedded video to a different position, you need to change\nthe `overlay` parameter.\nFor example, `overlay=main_w-overlay_w:0` will place the embed in\nthe top-right corner; `overlay=0:0` in the top-left; and\n`overlay=0:main_h-overlay_h` in the bottom-left.\n\n[youtube-dl]: https://github.com/ytdl-org/youtube-dl\n\n## About\n\nThis Python module was inspired by:\n* <https://github.com/Chandrahasd/slideslive-slides-dl>; and\n* <https://github.com/AugustKarlstedt/slideslive-downloader>.\n\nPiP ffmpeg command comes from [here](https://www.oodlestechnologies.com/blogs/PICTURE-IN-PICTURE-effect-using-FFMPEG/).\n\n\n",
"bugtrack_url": null,
"license": "BSD License",
"summary": "Download the (video) slides of your SlidesLive talk",
"version": "0.7",
"project_urls": {
"Homepage": "https://github.com/So-Cool/myslideslive/tree/master/"
},
"split_keywords": [
"slideslive"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0c95bb04528b17ac35e778c9405b5b84de88379a7597dc8928979baca7b0fef2",
"md5": "d61620ae9db05ca25527f2a908d2eb20",
"sha256": "d6575aceb7da3c4eeee7fee123fe391184145f37bf14643415c95cb1efbc10fd"
},
"downloads": -1,
"filename": "myslideslive-0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d61620ae9db05ca25527f2a908d2eb20",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 13513,
"upload_time": "2024-04-19T13:29:36",
"upload_time_iso_8601": "2024-04-19T13:29:36.876523Z",
"url": "https://files.pythonhosted.org/packages/0c/95/bb04528b17ac35e778c9405b5b84de88379a7597dc8928979baca7b0fef2/myslideslive-0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "401f993d402afbf3182bf221e07e5baa31926dccc5ff1185e7508995cf39b985",
"md5": "0802aa3c8a4a0af9b72fad094eff07c8",
"sha256": "e13815c9d0e66ce98d5aa7962ae7255aa291076cc39abcc9236db281244245c2"
},
"downloads": -1,
"filename": "myslideslive-0.7.tar.gz",
"has_sig": false,
"md5_digest": "0802aa3c8a4a0af9b72fad094eff07c8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 15584,
"upload_time": "2024-04-19T13:29:37",
"upload_time_iso_8601": "2024-04-19T13:29:37.977854Z",
"url": "https://files.pythonhosted.org/packages/40/1f/993d402afbf3182bf221e07e5baa31926dccc5ff1185e7508995cf39b985/myslideslive-0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-19 13:29:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "So-Cool",
"github_project": "myslideslive",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "myslideslive"
}