library benchmarks
Contents
library benchmarks#
results#
GIF animations:
library |
runtime (s) |
file size (MBs) |
---|---|---|
enjoyn |
39 |
22 |
imageio |
42 |
32 |
moviepy |
111 |
40 |
ffmpeg |
37 |
255 |
MP4 animations:
library |
runtime (s) |
file size (MBs) |
---|---|---|
enjoyn |
15 |
11 |
imageio |
37 |
10 |
moviepy |
57 |
10 |
ffmpeg |
13 |
10 |
Tested with MacBook Air (M1, 2020); re-runs may vary slightly.
setup#
[1]:
from enjoyn.example import AirTemperatureExample
example = AirTemperatureExample()
outputs = example.output_images()
gif animation#
enjoyn#
[2]:
from enjoyn import GifAnimator
output_path = "assets/enjoyn_air_temperature.gif"
with example.time_run():
GifAnimator(items=outputs, output_path=output_path).compute()
example.size_of(output_path)
[########################################] | 100% Completed | 40.5s
Runtime: 40.62840654200045 seconds
File size of enjoyn_air_temperature.gif: 21.96 MBs
imageio#
[3]:
import imageio.v3 as iio
output_path = "assets/imageio_air_temperature.gif"
with example.time_run():
iio.imwrite(output_path, [iio.imread(output) for output in outputs], loop=0)
example.size_of(output_path)
Runtime: 42.90011516600134 seconds
File size of imageio_air_temperature.gif: 32.19 MBs
moviepy#
[4]:
import moviepy.editor
from moviepy.editor import ImageSequenceClip
output_path = "moviepy_air_temperature.gif"
str_outputs = [str(output) for output in outputs]
with example.time_run():
clip = ImageSequenceClip(str_outputs, fps=10)
clip.write_gif(output_path)
example.size_of(output_path)
MoviePy - Building file moviepy_air_temperature.gif with imageio.
Runtime: 116.50619766599993 seconds
File size of moviepy_air_temperature.gif: 40.40 MBs
ffmpeg#
[5]:
import shlex
import subprocess
output_path = "ffmpeg_air_temperature.gif"
for i, output in enumerate(outputs):
img_path = example._temporary_directory / f"{i:04d}.png"
img_path.write_bytes(output.read_bytes())
cmd = shlex.split(
f"ffmpeg -f image2 -framerate 20 "
f"-i {example._temporary_directory}/%04d.png -y "
f"-loglevel quiet {output_path}"
)
with example.time_run():
subprocess.run(cmd)
example.size_of(output_path)
Runtime: 37.32564495900078 seconds
File size of ffmpeg_air_temperature.gif: 255.71 MBs
mp4 animation#
enjoyn#
[7]:
from enjoyn import Mp4Animator
output_path = "enjoyn_air_temperature.mp4"
with example.time_run():
Mp4Animator(items=outputs, output_path=output_path).compute()
example.size_of(output_path)
[########################################] | 100% Completed | 14.1s
Runtime: 14.224654665998969 seconds
File size of enjoyn_air_temperature.mp4: 11.33 MBs
imageio#
[8]:
import imageio.v3 as iio
output_path = "imageio_air_temperature.mp4"
with example.time_run():
iio.imwrite(imageio_uri, [iio.imread(output) for output in outputs])
example.size_of(output_path)
Runtime: 30.01758450000125 seconds
File size of imageio_air_temperature.mp4: 10.33 MBs
moviepy#
[9]:
import moviepy.editor
from moviepy.editor import ImageSequenceClip
output_path = "moviepy_air_temperature.mp4"
str_outputs = [str(output) for output in outputs]
with example.time_run():
clip = ImageSequenceClip(str_outputs, fps=10)
clip.write_videofile(output_path)
example.size_of(output_path)
Moviepy - Building video moviepy_air_temperature.mp4.
Moviepy - Writing video moviepy_air_temperature.mp4
Moviepy - Done !
Moviepy - video ready moviepy_air_temperature.mp4
Runtime: 51.85272874999828 seconds
File size of moviepy_air_temperature.mp4: 10.33 MBs
ffmpeg#
[10]:
import shlex
import subprocess
for i, output in enumerate(outputs):
img_path = example._temporary_directory / f"{i:04d}.png"
img_path.write_bytes(output.read_bytes())
output_path = "ffmpeg_air_temperature.mp4"
cmd = shlex.split(
f"ffmpeg -f image2 -framerate 1 -r 10 -y "
f"-i {example._temporary_directory}/%04d.png "
f"-pix_fmt yuv420p -loglevel fatal {output_path}"
)
with example.time_run():
subprocess.run(cmd)
example.size_of(output_path)
Runtime: 10.275208666998878 seconds
File size of ffmpeg_air_temperature.mp4: 10.33 MBs