2025-10-03 13:25:14 +02:00
|
|
|
# RozK
|
|
|
|
|
|
|
|
|
|
from mp4.demuxer import Demuxer
|
2025-10-03 15:10:49 +02:00
|
|
|
from mp4.decoder import Decoder
|
2025-10-03 13:25:14 +02:00
|
|
|
|
|
|
|
|
demuxer = Demuxer('test.mp4')
|
|
|
|
|
|
2025-10-03 17:07:17 +02:00
|
|
|
print(f"nb_streams = {demuxer.nb_streams}")
|
|
|
|
|
print(f"video codec = {demuxer.video_stream.codec.name}")
|
|
|
|
|
print(f"audio codec = {demuxer.audio_stream.codec.name}")
|
2025-10-03 13:25:14 +02:00
|
|
|
|
2025-10-03 16:55:38 +02:00
|
|
|
video_decoder = Decoder(demuxer.video_stream)
|
|
|
|
|
audio_decoder = Decoder(demuxer.audio_stream)
|
2025-10-03 15:10:49 +02:00
|
|
|
|
2025-10-03 13:25:14 +02:00
|
|
|
while True:
|
|
|
|
|
packet = demuxer.read_packet()
|
|
|
|
|
if packet is None:
|
|
|
|
|
break
|
|
|
|
|
if demuxer.video_stream.contains(packet):
|
2025-10-03 15:10:49 +02:00
|
|
|
video_frames = video_decoder.decode(packet)
|
|
|
|
|
print(f"decoded {len(video_frames)} video frames")
|
2025-10-03 13:25:14 +02:00
|
|
|
continue
|
|
|
|
|
elif demuxer.audio_stream.contains(packet):
|
2025-10-03 15:10:49 +02:00
|
|
|
audio_frames = audio_decoder.decode(packet)
|
|
|
|
|
print(f"decoded {len(audio_frames)} audio frames")
|
2025-10-03 13:25:14 +02:00
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
print("unkown packet")
|
|
|
|
|
|
2025-10-03 17:07:17 +02:00
|
|
|
video_frames = video_decoder.flush()
|
2025-10-03 16:55:38 +02:00
|
|
|
print(f"flushed {len(video_frames)} video frames")
|
|
|
|
|
|
2025-10-03 17:07:17 +02:00
|
|
|
audio_frames = audio_decoder.flush()
|
2025-10-03 16:55:38 +02:00
|
|
|
print(f"flushed {len(audio_frames)} audio frames")
|
|
|
|
|
|
2025-10-03 13:25:14 +02:00
|
|
|
demuxer.close()
|