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

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.1 --> <!-- Generated with glade 3.22.1 -->
<interface> <interface>
<requires lib="gtk+" version="3.10"/> <requires lib="gtk+" version="3.10"/>
<object class="GtkWindow" id="wselect_disk"> <object class="GtkWindow" id="wselect_disk">
@ -10,6 +10,9 @@
<property name="window_position">center</property> <property name="window_position">center</property>
<property name="icon">icon_mkv.png</property> <property name="icon">icon_mkv.png</property>
<signal name="delete-event" handler="on_wselect_disk_destroy_event" swapped="no"/> <signal name="delete-event" handler="on_wselect_disk_destroy_event" swapped="no"/>
<child type="titlebar">
<placeholder/>
</child>
<child> <child>
<object class="GtkBox" id="box1"> <object class="GtkBox" id="box1">
<property name="visible">True</property> <property name="visible">True</property>
@ -311,6 +314,53 @@ Creates H.264 files in a MKV container</property>
<property name="position">6</property> <property name="position">6</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="button_hevc">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_button_hevc_clicked" swapped="no"/>
<child>
<object class="GtkBox" id="box8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixbuf">icon_hevc.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;Matroska / HEVC (H.265)&lt;/b&gt;
Creates HEVC files in a MKV container</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">4</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child> <child>
<object class="GtkButtonBox" id="buttonbox1"> <object class="GtkButtonBox" id="buttonbox1">
<property name="visible">True</property> <property name="visible">True</property>
@ -350,13 +400,10 @@ Creates H.264 files in a MKV container</property>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">7</property> <property name="position">8</property>
</packing> </packing>
</child> </child>
</object> </object>
</child> </child>
<child type="titlebar">
<placeholder/>
</child>
</object> </object>
</interface> </interface>

BIN
data/pixmaps/icon_hevc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View file

