|
|
|
@ -70,6 +70,7 @@ from .extractor import get_info_extractor, gen_extractors
|
|
|
|
|
from .downloader import get_suitable_downloader
|
|
|
|
|
from .downloader.rtmp import rtmpdump_version
|
|
|
|
|
from .postprocessor import (
|
|
|
|
|
FFmpegFixupStretchedPP,
|
|
|
|
|
FFmpegMergerPP,
|
|
|
|
|
FFmpegPostProcessor,
|
|
|
|
|
get_postprocessor,
|
|
|
|
@ -204,6 +205,12 @@ class YoutubeDL(object):
|
|
|
|
|
Progress hooks are guaranteed to be called at least once
|
|
|
|
|
(with status "finished") if the download is successful.
|
|
|
|
|
merge_output_format: Extension to use when merging formats.
|
|
|
|
|
fixup: Automatically correct known faults of the file.
|
|
|
|
|
One of:
|
|
|
|
|
- "never": do nothing
|
|
|
|
|
- "warn": only emit a warning
|
|
|
|
|
- "detect_or_warn": check whether we can do anything
|
|
|
|
|
about it, warn otherwise
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The following parameters are not used by YoutubeDL itself, they are used by
|
|
|
|
@ -924,6 +931,7 @@ class YoutubeDL(object):
|
|
|
|
|
'fps': formats_info[0].get('fps'),
|
|
|
|
|
'vcodec': formats_info[0].get('vcodec'),
|
|
|
|
|
'vbr': formats_info[0].get('vbr'),
|
|
|
|
|
'stretched_ratio': formats_info[0].get('stretched_ratio'),
|
|
|
|
|
'acodec': formats_info[1].get('acodec'),
|
|
|
|
|
'abr': formats_info[1].get('abr'),
|
|
|
|
|
'ext': output_ext,
|
|
|
|
@ -1154,6 +1162,27 @@ class YoutubeDL(object):
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if success:
|
|
|
|
|
# Fixup content
|
|
|
|
|
stretched_ratio = info_dict.get('stretched_ratio')
|
|
|
|
|
if stretched_ratio is not None and stretched_ratio != 1:
|
|
|
|
|
fixup_policy = self.params.get('fixup')
|
|
|
|
|
if fixup_policy is None:
|
|
|
|
|
fixup_policy = 'detect_or_warn'
|
|
|
|
|
if fixup_policy == 'warn':
|
|
|
|
|
self.report_warning('%s: Non-uniform pixel ratio (%s)' % (
|
|
|
|
|
info_dict['id'], stretched_ratio))
|
|
|
|
|
elif fixup_policy == 'detect_or_warn':
|
|
|
|
|
stretched_pp = FFmpegFixupStretchedPP(self)
|
|
|
|
|
if stretched_pp.available:
|
|
|
|
|
info_dict.setdefault('__postprocessors', [])
|
|
|
|
|
info_dict['__postprocessors'].append(stretched_pp)
|
|
|
|
|
else:
|
|
|
|
|
self.report_warning(
|
|
|
|
|
'%s: Non-uniform pixel ratio (%s). Install ffmpeg or avconv to fix this automatically.' % (
|
|
|
|
|
info_dict['id'], stretched_ratio))
|
|
|
|
|
else:
|
|
|
|
|
assert fixup_policy == 'ignore'
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
self.post_process(filename, info_dict)
|
|
|
|
|
except (PostProcessingError) as err:
|
|
|
|
|