mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-30 12:01:28 +00:00
[FixupM3u8] Fixup MPEG-TS in MP4 container
Closes #1701, https://github.com/ytdl-org/youtube-dl/issues/26410
This commit is contained in:
parent
909b0d66f4
commit
e04b003e64
|
@ -2934,9 +2934,10 @@ def ffmpeg_fixup(cndn, msg, cls):
|
||||||
downloader = get_suitable_downloader(info_dict, self.params) if 'protocol' in info_dict else None
|
downloader = get_suitable_downloader(info_dict, self.params) if 'protocol' in info_dict else None
|
||||||
downloader = downloader.__name__ if downloader else None
|
downloader = downloader.__name__ if downloader else None
|
||||||
ffmpeg_fixup(info_dict.get('requested_formats') is None and downloader == 'HlsFD',
|
ffmpeg_fixup(info_dict.get('requested_formats') is None and downloader == 'HlsFD',
|
||||||
'malformed AAC bitstream detected', FFmpegFixupM3u8PP)
|
'Possible MPEG-TS in MP4 container or malformed AAC timestamps',
|
||||||
ffmpeg_fixup(downloader == 'WebSocketFragmentFD', 'malformed timestamps detected', FFmpegFixupTimestampPP)
|
FFmpegFixupM3u8PP)
|
||||||
ffmpeg_fixup(downloader == 'WebSocketFragmentFD', 'malformed duration detected', FFmpegFixupDurationPP)
|
ffmpeg_fixup(downloader == 'WebSocketFragmentFD', 'Malformed timestamps detected', FFmpegFixupTimestampPP)
|
||||||
|
ffmpeg_fixup(downloader == 'WebSocketFragmentFD', 'Malformed duration detected', FFmpegFixupDurationPP)
|
||||||
|
|
||||||
fixup()
|
fixup()
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -855,10 +855,21 @@ def run(self, info):
|
||||||
|
|
||||||
|
|
||||||
class FFmpegFixupM3u8PP(FFmpegFixupPostProcessor):
|
class FFmpegFixupM3u8PP(FFmpegFixupPostProcessor):
|
||||||
|
def _needs_fixup(self, info):
|
||||||
|
yield info['ext'] in ('mp4', 'm4a')
|
||||||
|
yield info['protocol'].startswith('m3u8')
|
||||||
|
try:
|
||||||
|
metadata = self.get_metadata_object(info['filepath'])
|
||||||
|
except PostProcessingError as e:
|
||||||
|
self.report_warning(f'Unable to extract metadata: {e.msg}')
|
||||||
|
yield True
|
||||||
|
else:
|
||||||
|
yield traverse_obj(metadata, ('format', 'format_name'), casesense=False) == 'mpegts'
|
||||||
|
|
||||||
@PostProcessor._restrict_to(images=False)
|
@PostProcessor._restrict_to(images=False)
|
||||||
def run(self, info):
|
def run(self, info):
|
||||||
if self.get_audio_codec(info['filepath']) == 'aac':
|
if all(self._needs_fixup(info)):
|
||||||
self._fixup('Fixing malformed AAC bitstream', info['filepath'], [
|
self._fixup('Fixing MPEG-TS in MP4 container', info['filepath'], [
|
||||||
'-c', 'copy', '-map', '0', '-dn', '-f', 'mp4', '-bsf:a', 'aac_adtstoasc'])
|
'-c', 'copy', '-map', '0', '-dn', '-f', 'mp4', '-bsf:a', 'aac_adtstoasc'])
|
||||||
return [], info
|
return [], info
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue