Example #1
0
    def make_scale_opts(self, codecgroup):
        scale_opt = Options('scale', sep='=')
        if codecgroup.chkLAR.isChecked():
            height = r"'" + 'trunc((ow/iw)/a*ih/2)*2' + r"'"
        else:
            height = codecgroup.spnHeight.value()

        scale_parms = Options('w={}'.format(codecgroup.spnWidth.value()),
                              'h={}'.format(height),
                              sep=':')
        scale_opt.append(scale_parms)
        return scale_opt
Example #2
0
 def make_subt_opts(self, stream_num):
     subt_opts = Options()
     codec_opt = Options('-codec', stream_num, sep=':')
     subt_opts.append(codec_opt)
     subt_opts.append(
         self.scodec_combo.codecs[self.scodec_combo.currentText()])
     return subt_opts
Example #3
0
 def __init__(self, path, *args, **kwds):
     super().__init__(path, *args, **kwds)
     self.global_opts = Options()
     self.infile_opts = Options()
     self.map_opts = Options()
     self.video_opts = Options()
     self.audio_opts = Options()
     self.subt_opts = Options()
     self.format_opts = Options()
     self.infile = None
     self.add_options(self.global_opts, self.infile_opts, self.map_opts,
                      self.video_opts, self.audio_opts, self.subt_opts,
                      self.format_opts)
Example #4
0
 def make_video_opts(self, stream_num):
     video_opts = Options()
     codec_opt = Options('-codec', stream_num, sep=':')
     video_opts.extend(
         (codec_opt, _video_codecs[self.vcodec_combo.currentText()]))
     if self.vcodec_combo.currentText() != 'Copy':
         bitrate_opt = Options('-b', stream_num, sep=':')
         video_opts.append(Options(bitrate_opt, self.bitrate_edit.text()))
     if self.codec_extra.get(self.vcodec_combo.currentText(),
                             None) is not None:
         for k, v in self.codec_extra[
                 self.vcodec_combo.currentText()].items():
             o = Options(k, stream_num, sep=':')
             p = Options(o, v)
             video_opts.append(p)
     children = self.findChildren(CodecGroup)
     filter = Options()
     filter_chain = Options(sep=',')
     filter.extend((Options('-filter', stream_num, sep=':'), filter_chain))
     if any([c.isChecked() for c in children]):
         for child in children:
             if child.isChecked():
                 if child.codec_type == 'crop':
                     crop_opt = Options('crop', sep='=')
                     crop_parms = Options(
                         '{}'.format(child.spnCropWidth.value()),
                         '{}'.format(child.spnCropHeight.value()),
                         '{}'.format(child.spnCropHoriz.value()),
                         '{}'.format(child.spnCropVertical.value()),
                         sep=':')
                     crop_opt.append(crop_parms)
                     filter_chain.insert(0, crop_opt)
                 elif child.codec_type == 'scale':
                     scale_opt = self.make_scale_opts(child)
                     filter_chain.append(scale_opt)
     filter_chain.append('hqdn3d')
     video_opts.append(filter)
     video_opts.extend((Options('-strict', stream_num,
                                sep=':'), 'experimental'))
     return video_opts
Example #5
0
 def make_map_opt(self):
     if hasattr(self.stream, 'vts'):
         map = Options('-map', Options('v', 0, sep=':'))
     else:
         map = super().make_map_opt()
     return map
Example #6
0
 def make_audio_opts(self, stream_num):
     audio_opts = Options()
     codec_opt = Options('-codec', stream_num, sep=':')
     audio_opts.append(codec_opt)
     audio_opts.append(_audio_codecs[self.acodec_combo.currentText()])
     if self.acodec_combo.currentText() != 'Copy':
         bitrate_opt = Options('-b', stream_num, sep=':')
         audio_opts.append(Options(bitrate_opt, self.bitrate_edit.text()))
         if self.samplerate_edit.text() not in ('0', ''):
             samplerate_opt = Options('-ar', stream_num, sep=':')
             audio_opts.append(
                 Options(samplerate_opt, self.samplerate_edit.text()))
     audio_opts.extend((Options('-strict', stream_num,
                                sep=':'), 'experimental'))
     return audio_opts
Example #7
0
 def make_map_opt(self):
     try:
         map = Options('-map', Options('i', self.stream.streamid, sep=':'))
     except:
         map = super().make_map_opt()
     return map
Example #8
0
 def make_map_opt(self):
     return Options('-map', Options(0, self.stream.index, sep=':'))
Example #9
0
    def on_start_clicked(self):
        def mangle_name(name):
            name = re.sub('%T', self.source.title, name)
            name = re.sub('%N', str(self.source.track_number), name)
            name = re.sub('%L', str(self.source.length), name)
            name = re.sub('%f', self.source.title[0], name)
            return name

        job_id = self.source.unique_id
        if job_id in self.jobs:
            return

        avconv = Commands().make_command('avconv')
        avconv.global_opts.append('-y')
        avconv.infile_opts.append(Options('-fflags', '+genpts'))
        vcount = acount = scount = 0
        stream_id = 0
        passes = 1
        codec_groups = self.gen_codec_groups()
        for codec_group in codec_groups:
            if codec_group.isChecked():
                if codec_group.codec_type == 'video':
                    avconv.video_opts.append(
                        codec_group.make_video_opts(stream_id))
                    passes = max(passes, codec_group.pass_spin.value())
                    vcount += 1
                elif codec_group.codec_type == 'audio':
                    avconv.audio_opts.append(
                        codec_group.make_audio_opts(stream_id))
                    acount += 1
                elif codec_group.codec_type == 'subtitle':
                    avconv.subt_opts.append(
                        codec_group.make_subt_opts(stream_id))
                    scount += 1
                if codec_group.codec_type in ('video', 'audio', 'subtitle'):
                    avconv.map_opts.append(codec_group.make_map_opt())
                    stream_id += 1
        if vcount == 0: avconv.map_opts.append('-vn')
        if acount == 0: avconv.map_opts.append('-an')
        if scount == 0:
            avconv.map_opts.append('-sn')
        else:
            avconv.infile_opts.insert(
                0, Options('-analyzeduration', '200M', '-probesize', '400M'))

        fbuttons = self.FscrollArea.findChildren(QRadioButton)
        for button in fbuttons:
            if button.isChecked():
                format = self.formats[button.text()]
                avconv.format_opts.append(Options('-f', format))
                break

        opdir = self.op_dir_edit.text() or os.path.join(
            os.environ['HOME'], '%T', 'Title_%N')
        opdir = mangle_name(opdir)
        if not os.path.isdir(opdir):
            try:
                os.makedirs(opdir)
            except:
                return
        fname = self.op_file_edit.text() or '%T_Title_%N'
        fname = mangle_name(fname)
        avconv.outfile = os.path.join(opdir, fname)

        jobwin = BR_JobDock(avconv, passes, job_id, self.encodeclose,
                            self.source, self)
        self.jobs[job_id] = jobwin
        jobwin.show()
        jobwin.start(opdir)