diff --git a/src/devede/file_movie.py b/src/devede/file_movie.py index 4aaadc1..f0cc74d 100644 --- a/src/devede/file_movie.py +++ b/src/devede/file_movie.py @@ -80,6 +80,7 @@ class file_movie(devede.interface_manager.interface_manager): self.add_integer_adjustment("video_rate", 1152) else: self.add_integer_adjustment("video_rate", 2000) + self.add_integer_adjustment("audio_rate", 224) self.add_integer_adjustment("subt_font_size", 28) 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: estimated_size = self.original_file_size / 1000 - #fixed_size = True - #sub_rate = 0 else: - #fixed_size = False # let's asume 8kbps for each subtitle sub_rate = 8 * len(self.subtitles_list) 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 + 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): tmpx = ry*aspect @@ -191,6 +199,16 @@ class file_movie(devede.interface_manager.interface_manager): 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: self.video_rate_final = self.original_videorate self.audio_rate_final = self.original_audiorate @@ -276,9 +294,9 @@ class file_movie(devede.interface_manager.interface_manager): elif self.disc_type == "cvd": self.width_final =352 if (self.format_pal): - self.height_final = 288 + self.height_final = 576 else: - self.height_final = 240 + self.height_final = 480 elif self.disc_type == "dvd": if aspect_wide: self.width_final = 720 @@ -372,8 +390,14 @@ class file_movie(devede.interface_manager.interface_manager): # elements in page GENERAL self.wframe_video_rate = self.builder.get_object("frame_video_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") + 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 self.wsubtitles_list = self.builder.get_object("subtitles_list") self.wtreview_subtitles = self.builder.get_object("treeview_subtitles") diff --git a/src/devede/project.py b/src/devede/project.py index 87e3f74..b92b096 100644 --- a/src/devede/project.py +++ b/src/devede/project.py @@ -260,7 +260,32 @@ class devede_project: 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): @@ -305,9 +330,9 @@ class devede_project: minvrate = 0 maxvrate = 8000 - size*=0.90 # a safe margin of 10% to ensure that it never will be bigger - # (it's important to have in mind the space needed by disk structures like - # directories, file entries, and so on) + size*=0.90 # a safe margin of 10% to ensure that it never will be bigger + # (it's important to have in mind the space needed by disk structures like + # directories, file entries, and so on) return size,minvrate,maxvrate