2025-10-03 18:08:00 +02:00
|
|
|
# People's Video Editor: high quality, GPU accelerated mp4 editor
|
|
|
|
|
# Copyright (C) 2025 Roz K <roz@rozk.net>
|
|
|
|
|
#
|
|
|
|
|
# This file is part of People's Video Editor.
|
|
|
|
|
#
|
|
|
|
|
# People's Video Editor is free software: you can redistribute it and/or modify it under the terms of the
|
|
|
|
|
# GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
|
|
|
|
|
# or (at your option) any later version.
|
|
|
|
|
#
|
2025-10-03 18:15:25 +02:00
|
|
|
# People's Video Editor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
|
|
|
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
# See the GNU General Public License for more details.
|
2025-10-03 18:08:00 +02:00
|
|
|
#
|
2025-10-03 18:15:25 +02:00
|
|
|
# You should have received a copy of the GNU General Public License along with People's Video Editor.
|
2025-10-03 18:08:00 +02:00
|
|
|
# If not, see <https://www.gnu.org/licenses/>.
|
2025-10-03 13:25:14 +02:00
|
|
|
|
2025-10-04 14:22:11 +02:00
|
|
|
from pyav.demuxer import Demuxer
|
|
|
|
|
from pyav.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()
|
2025-10-03 18:08:09 +02:00
|
|
|
eof = (packet is None)
|
|
|
|
|
if eof or 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 18:08:09 +02:00
|
|
|
if eof or 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 18:08:09 +02:00
|
|
|
if eof:
|
|
|
|
|
break
|