From 6fb3a369cdd742b74fbed29c91f2b935e0608645 Mon Sep 17 00:00:00 2001 From: Sergio Costas Date: Sun, 13 Oct 2019 18:10:20 +0200 Subject: [PATCH] general: added HEVC support --- data/interface/wselect_disk.ui | 57 ++++++++++++++++++++++++++++--- data/pixmaps/icon_hevc.png | Bin 0 -> 10107 bytes src/devedeng/avconv.py | 16 ++++++--- src/devedeng/choose_disc_type.py | 9 +++++ src/devedeng/ffmpeg.py | 16 ++++++--- src/devedeng/file_movie.py | 10 +++--- src/devedeng/project.py | 8 ++--- 7 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 data/pixmaps/icon_hevc.png diff --git a/data/interface/wselect_disk.ui b/data/interface/wselect_disk.ui index ab948e8..dc66401 100644 --- a/data/interface/wselect_disk.ui +++ b/data/interface/wselect_disk.ui @@ -1,5 +1,5 @@ - + @@ -10,6 +10,9 @@ center icon_mkv.png + + + True @@ -311,6 +314,53 @@ Creates H.264 files in a MKV container 6 + + + True + True + True + + + + True + False + + + True + False + icon_hevc.png + + + False + True + 0 + + + + + True + False + <b>Matroska / HEVC (H.265)</b> +Creates HEVC files in a MKV container + True + 0 + + + True + True + 4 + 1 + + + + + + + True + True + 7 + + True @@ -350,13 +400,10 @@ Creates H.264 files in a MKV container False True - 7 + 8 - - - diff --git a/data/pixmaps/icon_hevc.png b/data/pixmaps/icon_hevc.png new file mode 100644 index 0000000000000000000000000000000000000000..ce71138176db46a01ebd337431463b2f3d709008 GIT binary patch literal 10107 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 literal 0 HcmV?d00001 diff --git a/src/devedeng/avconv.py b/src/devedeng/avconv.py index dd3faec..a7bdd68 100644 --- a/src/devedeng/avconv.py +++ b/src/devedeng/avconv.py @@ -49,6 +49,7 @@ class avconv(devedeng.avbase.avbase): mpeg2 = False divx = False h264 = False + hevc = False for line in stdout.decode("latin-1").split("\n"): parts = line.strip().split(" ") if len(parts) < 2: @@ -79,6 +80,9 @@ class avconv(devedeng.avbase.avbase): if (codec == "h264") or (codec == "H264"): h264 = True continue + if (codec == "hevc") or (codec == "HEVC"): + hevc = True + continue if (codec == "mpeg4"): divx = True continue @@ -94,6 +98,8 @@ class avconv(devedeng.avbase.avbase): devedeng.avconv.avconv.disc_types.append("divx") if (h264 and mp3): devedeng.avconv.avconv.disc_types.append("mkv") + if (hevc and mp3): + devedeng.ffmpeg.ffmpeg.disc_types.append("hevc") return True else: @@ -249,9 +255,9 @@ class avconv(devedeng.avbase.avbase): if minrate < (devedeng.project.devede_project.divx_min_bps * 1000): minrate = devedeng.project.devede_project.divx_min_bps * 1000 self.command_var.append(str(minrate)) - elif (self.config.disc_type == "mkv"): + elif (self.config.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.command_var.append("-vcodec") - self.command_var.append("h264") + self.command_var.append("h264" if self.config.disc_type == "mkv" else "hevc") self.command_var.append("-acodec") self.command_var.append("libmp3lame") self.command_var.append("-f") @@ -423,11 +429,11 @@ class avconv(devedeng.avbase.avbase): else: keyintv = 15 - if (not file_project.gop12) and (not(self.config.disc_type == "divx")) and (not(self.config.disc_type == "mkv")): + if (not file_project.gop12) and (not(self.config.disc_type == "divx")) and (not(self.config.disc_type == "mkv") and (not(self.config.disc_type == "hevc"))): self.command_var.append("-g") self.command_var.append(str(keyintv)) - if (self.config.disc_type == "divx") or (self.config.disc_type == "mkv"): + if (self.config.disc_type == "divx") or (self.config.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.command_var.append("-g") self.command_var.append("300") elif file_project.gop12 and (not file_project.no_reencode_audio_video): @@ -444,7 +450,7 @@ class avconv(devedeng.avbase.avbase): self.command_var.append(str(video_length)) self.command_var.append("-ac") - if (file_project.sound5_1) and ((self.config.disc_type == "dvd") or (self.config.disc_type == "divx") or (self.config.disc_type == "mkv")): + if (file_project.sound5_1) and ((self.config.disc_type == "dvd") or (self.config.disc_type == "divx") or (self.config.disc_type == "mkv") or (self.config.disc_type == "hevc")): self.command_var.append("6") else: self.command_var.append("2") diff --git a/src/devedeng/choose_disc_type.py b/src/devedeng/choose_disc_type.py index c4635d4..9d5fae0 100644 --- a/src/devedeng/choose_disc_type.py +++ b/src/devedeng/choose_disc_type.py @@ -42,6 +42,7 @@ class choose_disc_type(GObject.GObject): svcd = True divx = True mkv = True + hevc = True analizers, players, converters, menuers, burners, mkiso = self.cv.get_needed_programs() if (analizers is not None) or (converters is not None): @@ -51,6 +52,7 @@ class choose_disc_type(GObject.GObject): svcd = False divx = False mkv = False + hevc = False if menuers is not None: dvd = False @@ -82,6 +84,8 @@ class choose_disc_type(GObject.GObject): divx = False if self.cv.discs.count("mkv") == 0: mkv = False + if self.cv.discs.count("hevc") == 0: + hevc = False builder.get_object("button_dvd").set_sensitive(dvd) builder.get_object("button_vcd").set_sensitive(vcd) @@ -89,6 +93,7 @@ class choose_disc_type(GObject.GObject): builder.get_object("button_cvd").set_sensitive(cvd) builder.get_object("button_divx").set_sensitive(divx) builder.get_object("button_mkv").set_sensitive(mkv) + builder.get_object("button_hevc").set_sensitive(hevc) self.wask_window.show_all() @@ -133,6 +138,10 @@ class choose_disc_type(GObject.GObject): self.set_type("mkv") + def on_button_hevc_clicked(self, b): + + self.set_type("hevc") + def on_help_clicked(self, b): help_file = devedeng.help.help("select.html") diff --git a/src/devedeng/ffmpeg.py b/src/devedeng/ffmpeg.py index 52212d0..5b14ec7 100644 --- a/src/devedeng/ffmpeg.py +++ b/src/devedeng/ffmpeg.py @@ -49,6 +49,7 @@ class ffmpeg(devedeng.executor.executor): mpeg2 = False divx = False h264 = False + hevc = False for line in stdout.decode("latin-1").split("\n"): parts = line.strip().split(" ") if len(parts) < 2: @@ -79,6 +80,9 @@ class ffmpeg(devedeng.executor.executor): if (codec == "h264") or (codec == "H264"): h264 = True continue + if (codec == "hevc") or (codec == "HEVC"): + hevc = True + continue if (codec == "mpeg4"): divx = True continue @@ -94,6 +98,8 @@ class ffmpeg(devedeng.executor.executor): devedeng.ffmpeg.ffmpeg.disc_types.append("divx") if (h264 and mp3): devedeng.ffmpeg.ffmpeg.disc_types.append("mkv") + if (hevc and mp3): + devedeng.ffmpeg.ffmpeg.disc_types.append("hevc") return True else: @@ -244,9 +250,9 @@ class ffmpeg(devedeng.executor.executor): if minrate < (devedeng.project.devede_project.divx_min_bps * 1000): minrate = devedeng.project.devede_project.divx_min_bps * 1000 self.command_var.append(str(minrate)) - elif (self.config.disc_type == "mkv"): + elif (self.config.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.command_var.append("-vcodec") - self.command_var.append("h264") + self.command_var.append("h264" if self.config.disc_type == "mkv" else "hevc") self.command_var.append("-acodec") self.command_var.append("libmp3lame") self.command_var.append("-f") @@ -418,11 +424,11 @@ class ffmpeg(devedeng.executor.executor): else: keyintv = 15 - if (not file_project.gop12) and (not(self.config.disc_type == "divx")) and (not(self.config.disc_type == "mkv")): + if (not file_project.gop12) and (not(self.config.disc_type == "divx")) and (not(self.config.disc_type == "mkv") and (not(self.config.disc_type == "hevc"))): self.command_var.append("-g") self.command_var.append(str(keyintv)) - if (self.config.disc_type == "divx") or (self.config.disc_type == "mkv"): + if (self.config.disc_type == "divx") or (self.config.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.command_var.append("-g") self.command_var.append("300") elif file_project.gop12 and (not file_project.no_reencode_audio_video): @@ -439,7 +445,7 @@ class ffmpeg(devedeng.executor.executor): self.command_var.append(str(video_length)) self.command_var.append("-ac") - if (file_project.sound5_1) and ((self.config.disc_type == "dvd") or (self.config.disc_type == "divx") or (self.config.disc_type == "mkv")): + if (file_project.sound5_1) and ((self.config.disc_type == "dvd") or (self.config.disc_type == "divx") or (self.config.disc_type == "mkv") or (self.config.disc_type == "hevc")): self.command_var.append("6") else: self.command_var.append("2") diff --git a/src/devedeng/file_movie.py b/src/devedeng/file_movie.py index cede8c9..83f5947 100644 --- a/src/devedeng/file_movie.py +++ b/src/devedeng/file_movie.py @@ -73,7 +73,7 @@ class file_movie(devedeng.interface_manager.interface_manager): self.add_toggle("copy_sound", False) self.add_toggle("is_mpeg_ps", False) self.add_toggle("no_reencode_audio_video", False) - if (self.disc_type == "divx") or (self.disc_type == "mkv"): + if (self.disc_type == "divx") or (self.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.add_toggle("gop12", False) else: self.add_toggle("gop12", True) @@ -259,7 +259,7 @@ class file_movie(devedeng.interface_manager.interface_manager): def set_final_rates(self): - if (self.disc_type == "divx") or (self.disc_type == "mkv"): + if (self.disc_type == "divx") or (self.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.audio_rate_auto = 192 elif (self.disc_type == "vcd") or (self.disc_type == "svcd") or (self.disc_type == "cvd"): self.audio_rate_auto = 224 @@ -304,7 +304,7 @@ class file_movie(devedeng.interface_manager.interface_manager): # for divx or matroska, if the size and the aspect ratio is automatic, # just don't change them - if ((self.disc_type == "divx") or (self.disc_type == "mkv")) and (final_size == "size_auto") and (self.aspect_ratio == "aspect_auto"): + if ((self.disc_type == "divx") or (self.disc_type == "mkv") or (self.config.disc_type == "hevc")) and (final_size == "size_auto") and (self.aspect_ratio == "aspect_auto"): self.width_midle = self.original_width self.width_final = self.original_width self.height_midle = self.original_height @@ -472,7 +472,7 @@ class file_movie(devedeng.interface_manager.interface_manager): self.wframe_division_chapters = self.builder.get_object( "frame_division_chapters") - if (self.disc_type == "dvd") or (self.disc_type == "divx") or (self.disc_type == "mkv"): + if (self.disc_type == "dvd") or (self.disc_type == "divx") or (self.disc_type == "mkv") or (self.config.disc_type == "hevc"): self.waudio_rate.set_upper(448.0) else: self.waudio_rate.set_upper(384.0) @@ -555,7 +555,7 @@ class file_movie(devedeng.interface_manager.interface_manager): self.wcopy_sound.hide() self.wnotebook.remove_page(5) self.wnotebook.remove_page(1) - elif (self.disc_type == 'mkv'): + elif (self.disc_type == 'mkv') or (self.config.disc_type == "hevc"): self.wshow_in_menu.hide() self.wframe_division_chapters.hide() self.wnotebook.remove_page(5) diff --git a/src/devedeng/project.py b/src/devedeng/project.py index ee7a633..4cd9fe9 100644 --- a/src/devedeng/project.py +++ b/src/devedeng/project.py @@ -140,7 +140,7 @@ class devede_project: self.set_interface_status(None) # Set the default disc size - if (self.disc_type == "dvd") or (self.disc_type == "mkv"): + if (self.disc_type == "dvd") or (self.disc_type == "mkv") or (self.disc_type == "hevc"): self.wdisc_size.set_active(1) # 4.7 GB DVD else: self.wdisc_size.set_active(3) # 700 MB CD @@ -368,7 +368,7 @@ class devede_project: max_bps_base = devede_project.divx_max_bps_base.copy() min_bps = devede_project.divx_min_bps max_total = devede_project.divx_max_total - elif (self.disc_type == "mkv"): + elif (self.disc_type == "mkv") or (self.disc_type == "hevc"): max_bps_base = devede_project.mkv_max_bps_base.copy() min_bps = devede_project.mkv_min_bps max_total = devede_project.mkv_max_total @@ -468,7 +468,7 @@ class devede_project: elif (self.disc_type == "dvd"): minvrate = 400 maxvrate = 8500 - elif (self.disc_type == "divx") or (self.disc_type == "mkv"): + elif (self.disc_type == "divx") or (self.disc_type == "mkv") or (self.disc_type == "hevc"): minvrate = 300 maxvrate = 6000 else: @@ -551,7 +551,7 @@ class devede_project: counter = 0 if self.disc_type == "divx": extension = "avi" - elif self.disc_type == "mkv": + elif (self.disc_type == "mkv") or (self.disc_type == "hevc"): extension = "mkv" else: extension = "mpg"