]> jfr.im git - yt-dlp.git/commitdiff
[fd/external] Fix ffmpeg input from stdin (#7655)
authorbashonly <redacted>
Sat, 22 Jul 2023 02:32:49 +0000 (21:32 -0500)
committerGitHub <redacted>
Sat, 22 Jul 2023 02:32:49 +0000 (02:32 +0000)
Bugfix for 1ceb657bdd254ad961489e5060f2ccc7d556b729

Authored by: bashonly

test/test_downloader_external.py
yt_dlp/downloader/external.py

index d3d74df043ea7c267d6b635716ba95d87351f096..62f7d45d49da55492ff44345fe444695b9ba2b83 100644 (file)
@@ -129,6 +129,11 @@ def test_make_cmd(self):
                 'ffmpeg', '-y', '-hide_banner', '-cookies', 'test=ytdlp; path=/; domain=.example.com;\r\n',
                 '-i', 'http://www.example.com/', '-c', 'copy', '-f', 'mp4', 'file:test'])
 
+            # Test with non-url input (ffmpeg reads from stdin '-' for websockets)
+            downloader._call_downloader('test', {'url': 'x', 'ext': 'mp4'})
+            self.assertEqual(self._args, [
+                'ffmpeg', '-y', '-hide_banner', '-i', 'x', '-c', 'copy', '-f', 'mp4', 'file:test'])
+
 
 if __name__ == '__main__':
     unittest.main()
index 4f52f6e8df4447e7fe537ad96da4e10f44b59f89..d3c3eba8887a7bec8426c7aa042256d1c7404215 100644 (file)
@@ -559,12 +559,13 @@ def _call_downloader(self, tmpfilename, info_dict):
 
         selected_formats = info_dict.get('requested_formats') or [info_dict]
         for i, fmt in enumerate(selected_formats):
-            cookies = self.ydl.cookiejar.get_cookies_for_url(fmt['url'])
+            is_http = re.match(r'^https?://', fmt['url'])
+            cookies = self.ydl.cookiejar.get_cookies_for_url(fmt['url']) if is_http else []
             if cookies:
                 args.extend(['-cookies', ''.join(
                     f'{cookie.name}={cookie.value}; path={cookie.path}; domain={cookie.domain};\r\n'
                     for cookie in cookies)])
-            if fmt.get('http_headers') and re.match(r'^https?://', fmt['url']):
+            if fmt.get('http_headers') and is_http:
                 # Trailing \r\n after each HTTP header is important to prevent warning from ffmpeg/avconv:
                 # [http @ 00000000003d2fa0] No trailing CRLF found in HTTP header.
                 args.extend(['-headers', ''.join(f'{key}: {val}\r\n' for key, val in fmt['http_headers'].items())])