Skip to content

Commit

Permalink
[fd/external] Fix ffmpeg input from stdin (#7655)
Browse files Browse the repository at this point in the history
Bugfix for 1ceb657

Authored by: bashonly
  • Loading branch information
bashonly committed Jul 22, 2023
1 parent 9b16762 commit e57eb98
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
5 changes: 5 additions & 0 deletions test/test_downloader_external.py
Expand Up @@ -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()
5 changes: 3 additions & 2 deletions yt_dlp/downloader/external.py
Expand Up @@ -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())])
Expand Down

0 comments on commit e57eb98

Please sign in to comment.