aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-05-23 16:10:09 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-05-23 16:12:33 +0530
commitd9473db78ad4c002de53f4cc7c9b045399f8ab72 (patch)
tree6a5a2d73f9157fc39a9e710c7cc3cb8b25a59320
parent11233f2afdfc55d3672a7c17ad919a3f70005c19 (diff)
downloadhypervideo-pre-d9473db78ad4c002de53f4cc7c9b045399f8ab72.tar.lz
hypervideo-pre-d9473db78ad4c002de53f4cc7c9b045399f8ab72.tar.xz
hypervideo-pre-d9473db78ad4c002de53f4cc7c9b045399f8ab72.zip
[ModifyChapters] Fix repeated removal of small segments
Closes #3846
-rw-r--r--yt_dlp/postprocessor/ffmpeg.py4
-rw-r--r--yt_dlp/postprocessor/modify_chapters.py4
2 files changed, 4 insertions, 4 deletions
diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py
index cb33c3582..5a1d8561f 100644
--- a/yt_dlp/postprocessor/ffmpeg.py
+++ b/yt_dlp/postprocessor/ffmpeg.py
@@ -284,12 +284,12 @@ class FFmpegPostProcessor(PostProcessor):
if fatal:
raise PostProcessingError(f'Unable to determine video duration: {e.msg}')
- def _duration_mismatch(self, d1, d2):
+ def _duration_mismatch(self, d1, d2, tolerance=2):
if not d1 or not d2:
return None
# The duration is often only known to nearest second. So there can be <1sec disparity natually.
# Further excuse an additional <1sec difference.
- return abs(d1 - d2) > 2
+ return abs(d1 - d2) > tolerance
def run_ffmpeg_multiple_files(self, input_paths, out_path, opts, **kwargs):
return self.real_run_ffmpeg(
diff --git a/yt_dlp/postprocessor/modify_chapters.py b/yt_dlp/postprocessor/modify_chapters.py
index 8a2ef9065..de3505e11 100644
--- a/yt_dlp/postprocessor/modify_chapters.py
+++ b/yt_dlp/postprocessor/modify_chapters.py
@@ -32,13 +32,13 @@ class ModifyChaptersPP(FFmpegPostProcessor):
real_duration = self._get_real_video_duration(info['filepath'])
if not chapters:
- chapters = [{'start_time': 0, 'end_time': real_duration, 'title': info['title']}]
+ chapters = [{'start_time': 0, 'end_time': info.get('duration') or real_duration, 'title': info['title']}]
info['chapters'], cuts = self._remove_marked_arrange_sponsors(chapters + sponsor_chapters)
if not cuts:
return [], info
- if self._duration_mismatch(real_duration, info.get('duration')):
+ if self._duration_mismatch(real_duration, info.get('duration'), 1):
if not self._duration_mismatch(real_duration, info['chapters'][-1]['end_time']):
self.to_screen(f'Skipping {self.pp_key()} since the video appears to be already cut')
return [], info