1
0
mirror of https://github.com/l1ving/youtube-dl synced 2025-01-24 04:53:06 +08:00

Revise per @dstftw:

1. Option name should explicitly reflect a dependency on ffmpeg in its name.
2. Description should explicitly emphasize it will only work with ffmpeg downloader.
3. -O should be removed.
4. It should be ignored completely when ffmpeg is not used as external downloader.

So therefore

Various:
. outputformat -> ffmpeg_format (and --ffmpeg-format cmdline)
YoutubeDL.py:
. xxx: prepare_filename() is run before we know the downloader. How do we address this?
downloader/external.py:
. Use temp. var force_mpegts to avoid code duplication
. Don't add -bsf:a if force_mpegts is True (oops! error from last rev)
. re-indent complex if
This commit is contained in:
John Hawkinson 2017-11-15 00:17:47 -05:00
parent a906d47bd2
commit a4e49f14ef
5 changed files with 23 additions and 20 deletions

View File

@ -253,7 +253,6 @@ class YoutubeDL(object):
Progress hooks are guaranteed to be called at least once Progress hooks are guaranteed to be called at least once
(with status "finished") if the download is successful. (with status "finished") if the download is successful.
merge_output_format: Extension to use when merging formats. merge_output_format: Extension to use when merging formats.
outputformat: Extension and format to use when using an external downloader
fixup: Automatically correct known faults of the file. fixup: Automatically correct known faults of the file.
One of: One of:
- "never": do nothing - "never": do nothing
@ -299,7 +298,7 @@ class YoutubeDL(object):
the downloader (see youtube_dl/downloader/common.py): the downloader (see youtube_dl/downloader/common.py):
nopart, updatetime, buffersize, ratelimit, min_filesize, max_filesize, test, nopart, updatetime, buffersize, ratelimit, min_filesize, max_filesize, test,
noresizebuffer, retries, continuedl, noprogress, consoletitle, noresizebuffer, retries, continuedl, noprogress, consoletitle,
xattr_set_filesize, external_downloader_args, hls_use_mpegts. xattr_set_filesize, external_downloader_args, hls_use_mpegts, ffmpeg_format.
The following options are used by the post processors: The following options are used by the post processors:
prefer_ffmpeg: If True, use ffmpeg instead of avconv if both are available, prefer_ffmpeg: If True, use ffmpeg instead of avconv if both are available,
@ -636,8 +635,9 @@ class YoutubeDL(object):
template_dict['resolution'] = '%sp' % template_dict['height'] template_dict['resolution'] = '%sp' % template_dict['height']
elif template_dict.get('width'): elif template_dict.get('width'):
template_dict['resolution'] = '%dx?' % template_dict['width'] template_dict['resolution'] = '%dx?' % template_dict['width']
if self.params.get('outputformat'): # xxx: this can effect non-ffmpeg downloaders
template_dict['ext'] = self.params.get('outputformat') if self.params.get('ffmpeg_format'):
template_dict['ext'] = self.params.get('ffmpeg_format')
sanitize = lambda k, v: sanitize_filename( sanitize = lambda k, v: sanitize_filename(
compat_str(v), compat_str(v),
@ -1867,8 +1867,9 @@ class YoutubeDL(object):
if filename_real_ext == info_dict['ext'] if filename_real_ext == info_dict['ext']
else filename) else filename)
requested_formats = info_dict['requested_formats'] requested_formats = info_dict['requested_formats']
if self.params.get('outputformat'): # xxx: this can effect non-ffmpeg downloaders
info_dict['ext'] = self.params.get('outputformat') if self.params.get('ffmpeg_format'):
info_dict['ext'] = self.params.get('ffmpeg_format')
if self.params.get('merge_output_format') is None and not compatible_formats(requested_formats): if self.params.get('merge_output_format') is None and not compatible_formats(requested_formats):
info_dict['ext'] = 'mkv' info_dict['ext'] = 'mkv'
self.report_warning( self.report_warning(

View File

@ -417,7 +417,7 @@ def _real_main(argv=None):
'ffmpeg_location': opts.ffmpeg_location, 'ffmpeg_location': opts.ffmpeg_location,
'hls_prefer_native': opts.hls_prefer_native, 'hls_prefer_native': opts.hls_prefer_native,
'hls_use_mpegts': opts.hls_use_mpegts, 'hls_use_mpegts': opts.hls_use_mpegts,
'outputformat': opts.outputformat, 'ffmpeg_format': opts.ffmpeg_format,
'external_downloader_args': external_downloader_args, 'external_downloader_args': external_downloader_args,
'postprocessor_args': postprocessor_args, 'postprocessor_args': postprocessor_args,
'cn_verification_proxy': opts.cn_verification_proxy, 'cn_verification_proxy': opts.cn_verification_proxy,

View File

@ -49,7 +49,7 @@ class FileDownloader(object):
external_downloader_args: A list of additional command-line arguments for the external_downloader_args: A list of additional command-line arguments for the
external downloader. external downloader.
hls_use_mpegts: Use the mpegts container for HLS videos. hls_use_mpegts: Use the mpegts container for HLS videos.
outputformat: Output format for downloader to use ffmpeg_format: Output format for the ffmpeg downloader to use
Subclasses of this one must re-define the real_download method. Subclasses of this one must re-define the real_download method.
""" """

View File

@ -292,11 +292,12 @@ class FFmpegFD(ExternalFD):
if self.params.get('test', False): if self.params.get('test', False):
args += ['-fs', compat_str(self._TEST_FILE_SIZE)] args += ['-fs', compat_str(self._TEST_FILE_SIZE)]
if self.params.get('outputformat'): force_mpegts = self.params.get('hls_use_mpegts', False) or tmpfilename == '-'
args += ['-f', EXT_TO_OUT_FORMATS.get(self.params.get('outputformat'), if self.params.get('ffmpeg_format'):
self.params.get('outputformat'))] args += ['-f', EXT_TO_OUT_FORMATS.get(self.params.get('ffmpeg_format'),
self.params.get('ffmpeg_format'))]
elif protocol in ('m3u8', 'm3u8_native'): elif protocol in ('m3u8', 'm3u8_native'):
if self.params.get('hls_use_mpegts', False) or tmpfilename == '-': if force_mpegts:
args += ['-f', 'mpegts'] args += ['-f', 'mpegts']
else: else:
args += ['-f', 'mp4'] args += ['-f', 'mp4']
@ -306,11 +307,12 @@ class FFmpegFD(ExternalFD):
args += ['-f', EXT_TO_OUT_FORMATS.get(info_dict['ext'], info_dict['ext'])] args += ['-f', EXT_TO_OUT_FORMATS.get(info_dict['ext'], info_dict['ext'])]
if (protocol in ('m3u8', 'm3u8_native') and if (protocol in ('m3u8', 'm3u8_native') and
(ffpp.basename == 'ffmpeg' and not force_mpegts and
is_outdated_version(ffpp._versions['ffmpeg'], '3.2', False)) and (ffpp.basename == 'ffmpeg' and
(not info_dict.get('acodec') or is_outdated_version(ffpp._versions['ffmpeg'], '3.2', False)) and
info_dict['acodec'].split('.')[0] in ('aac', 'mp4a'))): (not info_dict.get('acodec') or
args += ['-bsf:a', 'aac_adtstoasc'] info_dict['acodec'].split('.')[0] in ('aac', 'mp4a'))):
args += ['-bsf:a', 'aac_adtstoasc']
args = [encodeArgument(opt) for opt in args] args = [encodeArgument(opt) for opt in args]
args.append(encodeFilename(ffpp._ffmpeg_filename_argument(tmpfilename), True)) args.append(encodeFilename(ffpp._ffmpeg_filename_argument(tmpfilename), True))

View File

@ -517,9 +517,9 @@ def parseOpts(overrideArguments=None):
dest='external_downloader_args', metavar='ARGS', dest='external_downloader_args', metavar='ARGS',
help='Give these arguments to the external downloader') help='Give these arguments to the external downloader')
downloader.add_option( downloader.add_option(
'-O', '--output-format', '--ffmpeg-format',
metavar='FORMAT', dest='outputformat', default='', metavar='FORMAT', dest='ffmpeg_format', default='',
help='Ask the downloader to encode the specified video format') help='Ask the ffmpeg downloader to encode the specified video format')
workarounds = optparse.OptionGroup(parser, 'Workarounds') workarounds = optparse.OptionGroup(parser, 'Workarounds')
workarounds.add_option( workarounds.add_option(