general: added HEVC support

This commit is contained in:
Sergio Costas 2019-10-13 18:10:20 +02:00
parent 25df1a4ac7
commit 6fb3a369cd
7 changed files with 92 additions and 24 deletions

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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)

View file

@ -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"