Allows to automatically adjust the video rate to ensure that the movies fit in the specified disc format

This commit is contained in:
Sergio Costas 2014-08-03 19:29:41 +02:00
parent f495d9a756
commit 4cc1bee474
2 changed files with 67 additions and 18 deletions

View file

@ -80,6 +80,7 @@ class file_movie(devede.interface_manager.interface_manager):
self.add_integer_adjustment("video_rate", 1152) self.add_integer_adjustment("video_rate", 1152)
else: else:
self.add_integer_adjustment("video_rate", 2000) self.add_integer_adjustment("video_rate", 2000)
self.add_integer_adjustment("audio_rate", 224) self.add_integer_adjustment("audio_rate", 224)
self.add_integer_adjustment("subt_font_size", 28) self.add_integer_adjustment("subt_font_size", 28)
self.add_float_adjustment("audio_delay", 0.0) self.add_float_adjustment("audio_delay", 0.0)
@ -158,27 +159,34 @@ class file_movie(devede.interface_manager.interface_manager):
if self.is_mpeg_ps: if self.is_mpeg_ps:
estimated_size = self.original_file_size / 1000 estimated_size = self.original_file_size / 1000
#fixed_size = True
#sub_rate = 0
else: else:
#fixed_size = False
# let's asume 8kbps for each subtitle # let's asume 8kbps for each subtitle
sub_rate = 8 * len(self.subtitles_list) sub_rate = 8 * len(self.subtitles_list)
estimated_size = ((self.video_rate_final + self.audio_rate_final + sub_rate) * self.original_length) / 8 estimated_size = ((self.video_rate_final + self.audio_rate_final + sub_rate) * self.original_length) / 8
#fixed_video = 0
#fixed_audio = 0
# if self.no_reencode_audio_video:
# fixed_video = self.original_videorate
# fixed_audio = self.original_audiorate
#
# if self.copy_sound:
# fixed_audio = self.original_audiorate
return estimated_size return estimated_size
def get_size_data(self):
estimated_size = self.get_estimated_size()
if self.is_mpeg_ps or self.no_reencode_audio_video:
videorate_fixed_size = True
else:
videorate_fixed_size = False
# let's asume 8kbps for each subtitle
sub_rate = 8 * len(self.subtitles_list)
return estimated_size, videorate_fixed_size, self.audio_rate_final, sub_rate, self.width_final, self.height_final, self.original_length
def set_auto_video_rate(self, new_video_rate):
self.video_rate_auto = new_video_rate
def get_max_resolution(self,rx,ry,aspect): def get_max_resolution(self,rx,ry,aspect):
tmpx = ry*aspect tmpx = ry*aspect
@ -191,6 +199,16 @@ class file_movie(devede.interface_manager.interface_manager):
def set_final_rates(self): def set_final_rates(self):
if (self.disc_type == "divx") or (self.disc_type == "mkv"):
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
else: # dvd
if self.sound5_1:
self.audio_rate_auto = 384
else:
self.audio_rate_auto = 224
if self.is_mpeg_ps or self.no_reencode_audio_video: if self.is_mpeg_ps or self.no_reencode_audio_video:
self.video_rate_final = self.original_videorate self.video_rate_final = self.original_videorate
self.audio_rate_final = self.original_audiorate self.audio_rate_final = self.original_audiorate
@ -276,9 +294,9 @@ class file_movie(devede.interface_manager.interface_manager):
elif self.disc_type == "cvd": elif self.disc_type == "cvd":
self.width_final =352 self.width_final =352
if (self.format_pal): if (self.format_pal):
self.height_final = 288 self.height_final = 576
else: else:
self.height_final = 240 self.height_final = 480
elif self.disc_type == "dvd": elif self.disc_type == "dvd":
if aspect_wide: if aspect_wide:
self.width_final = 720 self.width_final = 720
@ -372,8 +390,14 @@ class file_movie(devede.interface_manager.interface_manager):
# elements in page GENERAL # elements in page GENERAL
self.wframe_video_rate = self.builder.get_object("frame_video_rate") self.wframe_video_rate = self.builder.get_object("frame_video_rate")
self.wframe_audio_rate = self.builder.get_object("frame_audio_rate") self.wframe_audio_rate = self.builder.get_object("frame_audio_rate")
self.waudio_rate = self.builder.get_object("audio_rate")
self.wframe_division_chapters = self.builder.get_object("frame_division_chapters") 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"):
self.waudio_rate.set_upper(448.0)
else:
self.waudio_rate.set_upper(384.0)
# elements in page SUBTITLES # elements in page SUBTITLES
self.wsubtitles_list = self.builder.get_object("subtitles_list") self.wsubtitles_list = self.builder.get_object("subtitles_list")
self.wtreview_subtitles = self.builder.get_object("treeview_subtitles") self.wtreview_subtitles = self.builder.get_object("treeview_subtitles")

View file

@ -260,7 +260,32 @@ class devede_project:
def on_adjust_disc_usage_clicked(self,b): def on_adjust_disc_usage_clicked(self,b):
pass total_resolution = 0
fixed_size = 0
to_adjust = []
for f in self.get_all_files():
estimated_size, videorate_fixed_size, audio_rate, sub_rate, width, height, time_length = f.get_size_data()
if videorate_fixed_size:
fixed_size += estimated_size
else:
fixed_size += ((audio_rate + sub_rate) * time_length) / 8
# 76800 = 320x240, which is the smallest resolution
surface = ((width * height) / 76800.0) * time_length
to_adjust.append( (f, surface, time_length) )
total_resolution += surface
if (self.disc_type == "dvd") and (self.wcreate_menu.get_active()):
fixed_size += self.menu.get_estimated_size()
if (total_resolution != 0):
remaining_disc_size = ((1000 * self.get_dvd_size()[0]) - fixed_size) * 8 # in kbits
for l in to_adjust:
f = l[0]
surface = l[1]
length = l[2]
f.set_auto_video_rate((remaining_disc_size * surface) / (total_resolution * length))
self.refresh_disc_usage()
def on_menu_options_clicked(self,b): def on_menu_options_clicked(self,b):