This module implements easy interaction with SlidesLive.

url2id[source]

url2id(sl_url)

Converts SlidesLive URL to presentation ID and name.

This function parses SlidesLIve URL into the presentation ID and name.

sl_url = ('https://slideslive.com/38956531/'
          'beyond-static-papers-rethinking-how-we-share-scientific-understanding-in-ml')
my_sl_id, my_sl_name = url2id(sl_url)

my_sl_id, my_sl_name
('38956531',
 'beyond-static-papers-rethinking-how-we-share-scientific-understanding-in-ml')

get_sl_info[source]

get_sl_info(sl_id)

Pulls information about a SlidesLive presentation.

Pulls video presentation details from SlidesLive.

get_sl_info(my_sl_id)
{'version': '1',
 'account_id': '84503',
 'id': '38956531',
 'title': 'Beyond Static Papers: Rethinking How We Share Scientific Understanding in ML',
 'updated_at': '2023-10-20T15:29:03Z',
 'player_type': 'video_slideshow',
 'start_time': '2494000',
 'thumbnail': 'https://ma.slideslive.com/library/presentations/38956531/thumbnail/beyond-static-papers-rethinking-how-we-share-scientific-understanding-in-ml_ebgwSR_big.jpg',
 'slideslive_logo_visible': 'false',
 'slideslive_logo_linkify': 'false',
 'custom_cmcd_tracking': 'false',
 'playlist_type': 'vod',
 'media_set_id': '119992',
 'video_service_name': 'yoda',
 'video_id': 'oHAAFl-q6gQx',
 'video_ken_enabled': 'true',
 'video_servers': '["1159783934.rsc.cdn77.org","1511376917.rsc.cdn77.org"]',
 'slides_xml_url': 'https://s.slideslive.com/38956531/v1/38956531.xml?1650713664',
 'slides_json_url': 'https://s.slideslive.com/38956531/v1/slides.json?1650713664',
 'subtitles': '[{"name":"English","language":"en","subtitles_id":56748,"webvtt_url":"https://slideslive-video-subtitles.s3.amazonaws.com/56748/subtitles.vtt?X-Amz-Algorithm=AWS4-HMAC-SHA256\\u0026X-Amz-Credential=AKIAXWNGJW2E2DUNCDBO%2F20240419%2Fus-east-1%2Fs3%2Faws4_request\\u0026X-Amz-Date=20240419T132701Z\\u0026X-Amz-Expires=86400\\u0026X-Amz-SignedHeaders=host\\u0026X-Amz-Signature=e78e71d2b84f23c18566828159099c330058039a287a07780435e7457e239e33"}]'}

get_slide_metadata[source]

get_slide_metadata(sl_meta_url, approach='json')

Processes metadata of slides associated with a SlidesLive presentation.

approach is one of json or xml. It specifies the strategy for extracting slide metadata.

This function extracts the synchronisation between slide images and video presentation. This information can either be pulled from XML (approach='xml') or JSON (approach='json', default) format.

slides_structure_json = 'https://cdn.slideslive.com/data/presentations/38956531/v1/slides.json'
slides_metadata = get_slide_metadata(slides_structure_json)

print(slides_metadata.get('slide_qualities'))
print(slides_metadata.get('slides')[0])
['big', 'medium']
{'time': 0, 'type': 'image', 'image': {'name': '00001'}}

prune_video_chunks[source]

prune_video_chunks(meta_data)

Replace video chunks in the slide metadata with static images.

get_urls[source]

get_urls(video_id, slide_meta, slide_type='xlarge', slide_format='png', slide=(None, None), time=(None, None))

Composes a list of URLs for slides of a given SlidesLive presentation.

video_id specifies the ID of a SlidesLive presentation. slide_meta is the metadata of a SlidesLive presentation as given by the get_slide_metadata function. slide_type specifies the size of the slide. slide_format specifies the image format of the slide.

A subset of slides may be extracted with this function using either the slide or time parameter (but not both simultaneously).

