Allows to automatically adjust the video rate to ensure that the movies fit in the specified disc format
This commit is contained in:
parent
f495d9a756
commit
4cc1bee474
2 changed files with 67 additions and 18 deletions
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
@ -305,9 +330,9 @@ class devede_project:
|
||||||
minvrate = 0
|
minvrate = 0
|
||||||
maxvrate = 8000
|
maxvrate = 8000
|
||||||
|
|
||||||
size*=0.90 # a safe margin of 10% to ensure that it never will be bigger
|
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
|
# (it's important to have in mind the space needed by disk structures like
|
||||||
# directories, file entries, and so on)
|
# directories, file entries, and so on)
|
||||||
|
|
||||||
return size,minvrate,maxvrate
|
return size,minvrate,maxvrate
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue