mirror of
https://github.com/l1ving/youtube-dl
synced 2025-01-24 05:13:12 +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:
parent
a906d47bd2
commit
a4e49f14ef
@ -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(
|
||||||
|
@ -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,
|
||||||
|
@ -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.
|
||||||
"""
|
"""
|
||||||
|
@ -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,6 +307,7 @@ 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
|
||||||
|
not force_mpegts and
|
||||||
(ffpp.basename == 'ffmpeg' and
|
(ffpp.basename == 'ffmpeg' and
|
||||||
is_outdated_version(ffpp._versions['ffmpeg'], '3.2', False)) and
|
is_outdated_version(ffpp._versions['ffmpeg'], '3.2', False)) and
|
||||||
(not info_dict.get('acodec') or
|
(not info_dict.get('acodec') or
|
||||||
|
@ -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(
|
||||||
|
Loading…
Reference in New Issue
Block a user