Exemple #1
0
    def test_accurateseek_middle(self):
        for test_video, config in test_videos.items():
            full_path = os.path.join(VIDEO_DIR, test_video)

            stream = "video"
            video_reader = VideoReader(full_path, stream)
            md = video_reader.get_metadata()
            duration = md[stream]["duration"][0]
            if duration is not None:

                num_frames = 0
                for frame in video_reader:
                    num_frames += 1

                video_reader.seek(duration / 2)
                middle_num_frames = 0
                for frame in video_reader:
                    middle_num_frames += 1

                assert middle_num_frames < num_frames
                assert middle_num_frames == approx(num_frames // 2, abs=1)

                video_reader.seek(duration / 2)
                frame = next(video_reader)
                lb = duration / 2 - 1 / md[stream]["fps"][0]
                ub = duration / 2 + 1 / md[stream]["fps"][0]
                assert (lb <= frame["pts"]) and (ub >= frame["pts"])
Exemple #2
0
    def test_fate_suite(self):
        video_path = fate("sub/MovText_capability_tester.mp4", VIDEO_DIR)
        vr = VideoReader(video_path)
        metadata = vr.get_metadata()

        self.assertTrue(metadata["subtitles"]["duration"] is not None)
        os.remove(video_path)
Exemple #3
0
    def test_accurateseek_middle(self):
        for test_video, config in test_videos.items():
            full_path = os.path.join(VIDEO_DIR, test_video)

            stream = "video"
            video_reader = VideoReader(full_path, stream)
            md = video_reader.get_metadata()
            duration = md[stream]["duration"][0]
            if duration is not None:

                num_frames = 0
                for frame in video_reader:
                    num_frames += 1

                video_reader.seek(duration / 2)
                middle_num_frames = 0
                for frame in video_reader:
                    middle_num_frames += 1

                self.assertTrue(middle_num_frames < num_frames)
                self.assertAlmostEqual(middle_num_frames,
                                       num_frames // 2,
                                       delta=1)

                video_reader.seek(duration / 2)
                frame = next(video_reader)
                lb = duration / 2 - 1 / md[stream]["fps"][0]
                ub = duration / 2 + 1 / md[stream]["fps"][0]
                self.assertTrue((lb <= frame["pts"]) & (ub >= frame["pts"]))
Exemple #4
0
 def test_metadata(self, video_file):
     full_path = os.path.join(VIDEO_DIR, video_file)
     decoder = VideoReader(full_path, device="cuda")
     video_metadata = decoder.get_metadata()["video"]
     with av.open(full_path) as container:
         video = container.streams.video[0]
         av_duration = float(video.duration * video.time_base)
         assert math.isclose(video_metadata["duration"], av_duration, rel_tol=1e-2)
         assert math.isclose(video_metadata["fps"], video.base_rate, rel_tol=1e-2)
Exemple #5
0
 def test_metadata(self, test_video, config):
     """
     Test that the metadata returned via pyav corresponds to the one returned
     by the new video decoder API
     """
     full_path = os.path.join(VIDEO_DIR, test_video)
     reader = VideoReader(full_path, "video")
     reader_md = reader.get_metadata()
     assert config.video_fps == approx(reader_md["video"]["fps"][0], abs=0.0001)
     assert config.duration == approx(reader_md["video"]["duration"][0], abs=0.5)
Exemple #6
0
    def test_fate_suite(self):
        # TODO: remove the try-except statement once the connectivity issues are resolved
        try:
            video_path = fate("sub/MovText_capability_tester.mp4", VIDEO_DIR)
        except (urllib.error.URLError, ConnectionError) as error:
            pytest.skip(f"Skipping due to connectivity issues: {error}")
        vr = VideoReader(video_path)
        metadata = vr.get_metadata()

        assert metadata["subtitles"]["duration"] is not None
        os.remove(video_path)
Exemple #7
0
 def test_metadata(self):
     """
     Test that the metadata returned via pyav corresponds to the one returned
     by the new video decoder API
     """
     for test_video, config in test_videos.items():
         full_path = os.path.join(VIDEO_DIR, test_video)
         reader = VideoReader(full_path, "video")
         reader_md = reader.get_metadata()
         self.assertAlmostEqual(config.video_fps,
                                reader_md["video"]["fps"][0],
                                delta=0.0001)
         self.assertAlmostEqual(config.duration,
                                reader_md["video"]["duration"][0],
                                delta=0.5)