2222import itertools
2323from concurrent .futures import ThreadPoolExecutor
2424import os
25+ import pathlib
2526import shutil
2627
2728from av1transcoder .argument_parser import Namespace
@@ -63,6 +64,10 @@ def _add_common_encoder_options(self, arguments: Namespace):
6364 # Add the custom encoder parameters, filtering out empty elements
6465 self .command_line += [param for param in arguments .encoder_parameters .split (" " ) if param ]
6566
67+ @property
68+ def two_pass_log_file_prefix (self ) -> pathlib .Path :
69+ return self .completed_dir / f"scene_{ self .scene .scene_number } "
70+
6671
6772class AV1LibAomSinglePassEncoderCommandLine (AbstractEncoderCommandLine ):
6873 """
@@ -117,7 +122,7 @@ def _add_command_line_arguments(self, arguments: Namespace):
117122 self .command_line += [
118123 "-pass" , "1" ,
119124 # TODO: Verify that this works with arbitrary paths
120- "-passlogfile" , str (self .in_progress_dir / f"scene_ { self . scene . scene_number } " ),
125+ "-passlogfile" , str (self .two_pass_log_file_prefix ),
121126 "-f" , "matroska" ,
122127 os .devnull
123128 ]
@@ -154,7 +159,7 @@ def _add_command_line_arguments(self, arguments: Namespace):
154159 self .command_line += [
155160 "-pass" , "2" ,
156161 # TODO: Verify that this works with arbitrary paths
157- "-passlogfile" , str (self .in_progress_dir / f"scene_ { self . scene . scene_number } " ),
162+ "-passlogfile" , str (self .two_pass_log_file_prefix ),
158163 str (self .in_progress_dir / scene_name )
159164 ]
160165 command_line_str = f"[{ ', ' .join (self .command_line )} ]"
@@ -203,6 +208,7 @@ def _transcode_two_pass(arguments: Namespace, input_file: InputFile, scene: Scen
203208 if pass1 .handle_directory_creation ():
204209 logger .debug (f'Starting first pass for file "{ input_file .input_file } ".' )
205210 pass1 .run ()
211+ _move_first_pass_log_to_finished_directory (pass1 )
206212 pass2 = AV1LibAomTwoPass2EncoderCommandLine (arguments , input_file , scene )
207213 if pass2 .handle_directory_creation () and pass1 .finished :
208214 logger .debug (f'Starting second pass for file "{ input_file .input_file } ".' )
@@ -214,7 +220,19 @@ def _move_scene_to_finished_directory(cli: AbstractEncoderCommandLine):
214220 if cli .finished and cli .dump_mode != "only" :
215221 encoded_scene = cli .in_progress_dir / f"scene_{ cli .scene .scene_number } .mkv"
216222 shutil .move (str (encoded_scene ), str (cli .completed_dir ))
217- logger .debug (f'Encoded scene "{ encoded_scene } " finished. Moved to the completed directory "{ cli .completed_dir } "' )
223+ logger .debug (f'Encoded scene "{ encoded_scene } " finished. '
224+ f'Moved to the completed directory "{ cli .completed_dir } "' )
225+
226+
227+ def _move_first_pass_log_to_finished_directory (cli : AV1LibAomTwoPass1EncoderCommandLine ):
228+ if cli .finished and cli .dump_mode != "only" :
229+ # May have produced multiple logs, if the file contains multiple video tracks.
230+ logs = cli .in_progress_dir .glob (f"{ cli .two_pass_log_file_prefix .name } *.log" )
231+
232+ for log_file in logs :
233+ shutil .move (str (log_file ), cli .completed_dir )
234+ logger .debug (f'Moved { len (logs )} log file{ "s" if len (logs ) >= 1 else "" } '
235+ f'for scene { cli .scene .scene_number } to the completed directory "{ cli .completed_dir } ".' )
218236
219237
220238def _cleanup (arguments : Namespace , input_file : InputFile ):
0 commit comments