Пример #1
0
    def test_ffmpeg_thumbnail(self):
        f = ffmpeg.FFMpeg()
        thumb = self.shot_file_path
        thumb2 = self.shot2_file_path

        self.assertRaisesSpecific(IOError, f.thumbnail, 'nonexistent', 10,
                                  thumb)

        self.ensure_notexist(thumb)
        f.thumbnail('test1.ogg', 10, thumb)
        self.assertTrue(os.path.exists(thumb))

        self.ensure_notexist(thumb)
        self.assertRaisesSpecific(ffmpeg.FFMpegError, f.thumbnail, 'test1.ogg',
                                  34, thumb)
        self.assertFalse(os.path.exists(thumb))

        # test multiple thumbnail
        self.ensure_notexist(thumb)
        self.ensure_notexist(thumb2)
        f.thumbnails(
            'test1.ogg',
            [
                (5, thumb),
                (10, thumb2, None, 5),  # set quality
                (5, self.shot3_file_path, '320x240'),  # set size
            ])
        self.assertTrue(os.path.exists(thumb))
        self.assertTrue(os.path.exists(thumb2))
        self.assertTrue(os.path.exists(self.shot3_file_path))
Пример #2
0
    def test_ffmpeg_convert(self):
        f = ffmpeg.FFMpeg()

        def consume(fn, *args, **kwargs):
            return list(fn(*args, **kwargs))

        self.assertRaisesSpecific(ffmpeg.FFMpegError, consume, f.convert,
                                  'nonexistent', self.video_file_path, [])

        self.assertRaisesSpecific(ffmpeg.FFMpegConvertError, consume,
                                  f.convert, '/etc/passwd',
                                  self.video_file_path, [])

        info = f.probe('test1.ogg')

        convert_options = [
            '-acodec', 'libvorbis', '-ab', '16k', '-ac', '1', '-ar', '11025',
            '-vcodec', 'libtheora', '-r', '15', '-s', '360x200', '-b', '128k'
        ]
        conv = f.convert('test1.ogg', self.video_file_path, convert_options)

        last_tc = 0.0
        for tc in conv:
            assert (last_tc < tc <= info.format.duration + 0.1), (
                last_tc, tc, info.format.duration)

        self._assert_converted_video_file()
Пример #3
0
    def test_ffmpeg_probe(self):
        self.assertRaisesSpecific(ffmpeg.FFMpegError, ffmpeg.FFMpeg,
            ffmpeg_path='/foo', ffprobe_path='/bar')

        f = ffmpeg.FFMpeg()

        self.assertEqual(None, f.probe('/nonexistent'))
        self.assertEqual(None, f.probe('/dev/null'))

        info = f.probe('test1.ogg')
        self.assertEqual('ogg', info.format.format)
        self.assertAlmostEqual(33.00, info.format.duration, places=2)
        self.assertEqual(2, len(info.streams))

        v = info.streams[0]
        self.assertEqual(v, info.video)
        self.assertEqual('video', v.type)
        self.assertEqual('theora', v.codec)
        self.assertEqual(720, v.video_width)
        self.assertEqual(400, v.video_height)
        self.assertAlmostEqual(25.00, v.video_fps, places=2)

        a = info.streams[1]
        self.assertEqual(a, info.audio)
        self.assertEqual('audio', a.type)
        self.assertEqual('vorbis', a.codec)
        self.assertEqual(2, a.audio_channels)
        self.assertEqual(48000, a.audio_samplerate)

        self.assertEqual(repr(info),
            'MediaInfo(format=MediaFormatInfo(format=ogg, duration=33.00), streams=[MediaStreamInfo(type=video, codec=theora, width=720, height=400, fps=25.0), MediaStreamInfo(type=audio, codec=vorbis, channels=2, rate=48000)])')
Пример #4
0
 def test_ffmpeg_termination(self):
     # test when ffmpeg is killed
     f = ffmpeg.FFMpeg()
     convert_options = [
         '-acodec', 'libvorbis', '-ab', '16k', '-ac', '1', '-ar', '11025',
         '-vcodec', 'libtheora', '-r', '15', '-s', '360x200', '-b', '128k']
     p_list = {}  # modifiable object in closure
     f._spawn = lambda *args: p_list.setdefault('', ffmpeg.FFMpeg._spawn(*args))
     conv = f.convert('test1.ogg', self.video_file_path, convert_options)
     conv.next()  # let ffmpeg to start
     p = p_list['']
     p.terminate()
     self.assertRaisesSpecific(ffmpeg.FFMpegConvertError, list, conv)
Пример #5
0
    def test_ffmpeg_thumbnail(self):
        f = ffmpeg.FFMpeg()
        thumb = '/tmp/shot.png'

        self.assertRaisesSpecific(IOError, f.thumbnail, '/nonexistent', 10, thumb)

        self.ensure_notexist(thumb)
        f.thumbnail('test1.ogg', 10, thumb)
        self.assertTrue(os.path.exists(thumb))

        self.ensure_notexist(thumb)
        self.assertRaisesSpecific(ffmpeg.FFMpegError, f.thumbnail, 'test1.ogg', 34, thumb)
        self.assertFalse(os.path.exists(thumb))
