You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When repeatedly creating and closing output containers (to segment a video), the memory usage increases steadily and never goes down, indicating a memory leak.
This behavior is not present in PyAV 13.0.0, but shows up in version 14.0.0 and 15.0.0.
Notes
Memory increases per segment.
Even after calling out_container.close() and del out_container, memory is not released.
Behavior introduced starting in version 14.0.0.
Test code
import av
import os
import time
import psutil
SEGMENT_DURATION = 10
OUTPUT_DIR = "segments"
INPUT_URL = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
os.makedirs(OUTPUT_DIR, exist_ok=True)
in_container = av.open(INPUT_URL)
video_stream = in_container.streams.video[0]
audio_stream = in_container.streams.audio[0] if in_container.streams.audio else None
video_pts = 0
audio_pts = 0
segment_index = 0
out_container = None
out_video_stream = None
out_audio_stream = None
segment_start_time = None
video_time_base = video_stream.time_base
audio_time_base = audio_stream.time_base if audio_stream else None
def start_new_segment():
global out_container, out_video_stream, out_audio_stream, video_pts, audio_pts
output_path = os.path.join(OUTPUT_DIR, f"segment{int(time.time())}.mp4")
out_container = av.open(output_path, mode="w")
if av.__version__ > "13.0.0":
out_video_stream = out_container.add_stream_from_template(template=video_stream, rate=video_stream.average_rate)
out_video_stream.time_base = video_stream.time_base
else:
out_video_stream = out_container.add_stream(template=video_stream, rate=video_stream.average_rate)
if audio_stream:
if av.__version__ > "13.0.0":
out_audio_stream = out_container.add_stream_from_template(audio_stream)
out_audio_stream.time_base = audio_stream.time_base
else:
out_audio_stream = out_container.add_stream("aac", rate=audio_stream.rate)
video_pts = 0
audio_pts = 0
rss = psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024
print(f"Current process memory usage: {rss:.2f}MB, av version:{av.__version__}")
start_new_segment()
for packet in in_container.demux((video_stream, audio_stream) if audio_stream else video_stream):
if packet.pts is None:
continue
if segment_start_time is None and packet.stream.type == 'video':
segment_start_time = float(packet.pts * packet.time_base)
if packet.stream.type == 'video':
current_time = float(packet.pts * packet.time_base)
if current_time - segment_start_time >= SEGMENT_DURATION:
if segment_index > 15:
break
out_container.close()
del out_container
segment_index += 1
segment_start_time = float(packet.pts * packet.time_base)
start_new_segment()
if packet.stream.type == 'video':
packet.pts = video_pts
packet.dts = video_pts
packet.stream = out_video_stream
out_container.mux(packet)
video_pts += int(1 / float(video_time_base * video_stream.average_rate))
elif packet.stream.type == 'audio':
packet.pts = audio_pts
packet.dts = audio_pts
packet.stream = out_audio_stream
out_container.mux(packet)
if packet.duration:
audio_pts += packet.duration
else:
audio_pts += int(audio_stream.rate / 100)
if out_container:
out_container.close()
in_container.close()
output log
(.venv) [root@serverData test_av]# python test.py
Current process memory usage: 43.12MB, av version:13.0.0
Current process memory usage: 46.61MB, av version:13.0.0
Current process memory usage: 46.62MB, av version:13.0.0
Current process memory usage: 47.26MB, av version:13.0.0
Current process memory usage: 47.26MB, av version:13.0.0
Current process memory usage: 47.27MB, av version:13.0.0
Current process memory usage: 47.27MB, av version:13.0.0
Current process memory usage: 47.27MB, av version:13.0.0
Current process memory usage: 47.29MB, av version:13.0.0
Current process memory usage: 47.29MB, av version:13.0.0
Current process memory usage: 47.29MB, av version:13.0.0
Current process memory usage: 47.29MB, av version:13.0.0
Current process memory usage: 47.29MB, av version:13.0.0
Current process memory usage: 47.30MB, av version:13.0.0
Current process memory usage: 47.30MB, av version:13.0.0
Current process memory usage: 47.37MB, av version:13.0.0
Current process memory usage: 47.38MB, av version:13.0.0
(.venv) [root@serverData test_av]# pip install -U av==14.0.0
Looking in indexes: http://mirrors.aliyun.com/pypi/simple
Collecting av==14.0.0
Using cached http://mirrors.aliyun.com/pypi/packages/76/0f/83c2476dadc245b9c76d90ae3828322a8f7eab02830ba57227ff3793cefb/av-14.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (33.1 MB)
Installing collected packages: av
Attempting uninstall: av
Found existing installation: av 13.0.0
Uninstalling av-13.0.0:
Successfully uninstalled av-13.0.0
Successfully installed av-14.0.0
WARNING: You are using pip version 22.0.4; however, version 25.2 is available.
You should consider upgrading via the '/tmp/test_av/.venv/bin/python3 -m pip install --upgrade pip' command.
(.venv) [root@serverData test_av]# python test.py
Current process memory usage: 42.43MB, av version:14.0.0
Current process memory usage: 49.29MB, av version:14.0.0
Current process memory usage: 61.54MB, av version:14.0.0
Current process memory usage: 67.30MB, av version:14.0.0
Current process memory usage: 68.96MB, av version:14.0.0
Current process memory usage: 69.21MB, av version:14.0.0
Current process memory usage: 71.29MB, av version:14.0.0
Current process memory usage: 85.32MB, av version:14.0.0
Current process memory usage: 73.05MB, av version:14.0.0
Current process memory usage: 73.21MB, av version:14.0.0
Current process memory usage: 73.21MB, av version:14.0.0
Current process memory usage: 71.30MB, av version:14.0.0
Current process memory usage: 72.96MB, av version:14.0.0
Current process memory usage: 71.31MB, av version:14.0.0
Current process memory usage: 73.30MB, av version:14.0.0
Current process memory usage: 71.32MB, av version:14.0.0
Current process memory usage: 71.32MB, av version:14.0.0
(.venv) [root@serverData test_av]# pip install -U av==15.0.0
Looking in indexes: http://mirrors.aliyun.com/pypi/simple
Collecting av==15.0.0
Using cached http://mirrors.aliyun.com/pypi/packages/b3/46/3c192579f73d00eb4e856b6a25b1b128a20a70fe07a8268b67dc1ad4dc75/av-15.0.0-cp39-cp39-manylinux_2_28_x86_64.whl (39.3 MB)
Installing collected packages: av
Attempting uninstall: av
Found existing installation: av 14.0.0
Uninstalling av-14.0.0:
Successfully uninstalled av-14.0.0
Successfully installed av-15.0.0
WARNING: You are using pip version 22.0.4; however, version 25.2 is available.
You should consider upgrading via the '/tmp/test_av/.venv/bin/python3 -m pip install --upgrade pip' command.
(.venv) [root@serverData test_av]# python test.py
Current process memory usage: 43.55MB, av version:15.0.0
Current process memory usage: 50.46MB, av version:15.0.0
Current process memory usage: 60.64MB, av version:15.0.0
Current process memory usage: 67.48MB, av version:15.0.0
Current process memory usage: 72.09MB, av version:15.0.0
Current process memory usage: 74.25MB, av version:15.0.0
Current process memory usage: 84.64MB, av version:15.0.0
Current process memory usage: 84.67MB, av version:15.0.0
Current process memory usage: 86.64MB, av version:15.0.0
Current process memory usage: 81.08MB, av version:15.0.0
Current process memory usage: 91.11MB, av version:15.0.0
Current process memory usage: 95.83MB, av version:15.0.0
Current process memory usage: 95.86MB, av version:15.0.0
Current process memory usage: 97.93MB, av version:15.0.0
Current process memory usage: 98.64MB, av version:15.0.0
Current process memory usage: 102.68MB, av version:15.0.0
Current process memory usage: 104.69MB, av version:15.0.0
(.venv) [root@serverData test_av]#
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
When repeatedly creating and closing output containers (to segment a video), the memory usage increases steadily and never goes down, indicating a memory leak.
This behavior is not present in PyAV 13.0.0, but shows up in version 14.0.0 and 15.0.0.
Environment
OS: CentOS
Python: 3.9
PyAV versions tested: 13.0.0 ✅, 14.0.0 ❌, 15.0.0 ❌
FFmpeg bundled with PyAV wheels
Notes
Memory increases per segment.
Even after calling out_container.close() and del out_container, memory is not released.
Behavior introduced starting in version 14.0.0.
Test code
output log
Beta Was this translation helpful? Give feedback.
All reactions