aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-07-30 23:47:14 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-07-31 02:20:12 +0530
commit6a7d3a0a0981d05903e70bcb31fc3f9438eedf22 (patch)
tree2ec5b3c9b61c69712e6376863cfca66f9ddb3b11
parentc646d76f6717a646dd35f6efad6b396435f9fa55 (diff)
downloadhypervideo-pre-6a7d3a0a0981d05903e70bcb31fc3f9438eedf22.tar.lz
hypervideo-pre-6a7d3a0a0981d05903e70bcb31fc3f9438eedf22.tar.xz
hypervideo-pre-6a7d3a0a0981d05903e70bcb31fc3f9438eedf22.zip
[ffmpeg] Set `ffmpeg_location` in a contextvar
Fixes #2191 for the CLI, but not when used through the API
-rw-r--r--yt_dlp/__init__.py6
-rw-r--r--yt_dlp/postprocessor/ffmpeg.py5
2 files changed, 10 insertions, 1 deletions
diff --git a/yt_dlp/__init__.py b/yt_dlp/__init__.py
index 5b9b3541c..24f6153e0 100644
--- a/yt_dlp/__init__.py
+++ b/yt_dlp/__init__.py
@@ -19,6 +19,7 @@ from .extractor.adobepass import MSO_INFO
from .extractor.common import InfoExtractor
from .options import parseOpts
from .postprocessor import (
+ FFmpegPostProcessor,
FFmpegExtractAudioPP,
FFmpegSubtitlesConvertorPP,
FFmpegThumbnailsConvertorPP,
@@ -899,6 +900,11 @@ def _real_main(argv=None):
if print_extractor_information(opts, all_urls):
return
+ # We may need ffmpeg_location without having access to the YoutubeDL instance
+ # See https://github.com/yt-dlp/yt-dlp/issues/2191
+ if opts.ffmpeg_location:
+ FFmpegPostProcessor._ffmpeg_location.set(opts.ffmpeg_location)
+
with YoutubeDL(ydl_opts) as ydl:
pre_process = opts.update_self or opts.rm_cachedir
actual_use = all_urls or opts.load_info_filename
diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py
index c3b9ac7fa..f77ca427e 100644
--- a/yt_dlp/postprocessor/ffmpeg.py
+++ b/yt_dlp/postprocessor/ffmpeg.py
@@ -1,4 +1,5 @@
import collections
+import contextvars
import itertools
import json
import os
@@ -81,6 +82,8 @@ class FFmpegPostProcessorError(PostProcessingError):
class FFmpegPostProcessor(PostProcessor):
+ _ffmpeg_location = contextvars.ContextVar('ffmpeg_location', default=None)
+
def __init__(self, downloader=None):
PostProcessor.__init__(self, downloader)
self._prefer_ffmpeg = self.get_param('prefer_ffmpeg', True)
@@ -100,7 +103,7 @@ class FFmpegPostProcessor(PostProcessor):
def _determine_executables(self):
programs = [*self._ffmpeg_to_avconv.keys(), *self._ffmpeg_to_avconv.values()]
- location = self.get_param('ffmpeg_location')
+ location = self.get_param('ffmpeg_location', self._ffmpeg_location.get())
if location is None:
return {p: p for p in programs}