The slide parameter takes a range of slides to be extracted based on the slide ID numbers visible in a SlidesLive presentation. For example, slide=(5, 7) to extract slides 5--7, inclusive; slide=(5, None) to extract from slide 5 onwards; or slide=(None, 6) to extract up to slide 6 inclusive.

The time parameter takes a range of time (visible in a SlidesLive presentation) for which slides are to be extracted. For example, time=(5, 10) to extract slides starting at second 5 (inclusive) and ending before second 10 (exclusive); time=(5, None) to extract from second 5 onwards; or time=(None, 50) to extract up to second 60 exclusive.

This function allows to generate a list of slide URLs for a given SlidesLive presentation. You can filter the slides by time or ID if your talk is in the middle of a session.

my_id_bounds = (1074, 1163)

my_urls = get_urls(my_sl_id, slides_metadata,
                   slide=my_id_bounds)
print(my_urls[0])
print(my_urls[-1])
https://rs.slideslive.com/38956531/slides/01074.png?h=1080&f=png
https://rs.slideslive.com/38956531/slides/01163.png?h=1080&f=png

download_slides[source]

download_slides(url_list, sleep_time=0.2, jobs=16, directory=None, technique='python')

Downloads files from a list of URLs (url_list).

The destination directory is either slides created in the current working directory, or a path specified via the directory parameter.

Three different download strategies are supported:

  • technique='python' -- downloads the images through Python's requests library one by one, pausing for sleep_time (0.2 seconds, by default) after each download.
  • technique='wget' -- downloads the images by invoking wget for each image in the list, pausing for sleep_time (0.2 seconds, by default) after each download.
  • technique='wget+parallel' -- downloads multiple images simultaneously -- specified by the jobs parameter (16, by default)-- by invoking wget thorugh parallel.

You can use this function ot download slides to a selected directory. If you want to speed yp the process, install wget and parallel, and use the technique='wget+parallel' option.

my_slides = [
    'https://rs.slideslive.com/38956531/slides/00793.png?h=1080&f=png',
    'https://rs.slideslive.com/38956531/slides/00794.png?h=1080&f=png'
]
download_slides(my_slides, directory='my_slides_dir')
ls my_slides_dir
00793.png  00794.png
download_slides(my_slides, directory='my_slides_dir_wget-parallel', technique='wget+parallel')

--2024-04-19 13:27:04--  https://rs.slideslive.com/38956531/slides/00793.png?h=1080&f=png
Resolving rs.slideslive.com (rs.slideslive.com)... 141.101.120.10, 141.101.120.11, 2606:4700:21::8d65:780b, ...
Connecting to rs.slideslive.com (rs.slideslive.com)|141.101.120.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 299659 (293K) [image/png]
Saving to: ‘my_slides_dir_wget-parallel/00793.png?h=1080&f=png’

     0K .......... .......... .......... .......... .......... 17% 78.9M 0s
    50K .......... .......... .......... .......... .......... 34% 30.6M 0s
   100K .......... .......... .......... .......... .......... 51% 39.3M 0s
   150K .......... .......... .......... .......... .......... 68% 73.2M 0s
   200K .......... .......... .......... .......... .......... 85%  106M 0s
   250K .......... .......... .......... .......... ..        100% 98.0M=0.005s

2024-04-19 13:27:04 (57.1 MB/s) - ‘my_slides_dir_wget-parallel/00793.png?h=1080&f=png’ saved [299659/299659]

--2024-04-19 13:27:04--  https://rs.slideslive.com/38956531/slides/00794.png?h=1080&f=png
Resolving rs.slideslive.com (rs.slideslive.com)... 141.101.120.11, 141.101.120.10, 2606:4700:21::8d65:780b, ...
Connecting to rs.slideslive.com (rs.slideslive.com)|141.101.120.11|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 300396 (293K) [image/png]
Saving to: ‘my_slides_dir_wget-parallel/00794.png?h=1080&f=png’

     0K .......... .......... .......... .......... .......... 17% 75.2M 0s
    50K .......... .......... .......... .......... .......... 34% 30.5M 0s
   100K .......... .......... .......... .......... .......... 51% 42.7M 0s
   150K .......... .......... .......... .......... .......... 68% 96.7M 0s
   200K .......... .......... .......... .......... .......... 85%  125M 0s
   250K .......... .......... .......... .......... ...       100% 93.0M=0.005s

