self.test_channels = True
# Source
- self.source_duration = 6.
+ self.source_duration = 10.
def testWav(self):
"Test wav encoding"
"Test vorbis encoding"
from timeside.encoder.ogg import VorbisEncoder
self.encoder_function = VorbisEncoder
- self.delta = 0.2
+ self.delta = 0.3
def testMp3(self):
"Test mp3 encoding"
from timeside.encoder.m4a import AacEncoder
self.encoder_function = AacEncoder
self.test_channels = False
- self.delta = 0.2
+ self.delta = 0.3
def testFlac(self):
"Test flac encoding"
self.delta = 0
def testWebm(self):
- "Test webm encoding"
+ "Test webm encoding, audio only"
+ from timeside.encoder.webm import WebMEncoder
+ self.encoder_function = WebMEncoder
+ self.test_duration = False # webmmux encoder with streamable=true
+ # does not return a valid duration
+
+ def testWebmVideo(self):
+ "Test webm encoding, video"
from timeside.encoder.webm import WebMEncoder
self.encoder_function = WebMEncoder
self.test_duration = False # webmmux encoder with streamable=true
# does not return a valid duration
+ file_extension = '.' + self.encoder_function.file_extension()
+ self.sink = tmp_file_sink(prefix=self.__class__.__name__,
+ suffix=file_extension)
+ self.encoder = self.encoder_function(self.sink,
+ overwrite=self.overwrite,
+ video=True)
def tearDown(self):
if not hasattr(self, 'sink'):
self.sink = tmp_file_sink(prefix=self.__class__.__name__,
suffix=file_extension)
- self.encoder = self.encoder_function(self.sink,
- overwrite=self.overwrite)
+
+ if not hasattr(self, 'encoder'):
+ self.encoder = self.encoder_function(self.sink,
+ overwrite=self.overwrite)
# Run Pipe
(decoder | self.encoder).run()
# setup/reset processors and configure properties throughout the pipe
for item in items:
+ item.source_mediainfo = source.mediainfo()
item.setup(channels=last.channels(),
samplerate=last.samplerate(),
blocksize=last.blocksize(),
totalframes=last.totalframes())
- item.source_mediainfo = source.mediainfo()
last = item
# now stream audio data along the pipe
""" gstreamer-based webm encoder and muxer """
implements(IEncoder)
- def __init__(self, output, streaming = False, overwrite = False):
+ def __init__(self, output, streaming=False, overwrite=False, video=False):
super(WebMEncoder, self).__init__(output, streaming, overwrite)
- self.video = False
+ self.video = video
@interfacedoc
def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None):
super(WebMEncoder, self).setup(channels, samplerate, blocksize, totalframes)
-
+ from numpy import ceil
+ framerate = 30
+ num_buffers = ceil(self.mediainfo()['duration'] *
+ framerate).astype(int)
if self.video:
- self.pipe = '''videotestsrc pattern=black ! ffmpegcolorspace
- ! queue ! vp8enc speed=2 threads=4 quality=9.0 ! queue ! mux.
- appsrc name=src ! queue ! audioconvert ! vorbisenc quality=0.9 ! queue ! mux.
- webmmux streamable=true name=mux
- '''
+ self.pipe = '''appsrc name=src ! queue ! audioconvert ! vorbisenc quality=0.9 ! queue ! mux.
+ videotestsrc pattern=black num_buffers=%d ! ffmpegcolorspace ! queue ! vp8enc speed=2 threads=4 quality=9.0 ! queue ! mux.
+ webmmux streamable=true name=mux
+ ''' % num_buffers
else:
self.pipe = '''
appsrc name=src ! queue ! audioconvert ! vorbisenc quality=0.9 ! queue !