From: Carl Hetherington Date: Thu, 13 Feb 2020 16:29:47 +0000 (+0100) Subject: Rename and extend check_packets.py X-Git-Tag: v2.15.43~15 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=a6ca3acafbfb6a868f10a9e9e1e7c61008643e72 Rename and extend check_packets.py --- diff --git a/hacks/check_packets.py b/hacks/check_packets.py deleted file mode 100644 index 22d2aa434..000000000 --- a/hacks/check_packets.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/python - -import subprocess -import shlex -import sys - -last_video = None -last_video_pts = None - -def handle(frame): - global last_video - global last_video_pts - if frame['media_type'] == 'video': - if last_video_pts is not None and frame['pkt_pts_time'] <= last_video_pts: - print 'Out of order video frame %f (%d) is same as or behind %f (%d)' % (frame['pkt_pts_time'], frame['pkt_pts'], last_video_pts, last_video) - elif last_video_pts is not None: - print 'OK frame %f %f %f' % (frame['pkt_pts_time'], frame['pkt_pts_time'] - last_video_pts, 1 / (frame['pkt_pts_time'] - last_video_pts)) - else: - print 'OK frame %f' % (frame['pkt_pts_time']) - last_video = frame['pkt_pts'] - last_video_pts = frame['pkt_pts_time'] - -p = subprocess.Popen(shlex.split('ffprobe -show_frames %s' % sys.argv[1]), stdin=None, stdout=subprocess.PIPE) -frame = dict() -while True: - l = p.stdout.readline() - if l == '': - break - - l = l.strip() - - if l == '[/FRAME]': - handle(frame) - frame = dict() - elif l != '[FRAME]' and l != '[SIDE_DATA]' and l != '[/SIDE_DATA]': - s = l.split('=') - if s[0] == 'pkt_pts_time': - frame[s[0]] = float(s[1]) - elif s[0] == 'pkt_pts': - frame[s[0]] = float(s[1]) - elif len(s) > 1: - frame[s[0]] = s[1] diff --git a/hacks/examine.py b/hacks/examine.py new file mode 100644 index 000000000..34544c7f6 --- /dev/null +++ b/hacks/examine.py @@ -0,0 +1,65 @@ +#!/usr/bin/python + +import subprocess +import shlex +import sys + +AUDIO_STREAM = "1" +types = ['audio'] + +last_video = None +last_video_pts = None + +last_audio_pts = {} +last_channels = {} + +def check_pts_dts(frame): + diff = frame['pkt_pts_time'] - frame['pkt_dts_time'] + if abs(diff) > 1e-8: + print("\tPTS != DTS: %f" % diff) + +def handle(frame): + global last_video + global last_video_pts + global last_audio_pts + if frame['media_type'] == 'video' and 'video' in types: + if last_video_pts is not None and frame['pkt_pts_time'] <= last_video_pts: + print 'Out of order video frame %f (%d) is same as or behind %f (%d)' % (frame['pkt_pts_time'], frame['pkt_pts'], last_video_pts, last_video) + elif last_video_pts is not None: + print 'OK V frame %f %f %f %f %d' % (frame['pkt_pts_time'], frame['pkt_dts_time'], frame['pkt_pts_time'] - last_video_pts, 1 / (frame['pkt_pts_time'] - last_video_pts), frame['pkt_size']) + check_pts_dts(frame) + else: + print 'OK V frame %f' % (frame['pkt_pts_time']) + last_video = frame['pkt_pts'] + last_video_pts = frame['pkt_pts_time'] + elif frame['media_type'] == 'audio' and 'audio' in types: + stream_index = frame['stream_index'] + if stream_index in last_audio_pts and (stream_index == AUDIO_STREAM or AUDIO_STREAM is None): + print 'OK A[%s] frame %4.8f %4.8f %4.8f %4.8f %d' % (stream_index, frame['pkt_pts_time'], frame['pkt_dts_time'], frame['pkt_pts_time'] - last_audio_pts[stream_index], 1 / (frame['pkt_pts_time'] - last_audio_pts[stream_index]), frame['pkt_size']) + check_pts_dts(frame) + if stream_index in last_channels and frame['channels'] != last_channels[stream_index]: + print "\t*** unusual channel count" + last_audio_pts[stream_index] = frame['pkt_pts_time'] + last_channels[stream_index] = frame['channels'] + + +p = subprocess.Popen(shlex.split('ffprobe -show_frames "%s"' % sys.argv[1]), stdin=None, stdout=subprocess.PIPE) +frame = dict() +while True: + l = p.stdout.readline() + if l == '': + break + + l = l.strip() + + if l == '[/FRAME]': + handle(frame) + frame = dict() + elif l != '[FRAME]' and l != '[SIDE_DATA]' and l != '[/SIDE_DATA]': + s = l.split('=') + if s[0] in ['pkt_pts_time', 'pkt_dts_time', 'pkt_pts', 'pkt_dts']: + frame[s[0]] = float(s[1]) + elif s[0] in ['channels', 'pkt_size', 'nb_samples']: + frame[s[0]] = int(s[1]) + elif len(s) > 1: + frame[s[0]] = s[1]