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
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
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)
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
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
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
def make_map_opt(self): try: map = Options('-map', Options('i', self.stream.streamid, sep=':')) except: map = super().make_map_opt() return map
def make_map_opt(self): return Options('-map', Options(0, self.stream.index, sep=':'))
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)