def test_scale_convert(self):
     config = ConvertConfig(scale=480)
     with create_test_video(length=4, video_def=VideoDefinition(resolution=Resolution.HIGH_DEF)) as file, \
             NamedTemporaryFile(suffix='.mkv') as output:
         convert_with_config(file.name, output.name, config, overwrite=True)
         metadata = extract_metadata(output.name)
         self.assertEqual(metadata.resolution, Resolution.STANDARD_DEF)
 def test_video_remux(self):
     config = convert_config_from_ns({'video_codec': 'copy'})
     with create_test_video(length=3, video_def=VideoDefinition(codec=VideoCodec.MPEG2)) as file, \
             NamedTemporaryFile(suffix='.mkv') as output:
         convert_with_config(file.name, output.name, config, overwrite=True)
         metadata = extract_metadata(output.name)
         self.assertEqual(metadata.video_streams[0].codec, VideoCodec.MPEG2.ffmpeg_codec_name)
예제 #3
0
    def test_h265_1080p_5_1(self):
        length = 3
        with create_test_video(length=length,
                               video_def=VideoDefinition(
                                   Resolution.HIGH_DEF, VideoCodec.H265,
                                   VideoFileContainer.MKV),
                               audio_defs=[
                                   AudioDefition(AudioCodec.AAC,
                                                 AudioChannelName.SURROUND_5_1)
                               ]) as file:
            metadata = create_metadata_extractor().extract(file.name)
            self.assertEqual(1, len(metadata.video_streams))
            self.assertEqual(1, len(metadata.audio_streams))

            v = metadata.video_streams[0]
            a = metadata.audio_streams[0]

            self.assertEqual(VideoCodec.H265.ffmpeg_codec_name, v.codec)
            self.assertEqual(length, v.duration)
            self.assertEqual(Resolution.HIGH_DEF.width, v.width)
            self.assertEqual(Resolution.HIGH_DEF.height, v.height)

            self.assertEqual(AudioCodec.AAC.ffmpeg_codec_name, a.codec)
            assertAudioLength(length, a.duration)
            self.assertEqual(6, a.channels)
예제 #4
0
 def test_not_h264(self):
     with create_test_video(length=5, video_def=VideoDefinition(Resolution.LOW_DEF, VideoCodec.MPEG2,
                                                                VideoFileContainer.MP4)) as first, \
             create_test_video(length=5, video_def=MP4_VIDEO_DEF) as second:
         with NamedTemporaryFile(suffix='.mp4') as output:
             with self.assertRaises(expected_exception=Exception):
                 concat_mp4(output.name,
                            files=[first.name, second.name],
                            overwrite=True)
 def test_defaults_convert(self):
     config = convert_config_from_ns({})
     with create_test_video(length=3, video_def=VideoDefinition(resolution=Resolution.LOW_DEF,
                                                                codec=VideoCodec.MPEG2),
                            audio_defs=[AudioDefition(codec=AudioCodec.AC3)]) as file, \
             NamedTemporaryFile(suffix='.mkv') as output:
         convert_with_config(file.name, output.name, config, overwrite=True)
         metadata = extract_metadata(output.name)
         self.assertEqual(metadata.resolution, Resolution.LOW_DEF)
         self.assertEqual(metadata.video_streams[0].codec, VideoCodec.H264.ffmpeg_codec_name)
         self.assertEqual(metadata.audio_streams[0].codec, AudioCodec.AAC.ffmpeg_codec_name)
예제 #6
0
    def test_metadata_in_file(self):
        meta = {'TestKey': 'test_value'}
        length = 2
        with create_test_video(length=length,
                               video_def=VideoDefinition(
                                   Resolution.HIGH_DEF, VideoCodec.H264,
                                   VideoFileContainer.WTV),
                               metadata=meta) as file:
            metadata = create_metadata_extractor().extract(file.name)
            print(metadata.tags)
            self.assertTrue('TestKey' in metadata.tags)
            self.assertEqual('test_value', metadata.tags['TestKey'])

        with create_test_video(length=length,
                               video_def=VideoDefinition(
                                   Resolution.HIGH_DEF, VideoCodec.H264,
                                   VideoFileContainer.MKV),
                               metadata=meta) as file:
            metadata = create_metadata_extractor().extract(file.name)
            print(metadata.tags)
            # MKV stores as uppercase
            self.assertTrue('TESTKEY' in metadata.tags)
            self.assertEqual('test_value', metadata.tags['TESTKEY'])
