diff --git a/youtube_dl/PostProcessor.py b/youtube_dl/PostProcessor.py index 75b4f2cb5..3bc4e7998 100644 --- a/youtube_dl/PostProcessor.py +++ b/youtube_dl/PostProcessor.py @@ -11,6 +11,7 @@ from .utils import ( PostProcessingError, shell_quote, subtitles_filename, + build_part_filename, ) @@ -518,7 +519,7 @@ class FFmpegJoinVideosPP(FFmpegPostProcessor): parts = information.get('parts') if parts is None or len(parts) == 1: return (True, information) - parts_files = [u'%s.%s' % (filename, i) for (i, _) in enumerate(parts)] + parts_files = [build_part_filename(filename, i) for (i, _) in enumerate(parts)] files_file = u'%s.videos' % filename with io.open(encodeFilename(files_file), 'w', encoding='utf-8') as f: for video in parts_files: @@ -527,7 +528,7 @@ class FFmpegJoinVideosPP(FFmpegPostProcessor): try: self.run_ffmpeg(files_file, filename, ['-c', 'copy'], ['-f', 'concat']) except FFmpegPostProcessorError: - return False + return False, information os.remove(encodeFilename(files_file)) # We have to manually remove the parts if requested if not self._downloader.params.get('keepvideo', False): diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 0500bb146..79a21af7f 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -43,6 +43,7 @@ from .utils import ( SameFileError, sanitize_filename, subtitles_filename, + build_part_filename, takewhile_inclusive, UnavailableVideoError, write_json_file, @@ -790,7 +791,7 @@ class YoutubeDL(object): for (i, part) in enumerate(parts): part_info = dict(info_dict) part_info.update(part) - part_filename = u'%s.%s' % (filename, i) + part_filename = build_part_filename(filename, i) parts_success.append(self.fd._do_download(part_filename, part_info)) success = all(parts_success) except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 946e90e93..c94d1519f 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -775,6 +775,10 @@ def determine_ext(url, default_ext=u'unknown_video'): def subtitles_filename(filename, sub_lang, sub_format): return filename.rsplit('.', 1)[0] + u'.' + sub_lang + u'.' + sub_format +def build_part_filename(final_filename, part_index): + (name, ext) = os.path.splitext(final_filename) + return '%s.%d%s' % (name, part_index, ext) + def date_from_str(date_str): """ Return a datetime object from a string in the format YYYYMMDD or