Пример #6
0
    def test_ffmpeg_probe(self):
        self.assertRaisesSpecific(ffmpeg.FFMpegError,
                                  ffmpeg.FFMpeg,
                                  ffmpeg_path='/foo',
                                  ffprobe_path='/bar')

        f = ffmpeg.FFMpeg(ffmpeg_path="ffmpeg-3.2.10",
                          ffprobe_path="ffprobe-3.2.10")

        self.assertEqual(None, f.probe('nonexistent'))
        self.assertEqual(None, f.probe('/dev/null'))

        info = f.probe('test1.ogg')
        self.assertEqual('ogg', info.format.format)
        self.assertAlmostEqual(33.00, info.format.duration, places=2)
        self.assertEqual(2, len(info.streams))

        v = info.streams[0]
        self.assertEqual(v, info.video)
        self.assertEqual('video', v.type)
        self.assertEqual('theora', v.codec)
        self.assertEqual(720, v.video_width)
        self.assertEqual(400, v.video_height)
        self.assertEqual(None, v.bitrate)
        self.assertAlmostEqual(25.00, v.video_fps, places=2)
        self.assertEqual(v.metadata['ENCODER'], 'ffmpeg2theora 0.19')

        a = info.streams[1]
        self.assertEqual(a, info.audio)
        self.assertEqual('audio', a.type)
        self.assertEqual('vorbis', a.codec)
        self.assertEqual(2, a.audio_channels)
        self.assertEqual(80000, a.bitrate)
        self.assertEqual(48000, a.audio_samplerate)
        self.assertEqual(a.metadata['ENCODER'], 'ffmpeg2theora 0.19')

        self.assertEqual(
            repr(info),
            'MediaInfo(format=MediaFormatInfo(duration=32.996875, format=ogg, ), streams=['
            'MediaStreamInfo(type=video, codec=theora, width=720, height=400, fps=25.0, ENCODER=ffmpeg2theora 0.19), '
            'MediaStreamInfo(type=audio, codec=vorbis, channels=2, rate=48000, bitrate=80000, ENCODER=ffmpeg2theora 0.19)])'
        )
Пример #7
0
    def _assert_converted_video_file(self):
        """
            Asserts converted test1.ogg (in path self.video_file_path) is converted correctly
        """
        f = ffmpeg.FFMpeg()
        info = f.probe(self.video_file_path)
        self.assertEqual('ogg', info.format.format)
        self.assertAlmostEqual(33.00, info.format.duration, places=0)
        self.assertEqual(2, len(info.streams))

        self.assertEqual('video', info.video.type)
        self.assertEqual('theora', info.video.codec)
        self.assertEqual(360, info.video.video_width)
        self.assertEqual(200, info.video.video_height)
        self.assertAlmostEqual(15.00, info.video.video_fps, places=2)

        self.assertEqual('audio', info.audio.type)
        self.assertEqual('vorbis', info.audio.codec)
        self.assertEqual(1, info.audio.audio_channels)
        self.assertEqual(11025, info.audio.audio_samplerate)
Пример #8
0
    def test_ffmpeg_convert(self):
        f = ffmpeg.FFMpeg()

        def consume(fn, *args, **kwargs):
            return list(fn(*args, **kwargs))

        self.assertRaisesSpecific(ffmpeg.FFMpegError, consume, f.convert,
                                  'nonexistent', self.video_file_path, [])

        self.assertRaisesSpecific(ffmpeg.FFMpegConvertError, consume,
                                  f.convert, '/etc/passwd',
                                  self.video_file_path, [])

        info = f.probe('test1.ogg')

        conv = f.convert('test1.ogg', self.video_file_path, [
            '-acodec', 'libvorbis', '-ab', '16k', '-ac', '1', '-ar', '11025',
            '-vcodec', 'libtheora', '-r', '15', '-s', '360x200', '-b', '128k'
        ])

        last_tc = 0.0
        for tc in conv:
            assert (tc > last_tc and
                    tc <= info.format.duration + 0.1), (last_tc, tc,
                                                        info.format.duration)

        info = f.probe(self.video_file_path)
        self.assertEqual('ogg', info.format.format)
        self.assertAlmostEqual(33.00, info.format.duration, places=0)
        self.assertEqual(2, len(info.streams))

        self.assertEqual('video', info.video.type)
        self.assertEqual('theora', info.video.codec)
        self.assertEqual(360, info.video.video_width)
        self.assertEqual(200, info.video.video_height)
        self.assertAlmostEqual(15.00, info.video.video_fps, places=2)

        self.assertEqual('audio', info.audio.type)
        self.assertEqual('vorbis', info.audio.codec)
        self.assertEqual(1, info.audio.audio_channels)
        self.assertEqual(11025, info.audio.audio_samplerate)