2024-04-19 13:27:04 (60.4 MB/s) - ‘my_slides_dir_wget-parallel/00794.png?h=1080&f=png’ saved [300396/300396]

ls my_slides_dir_wget-parallel
00793.png  00794.png

ffmpeg_concat_script[source]

ffmpeg_concat_script(slide_meta, slide_folder=None, last_duration=None, slide=(None, None), time=(None, None))

Builds an ffmpeg frame concatination string from slide metadata. Since the duration of the very last slide cannot be inferred, it lasts for a user-specified amount of time (last_diration, 5 by default).

slide_folder specifies the location of the slide images. By default, it is the slides folder in the current working directory.

A subset of slides may be extracted with this function using either the slide or time parameter (but not both simultaneously).

The slide parameter takes a range of slides to be extracted based on the slide ID numbers visible in a SlidesLive presentation. For example, slide=(5, 7) to extract slides 5--7, inclusive; slide=(5, None) to extract from slide 5 onwards; or slide=(None, 6) to extract up to slide 6 inclusive.

The time parameter takes a range of time (visible in a SlidesLive presentation) for which slides are to be extracted. For example, time=(5, 10) to extract slides starting at second 5 (inclusive) and ending before second 10 (exclusive); time=(5, None) to extract from second 5 onwards; or time=(None, 50) to extract up to second 60 exclusive.

This function creates a script for concatenating images into a video.

It can be executed with the ffmpeg -safe 0 -f concat -i ffmpeg_concat_script.txt -vsync vfr slides.mp4 command. See the compose_ffmpeg_video function for more details.

my_slides_ffmpeg, start_second, end_second = ffmpeg_concat_script(
    slides_metadata,
    slide_folder='my_slides_dir',
    slide=(793, 794))

print(my_slides_ffmpeg)
print(f'\n{start_second}--{end_second}')
file '/home/runner/work/myslideslive/myslideslive/src/my_slides_dir/00793.png'
duration 29.023
file '/home/runner/work/myslideslive/myslideslive/src/my_slides_dir/00794.png'
duration 1.994
file '/home/runner/work/myslideslive/myslideslive/src/my_slides_dir/00794.png'

10611.802--10642.819

compose_ffmpeg_video[source]

compose_ffmpeg_video(ffmpeg_script, video_file=None)

Builds video slides from an ffmpeg script using the ffmpeg -safe 0 -f concat -i ffmpeg_concat.txt -vsync vfr slides.mp4 command.

Alternatively, you can save the ffmpeg script to a file yourself and execute this command from your terminal.

compose_ffmpeg_video(my_slides_ffmpeg)

ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, concat, from '/tmp/tmpkzfsrvdb':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: png, pal8(pc), 1920x1080 [SAR 3779:3779 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x55f0e60bbec0] using SAR=1/1
[libx264 @ 0x55f0e60bbec0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x55f0e60bbec0] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x55f0e60bbec0] 264 - core 163 r3060 5db6aa6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'slides.mp4':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv444p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
    Metadata:
      encoder         : Lavc58.134.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=    3 fps=0.0 q=-1.0 Lsize=     268kB time=00:00:00.00 bitrate=28120307.7kbits/s speed=0.000507x    
