From 9bd2020476c325df351c8e706d4b55894f916089 Mon Sep 17 00:00:00 2001 From: pukkandan Date: Fri, 26 Feb 2021 21:51:31 +0530 Subject: [PATCH] [hls] Enable `--hls-use-mpegts` by default when downloading live-streams * Also added option `--no-hls-use-mpegts` to disable this Related: #96 --- README.md | 13 +++++++++---- yt_dlp/downloader/external.py | 5 ++++- yt_dlp/options.py | 14 +++++++++++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d40fc536c..2d40b6a9a 100644 --- a/README.md +++ b/README.md @@ -317,10 +317,15 @@ ## Download Options: ffmpeg --hls-prefer-ffmpeg Use ffmpeg instead of the native HLS downloader - --hls-use-mpegts Use the mpegts container for HLS videos, - allowing to play the video while - downloading (some players may not be able - to play it) + --hls-use-mpegts Use the mpegts container for HLS videos; + allowing some players to play the video + while downloading, and reducing the chance + of file corruption if download is + interrupted. This is enabled by default for + live streams + --no-hls-use-mpegts Do not use the mpegts container for HLS + videos. This is default when not + downloading live streams --external-downloader NAME Use the specified external downloader. Currently supports aria2c, avconv, axel, curl, ffmpeg, httpie, wget diff --git a/yt_dlp/downloader/external.py b/yt_dlp/downloader/external.py index 4bef3bf52..5d9639076 100644 --- a/yt_dlp/downloader/external.py +++ b/yt_dlp/downloader/external.py @@ -398,7 +398,10 @@ def _call_downloader(self, tmpfilename, info_dict): args += ['-fs', compat_str(self._TEST_FILE_SIZE)] if protocol in ('m3u8', 'm3u8_native'): - if self.params.get('hls_use_mpegts', False) or tmpfilename == '-': + use_mpegts = (tmpfilename == '-') or self.params.get('hls_use_mpegts') + if use_mpegts is None: + use_mpegts = info_dict.get('is_live') + if use_mpegts: args += ['-f', 'mpegts'] else: args += ['-f', 'mp4'] diff --git a/yt_dlp/options.py b/yt_dlp/options.py index c47f6ea50..88f74ff36 100644 --- a/yt_dlp/options.py +++ b/yt_dlp/options.py @@ -634,10 +634,18 @@ def _dict_from_multiple_values_options_callback( help='Use ffmpeg instead of the native HLS downloader') downloader.add_option( '--hls-use-mpegts', - dest='hls_use_mpegts', action='store_true', + dest='hls_use_mpegts', action='store_true', default=None, help=( - 'Use the mpegts container for HLS videos, allowing to play the ' - 'video while downloading (some players may not be able to play it)')) + 'Use the mpegts container for HLS videos; ' + 'allowing some players to play the video while downloading, ' + 'and reducing the chance of file corruption if download is interrupted. ' + 'This is enabled by default for live streams')) + downloader.add_option( + '--no-hls-use-mpegts', + dest='hls_use_mpegts', action='store_false', + help=( + 'Do not use the mpegts container for HLS videos. ' + 'This is default when not downloading live streams')) downloader.add_option( '--external-downloader', dest='external_downloader', metavar='NAME',