예제 #7
0
    def test_mpeg2(self):
        length = 5
        with create_test_video(
                length=length,
                video_def=VideoDefinition(codec=VideoCodec.MPEG2)) as file:
            metadata = create_metadata_extractor().extract(file.name, True)
            self.assertEqual(1, len(metadata.video_streams))
            self.assertEqual(1, len(metadata.audio_streams))
            self.assertFalse(metadata.interlace_report.is_interlaced())

            v = metadata.video_streams[0]
            a = metadata.audio_streams[0]

            self.assertEqual(VideoCodec.MPEG2.ffmpeg_codec_name, v.codec)
            self.assertEqual(length, v.duration)
            self.assertEqual(Resolution.LOW_DEF.width, v.width)
            self.assertEqual(Resolution.LOW_DEF.height, v.height)

            self.assertEqual(AudioCodec.AAC.ffmpeg_codec_name, a.codec)
            assertAudioLength(length, a.duration)
            self.assertEqual(2, a.channels)
예제 #8
0
from media_management_scripts.support.encoding import VideoCodec, VideoFileContainer, Resolution, AudioCodec
from tests import create_test_video, VideoDefinition, assertAudioLength, AudioDefition
from media_management_scripts.support.concat_mp4 import concat_mp4
from media_management_scripts.utils import create_metadata_extractor
import unittest
from tempfile import NamedTemporaryFile

MP4_VIDEO_DEF = VideoDefinition(Resolution.LOW_DEF, VideoCodec.H264,
                                VideoFileContainer.MP4)


class ConcatMp4TestCase(unittest.TestCase):
    def test_2_files(self):
        with create_test_video(length=5, video_def=MP4_VIDEO_DEF) as first, \
                create_test_video(length=5, video_def=MP4_VIDEO_DEF) as second:
            with NamedTemporaryFile(suffix='.mp4') as output:
                concat_mp4(output.name,
                           files=[first.name, second.name],
                           overwrite=True)
                metadata = create_metadata_extractor().extract(output.name)
                self.assertEqual(1, len(metadata.video_streams))
                self.assertEqual(10, int(metadata.video_streams[0].duration))

                self.assertEqual(1, len(metadata.audio_streams))
                self.assertEqual('aac', metadata.audio_streams[0].codec)
                self.assertEqual(2, metadata.audio_streams[0].channels)
                assertAudioLength(10, metadata.audio_streams[0].duration)

    def test_3_files(self):
        with create_test_video(length=5, video_def=MP4_VIDEO_DEF) as first, \
                create_test_video(length=5, video_def=MP4_VIDEO_DEF) as second, \
예제 #9
0
import unittest
from tempfile import TemporaryDirectory, NamedTemporaryFile
import configparser
from media_management_scripts.support.encoding import DEFAULT_CRF, DEFAULT_PRESET
from media_management_scripts.support.executables import ccextractor, comskip
import os
from media_management_scripts.support.encoding import Resolution, VideoCodec, VideoFileContainer, AudioCodec, \
    AudioChannelName
from tests import create_test_video, VideoDefinition, LOG_FILE
from unittest import mock

from media_management_scripts.silver_tube.processing import Configuration
from media_management_scripts.tvdb_api import TVDB

WTV_VIDEO_DEF = VideoDefinition(resolution=Resolution.STANDARD_DEF,
                                codec=VideoCodec.MPEG2,
                                container=VideoFileContainer.WTV)

class SilverTubeTestCase(unittest.TestCase):
    def setUp(self):
        self.files = []
        self.dirs = []
        self.config_file = NamedTemporaryFile(suffix='.ini', delete=False, mode='w')
        db_file = NamedTemporaryFile(suffix='.sqlite3')

        config = configparser.ConfigParser()
        config['main'] = {
            'debug': False,
            'database.file': db_file.name,
            'log.config': LOG_FILE
        }
 def test_deinterlace_convert(self):
     config = ConvertConfig(deinterlace=True)
     with create_test_video(length=10, video_def=VideoDefinition(codec=VideoCodec.MPEG2,
                                                                 interlaced=True)) as file, \
             NamedTemporaryFile(suffix='.mkv') as output:
         convert_with_config(file.name, output.name, config, overwrite=True)