video:267kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.340356%
[libx264 @ 0x55f0e60bbec0] frame I:1     Avg QP:10.49  size:198292
[libx264 @ 0x55f0e60bbec0] frame P:1     Avg QP:15.50  size: 73004
[libx264 @ 0x55f0e60bbec0] frame B:1     Avg QP:16.79  size:  1259
[libx264 @ 0x55f0e60bbec0] consecutive B-frames: 33.3% 66.7%  0.0%  0.0%
[libx264 @ 0x55f0e60bbec0] mb I  I16..4: 39.7% 45.8% 14.5%
[libx264 @ 0x55f0e60bbec0] mb P  I16..4:  4.7%  3.8%  1.5%  P16..4: 11.2%  3.7%  3.5%  0.0%  0.0%    skip:71.6%
[libx264 @ 0x55f0e60bbec0] mb B  I16..4:  0.1%  0.1%  0.0%  B16..8:  6.4%  0.2%  0.0%  direct: 0.7%  skip:92.4%  L0:10.9% L1:88.9% BI: 0.2%
[libx264 @ 0x55f0e60bbec0] 8x8 transform intra:45.1% inter:66.7%
[libx264 @ 0x55f0e60bbec0] coded y,u,v intra: 23.8% 14.0% 15.4% inter: 7.6% 2.6% 3.7%
[libx264 @ 0x55f0e60bbec0] i16 v,h,dc,p: 74% 21%  4%  0%
[libx264 @ 0x55f0e60bbec0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 40% 24% 26%  1%  1%  2%  2%  2%  2%
[libx264 @ 0x55f0e60bbec0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 28% 16%  4%  5%  5%  6%  5%  6%
[libx264 @ 0x55f0e60bbec0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x55f0e60bbec0] kb/s:66.15
ls -la slides.mp4
-rw-r--r-- 1 runner docker 274173 Apr 19 13:27 slides.mp4

class SlidesLive[source]

SlidesLive(video_url, slides_folder=None)

Simplifies SlidesLive interaction.

Should be initialised with SlidesLive presentation URL (video_url). Optionally, a destination folder for downloading slides may be specified (slides_folder).

See url2id, get_sl_info and get_slide_metadata for more details.

SlidesLive.get_slide_urls[source]

SlidesLive.get_slide_urls(slide_type='xlarge', slide=None, time=None)

Returns a list of slide URLs -- see get_urls for more details.

SlidesLive.download_slides[source]

SlidesLive.download_slides(slide_type='xlarge', slide=None, time=None, sleep_time=0.2, jobs=16, directory=None, technique='python')

Downloads a collection of slides -- see get_urls and download_slide for more details.

SlidesLive.get_ffmpeg_script[source]

SlidesLive.get_ffmpeg_script(slide_folder=None, last_duration=None, slide=None, time=None)

Composes ffmpeg script -- see ffmpeg_concat_script for more details.

SlidesLive.compose_video[source]

SlidesLive.compose_video(video_file=None, slide_folder=None, last_duration=None, slide=None, time=None)

Builds slides video -- see ffmpeg_concat_script and compose_ffmpeg_video for more details.

The SlidesLive class helps to navigate through the myslideslive.slideslive module functions.

msl = SlidesLive('https://slideslive.com/38956531/'
                 'beyond-static-papers-'
                 'rethinking-how-we-share-scientific-understanding-in-ml',
                 slides_folder='beyond-static-papers')
msl.download_slides(slide=(1074, 1075))
ls {msl.slides_dir}
01074.png  01075.png
msl.compose_video()


Extracted time segment in seconds:
    15215.247--15250.244
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, concat, from '/tmp/tmpfps5wm7b':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: png, pal8(pc), 1920x1080 [SAR 3779:3779 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x55f19e2ed000] using SAR=1/1
[libx264 @ 0x55f19e2ed000] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x55f19e2ed000] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x55f19e2ed000] 264 - core 163 r3060 5db6aa6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'beyond-static-papers.mp4':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv444p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
    Metadata:
      encoder         : Lavc58.134.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=    3 fps=0.0 q=-1.0 Lsize=     105kB time=00:00:00.00 bitrate=10985230.8kbits/s speed=0.000641x    