@ -49,6 +49,7 @@ class avconv(devedeng.avbase.avbase):
mpeg2 = False mpeg2 = False
divx = False divx = False
h264 = False h264 = False
hevc = False
for line in stdout.decode("latin-1").split("\n"): for line in stdout.decode("latin-1").split("\n"):
parts = line.strip().split(" ") parts = line.strip().split(" ")
if len(parts) < 2: if len(parts) < 2:
@ -79,6 +80,9 @@ class avconv(devedeng.avbase.avbase):
if (codec == "h264") or (codec == "H264"): if (codec == "h264") or (codec == "H264"):
h264 = True h264 = True
continue continue
if (codec == "hevc") or (codec == "HEVC"):
hevc = True
continue
if (codec == "mpeg4"): if (codec == "mpeg4"):
divx = True divx = True
continue continue
@ -94,6 +98,8 @@ class avconv(devedeng.avbase.avbase):
devedeng.avconv.avconv.disc_types.append("divx") devedeng.avconv.avconv.disc_types.append("divx")
if (h264 and mp3): if (h264 and mp3):
devedeng.avconv.avconv.disc_types.append("mkv") devedeng.avconv.avconv.disc_types.append("mkv")
if (hevc and mp3):
devedeng.ffmpeg.ffmpeg.disc_types.append("hevc")
return True return True
else: else:
@ -249,9 +255,9 @@ class avconv(devedeng.avbase.avbase):
if minrate < (devedeng.project.devede_project.divx_min_bps * 1000): if minrate < (devedeng.project.devede_project.divx_min_bps * 1000):
minrate = devedeng.project.devede_project.divx_min_bps * 1000 minrate = devedeng.project.devede_project.divx_min_bps * 1000
self.command_var.append(str(minrate)) 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("-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("-acodec")
self.command_var.append("libmp3lame") self.command_var.append("libmp3lame")
self.command_var.append("-f") self.command_var.append("-f")
@ -423,11 +429,11 @@ class avconv(devedeng.avbase.avbase):
else: else:
keyintv = 15 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("-g")
self.command_var.append(str(keyintv)) 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("-g")
self.command_var.append("300") self.command_var.append("300")
elif file_project.gop12 and (not file_project.no_reencode_audio_video): 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(str(video_length))
self.command_var.append("-ac") 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") self.command_var.append("6")
else: else:
self.command_var.append("2") self.command_var.append("2")

View file

@ -42,6 +42,7 @@ class choose_disc_type(GObject.GObject):
svcd = True svcd = True
divx = True divx = True
mkv = True mkv = True
hevc = True
analizers, players, converters, menuers, burners, mkiso = self.cv.get_needed_programs() analizers, players, converters, menuers, burners, mkiso = self.cv.get_needed_programs()
if (analizers is not None) or (converters is not None): if (analizers is not None) or (converters is not None):
@ -51,6 +52,7 @@ class choose_disc_type(GObject.GObject):
svcd = False svcd = False
divx = False divx = False
mkv = False mkv = False
hevc = False
if menuers is not None: if menuers is not None:
dvd = False dvd = False
@ -82,6 +84,8 @@ class choose_disc_type(GObject.GObject):
divx = False divx = False
if self.cv.discs.count("mkv") == 0: if self.cv.discs.count("mkv") == 0:
mkv = False mkv = False
if self.cv.discs.count("hevc") == 0:
hevc = False
builder.get_object("button_dvd").set_sensitive(dvd) builder.get_object("button_dvd").set_sensitive(dvd)
builder.get_object("button_vcd").set_sensitive(vcd) 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_cvd").set_sensitive(cvd)
builder.get_object("button_divx").set_sensitive(divx) builder.get_object("button_divx").set_sensitive(divx)
builder.get_object("button_mkv").set_sensitive(mkv) builder.get_object("button_mkv").set_sensitive(mkv)
builder.get_object("button_hevc").set_sensitive(hevc)
self.wask_window.show_all() self.wask_window.show_all()
@ -133,6 +138,10 @@ class choose_disc_type(GObject.GObject):
self.set_type("mkv") self.set_type("mkv")
def on_button_hevc_clicked(self, b):
self.set_type("hevc")
def on_help_clicked(self, b): def on_help_clicked(self, b):
help_file = devedeng.help.help("select.html") help_file = devedeng.help.help("select.html")

View file

@ -49,6 +49,7 @@ class ffmpeg(devedeng.executor.executor):
mpeg2 = False mpeg2 = False
divx = False divx = False
h264 = False h264 = False
hevc = False
for line in stdout.decode("latin-1").split("\n"): for line in stdout.decode("latin-1").split("\n"):
parts = line.strip().split(" ") parts = line.strip().split(" ")
if len(parts) < 2: if len(parts) < 2:
@ -79,6 +80,9 @@ class ffmpeg(devedeng.executor.executor):
if (codec == "h264") or (codec == "H264"): if (codec == "h264") or (codec == "H264"):
h264 = True h264 = True
continue continue
if (codec == "hevc") or (codec == "HEVC"):
hevc = True
continue
if (codec == "mpeg4"): if (codec == "mpeg4"):
divx = True divx = True
continue continue
@ -94,6 +98,8 @@ class ffmpeg(devedeng.executor.executor):
devedeng.ffmpeg.ffmpeg.disc_types.append("divx") devedeng.ffmpeg.ffmpeg.disc_types.append("divx")
if (h264 and mp3): if (h264 and mp3):
devedeng.ffmpeg.ffmpeg.disc_types.append("mkv") devedeng.ffmpeg.ffmpeg.disc_types.append("mkv")
if (hevc and mp3):
devedeng.ffmpeg.ffmpeg.disc_types.append("hevc")
return True return True
else: else:
@ -244,9 +250,9 @@ class ffmpeg(devedeng.executor.executor):
if minrate < (devedeng.project.devede_project.divx_min_bps * 1000): if minrate < (devedeng.project.devede_project.divx_min_bps * 1000):
minrate = devedeng.project.devede_project.divx_min_bps * 1000 minrate = devedeng.project.devede_project.divx_min_bps * 1000
self.command_var.append(str(minrate)) 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("-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("-acodec")
self.command_var.append("libmp3lame") self.command_var.append("libmp3lame")
self.command_var.append("-f") self.command_var.append("-f")
@ -418,11 +424,11 @@ class ffmpeg(devedeng.executor.executor):
else: else:
keyintv = 15 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("-g")
self.command_var.append(str(keyintv)) 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("-g")
self.command_var.append("300") self.command_var.append("300")
elif file_project.gop12 and (not file_project.no_reencode_audio_video): 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(str(video_length))
self.command_var.append("-ac") 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") self.command_var.append("6")
else: else:
self.command_var.append("2") 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("copy_sound", False)
self.add_toggle("is_mpeg_ps", False) self.add_toggle("is_mpeg_ps", False)
self.add_toggle("no_reencode_audio_video", 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) self.add_toggle("gop12", False)
else: else:
self.add_toggle("gop12", True) self.add_toggle("gop12", True)
@ -259,7 +259,7 @@ class file_movie(devedeng.interface_manager.interface_manager):
def set_final_rates(self): 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 self.audio_rate_auto = 192
elif (self.disc_type == "vcd") or (self.disc_type == "svcd") or (self.disc_type == "cvd"): elif (self.disc_type == "vcd") or (self.disc_type == "svcd") or (self.disc_type == "cvd"):
self.audio_rate_auto = 224 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, # for divx or matroska, if the size and the aspect ratio is automatic,
# just don't change them # 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_midle = self.original_width
self.width_final = self.original_width self.width_final = self.original_width
self.height_midle = self.original_height 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( self.wframe_division_chapters = self.builder.get_object(
"frame_division_chapters") "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) self.waudio_rate.set_upper(448.0)
else: else:
self.waudio_rate.set_upper(384.0) self.waudio_rate.set_upper(384.0)
@ -555,7 +555,7 @@ class file_movie(devedeng.interface_manager.interface_manager):
self.wcopy_sound.hide() self.wcopy_sound.hide()
self.wnotebook.remove_page(5) self.wnotebook.remove_page(5)
self.wnotebook.remove_page(1) 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.wshow_in_menu.hide()
self.wframe_division_chapters.hide() self.wframe_division_chapters.hide()
self.wnotebook.remove_page(5) self.wnotebook.remove_page(5)

View file

@ -140,7 +140,7 @@ class devede_project:
self.set_interface_status(None) self.set_interface_status(None)
# Set the default disc size # 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 self.wdisc_size.set_active(1) # 4.7 GB DVD
else: else:
self.wdisc_size.set_active(3) # 700 MB CD 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() max_bps_base = devede_project.divx_max_bps_base.copy()
min_bps = devede_project.divx_min_bps min_bps = devede_project.divx_min_bps
max_total = devede_project.divx_max_total 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() max_bps_base = devede_project.mkv_max_bps_base.copy()
min_bps = devede_project.mkv_min_bps min_bps = devede_project.mkv_min_bps
max_total = devede_project.mkv_max_total max_total = devede_project.mkv_max_total
@ -468,7 +468,7 @@ class devede_project:
elif (self.disc_type == "dvd"): elif (self.disc_type == "dvd"):
minvrate = 400 minvrate = 400
maxvrate = 8500 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 minvrate = 300
maxvrate = 6000 maxvrate = 6000
else: else:
@ -551,7 +551,7 @@ class devede_project:
counter = 0 counter = 0
if self.disc_type == "divx": if self.disc_type == "divx":
extension = "avi" extension = "avi"
elif self.disc_type == "mkv": elif (self.disc_type == "mkv") or (self.disc_type == "hevc"):
extension = "mkv" extension = "mkv"
else: else:
extension = "mpg" extension = "mpg"