video:104kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.860705%
[libx264 @ 0x55f19e2ed000] frame I:2     Avg QP: 8.05  size: 52546
[libx264 @ 0x55f19e2ed000] frame P:1     Avg QP:10.05  size:   412
[libx264 @ 0x55f19e2ed000] mb I  I16..4: 49.9% 40.5%  9.6%
[libx264 @ 0x55f19e2ed000] mb P  I16..4:  0.4%  0.0%  0.0%  P16..4:  0.6%  0.0%  0.0%  0.0%  0.0%    skip:98.9%
[libx264 @ 0x55f19e2ed000] 8x8 transform intra:40.4% inter:50.0%
[libx264 @ 0x55f19e2ed000] coded y,u,v intra: 13.5% 8.1% 9.2% inter: 0.1% 0.0% 0.0%
[libx264 @ 0x55f19e2ed000] i16 v,h,dc,p: 85% 11%  3%  1%
[libx264 @ 0x55f19e2ed000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 57% 13% 24%  2%  1%  1%  1%  1%  1%
[libx264 @ 0x55f19e2ed000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 43% 26% 11%  4%  4%  3%  4%  3%  3%
[libx264 @ 0x55f19e2ed000] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x55f19e2ed000] ref P L0: 89.5% 10.5%
[libx264 @ 0x55f19e2ed000] kb/s:19.18
ls -la {msl.slides_video}
-rw-r--r-- 1 runner docker 107106 Apr 19 13:27 beyond-static-papers.mp4
msl1 = SlidesLive('https://slideslive.com/38988636/'
                  '24-sparsity-on-gpu-tensor-cores',
                  slides_folder='sparsity-on-gpu-tensor-cores')
msl1.download_slides(slide=(30, 31))
ls {msl1.slides_dir}
2afSaynhm8Bny1UR.png  Al9BWavE9eBg6Cbt.png
msl1.compose_video()


Extracted time segment in seconds:
    1253.12--1343.16
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, concat, from '/tmp/tmpdofj6464':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: png, pal8(pc), 1920x1080 [SAR 2835:2835 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x558cbf131c40] using SAR=1/1
[libx264 @ 0x558cbf131c40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x558cbf131c40] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x558cbf131c40] 264 - core 163 r3060 5db6aa6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'sparsity-on-gpu-tensor-cores.mp4':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv444p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
    Metadata:
      encoder         : Lavc58.134.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=    3 fps=0.0 q=-1.0 Lsize=     290kB time=00:00:00.00 bitrate=30425128.2kbits/s speed=0.000458x    
video:289kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.314492%
[libx264 @ 0x558cbf131c40] frame I:1     Avg QP: 8.52  size:155240
[libx264 @ 0x558cbf131c40] frame P:1     Avg QP:11.00  size:137797
[libx264 @ 0x558cbf131c40] frame B:1     Avg QP:14.65  size:  1990
[libx264 @ 0x558cbf131c40] consecutive B-frames: 33.3% 66.7%  0.0%  0.0%
[libx264 @ 0x558cbf131c40] mb I  I16..4: 56.5% 16.2% 27.3%
[libx264 @ 0x558cbf131c40] mb P  I16..4: 10.6%  3.5% 22.2%  P16..4: 10.3%  1.6%  1.1%  0.0%  0.0%    skip:50.7%
[libx264 @ 0x558cbf131c40] mb B  I16..4:  0.1%  0.0%  0.0%  B16..8:  9.0%  0.3%  0.0%  direct: 0.6%  skip:90.0%  L0: 4.0% L1:95.5% BI: 0.5%
[libx264 @ 0x558cbf131c40] 8x8 transform intra:14.5% inter:50.7%
[libx264 @ 0x558cbf131c40] coded y,u,v intra: 32.1% 25.8% 23.9% inter: 4.7% 2.0% 1.8%
[libx264 @ 0x558cbf131c40] i16 v,h,dc,p: 84% 13%  3%  0%
[libx264 @ 0x558cbf131c40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 57% 12% 29%  0%  0%  0%  0%  0%  1%
[libx264 @ 0x558cbf131c40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 41% 20% 12%  3%  4%  5%  5%  4%  5%
[libx264 @ 0x558cbf131c40] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x558cbf131c40] kb/s:15.37
ls -la {msl1.slides_video}
-rw-r--r-- 1 runner docker 296645 Apr 19 13:27 sparsity-on-gpu-tensor-cores.mp4