We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Bild.de Extractor not working
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I'm running yt-dlp version **2023.07.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

Germany

### Provide a description that is worded well enough to be understood

Today i tried downloading a video from bild.de i have never realy downloaded from there. But after the download starts the file is done. The content of the file is nothing just a black screen. 
The m3u8 file i get out looks like this. I already tried updating im on the nightly@2023.08.20.172604 now.

`#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:6
#EXTINF:6.0,
segment_0_playlist_0.ts
#EXTINF:6.0,
segment_0_playlist_1.ts
#EXTINF:6.0,
segment_0_playlist_2.ts
#EXTINF:6.0,
segment_0_playlist_3.ts
#EXTINF:6.0,
segment_0_playlist_4.ts
#EXTINF:6.0,
segment_0_playlist_5.ts
#EXTINF:6.0,
segment_0_playlist_6.ts
#EXTINF:6.0,
segment_0_playlist_7.ts
#EXTINF:6.0,
segment_0_playlist_8.ts
#EXTINF:6.0,
segment_0_playlist_9.ts
#EXTINF:6.0,
segment_0_playlist_10.ts
#EXTINF:3.96,
segment_0_playlist_11.ts
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:6
#EXTINF:6.0,
segment_1_playlist_0.ts
#EXTINF:6.0,
segment_1_playlist_1.ts
#EXTINF:6.0,
segment_1_playlist_2.ts
#EXTINF:6.0,
segment_1_playlist_3.ts
#EXTINF:6.0,
segment_1_playlist_4.ts
#EXTINF:6.0,
segment_1_playlist_5.ts
#EXTINF:6.0,
segment_1_playlist_6.ts
#EXTINF:6.0,
segment_1_playlist_7.ts
#EXTINF:6.0,
segment_1_playlist_8.ts
#EXTINF:6.0,
segment_1_playlist_9.ts
#EXTINF:6.0,
segment_1_playlist_10.ts
#EXTINF:3.96,
segment_1_playlist_11.ts
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:6
#EXTINF:6.0,
segment_2_playlist_0.ts
#EXTINF:6.0,
segment_2_playlist_1.ts
#EXTINF:6.0,
segment_2_playlist_2.ts
#EXTINF:6.0,
segment_2_playlist_3.ts
#EXTINF:6.0,
segment_2_playlist_4.ts
#EXTINF:6.0,
segment_2_playlist_5.ts
#EXTINF:6.0,
segment_2_playlist_6.ts
#EXTINF:6.0,
segment_2_playlist_7.ts
#EXTINF:6.0,
segment_2_playlist_8.ts
#EXTINF:6.0,
segment_2_playlist_9.ts
#EXTINF:6.0,
segment_2_playlist_10.ts
#EXTINF:3.96,
segment_2_playlist_11.ts
#EXT-X-ENDLIST
`

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
yt-dlp.exe -vU https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html
[debug] Command-line config: ['-vU', 'https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version nightly@2023.08.20.172604 [7cccab79e] (win_exe)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k  25 Mar 2021)
[debug] exe versions: ffmpeg 2023-06-11-git-09621fd7d9-essentials_build-www.gyan.dev (setts), ffprobe 2023-06-11-git-09621fd7d9-essentials_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.07.22, mutagen-1.46.0, sqlite3-2.6.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1864 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest
Available version: nightly@2023.08.20.172604, Current version: nightly@2023.08.20.172604
Current Build Hash: 71c3f327a60b9cbbaa27ff92ed08abe76e600010298e392b98a41e2cdac634f8
yt-dlp is up to date (nightly@2023.08.20.172604)
[Bild] Extracting URL: https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html
[Bild] 85158620: Downloading JSON metadata
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 85158620: Downloading 1 format(s): 0
[debug] Invoking hlsnative downloader on "https://hds.ak.token.bild.de/85158620,delivery=hls.m3u8"
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 3
[download] Destination: Bademeister sorgt für Skandal [85158620].m3u8
[debug] File locking is not supported. Proceeding without locking
[download] 100% of    1.64KiB in 00:00:00 at 6.58KiB/s
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `yt_dlp/extractor/bild.py`
Content:
```
1 from .common import InfoExtractor
2 from ..utils import (
3     int_or_none,
4     unescapeHTML,
5 )
6 
7 
8 class BildIE(InfoExtractor):
9     _VALID_URL = r'https?://(?:www\.)?bild\.de/(?:[^/]+/)+(?P<display_id>[^/]+)-(?P<id>\d+)(?:,auto=true)?\.bild\.html'
10     IE_DESC = 'Bild.de'
11     _TEST = {
12         'url': 'http://www.bild.de/video/clip/apple-ipad-air/das-koennen-die-neuen-ipads-38184146.bild.html',
13         'md5': 'dd495cbd99f2413502a1713a1156ac8a',
14         'info_dict': {
15             'id': '38184146',
16             'ext': 'mp4',
17             'title': 'Das können die  neuen iPads',
18             'description': 'md5:a4058c4fa2a804ab59c00d7244bbf62f',
19             'thumbnail': r're:^https?://.*\.jpg$',
20             'duration': 196,
21         }
22     }
23 
24     def _real_extract(self, url):
25         video_id = self._match_id(url)
26 
27         video_data = self._download_json(
28             url.split('.bild.html')[0] + ',view=json.bild.html', video_id)
29 
30         return {
31             'id': video_id,
32             'title': unescapeHTML(video_data['title']).strip(),
33             'description': unescapeHTML(video_data.get('description')),
34             'url': video_data['clipList'][0]['srces'][0]['src'],
35             'thumbnail': video_data.get('poster'),
36             'duration': int_or_none(video_data.get('durationSec')),
37         }
38
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/yt_dlp/extractor/bild.py b/yt_dlp/extractor/bild.py
--- a/yt_dlp/extractor/bild.py
+++ b/yt_dlp/extractor/bild.py
@@ -1,6 +1,7 @@
 from .common import InfoExtractor
 from ..utils import (
     int_or_none,
+    traverse_obj,
     unescapeHTML,
 )
 
@@ -8,7 +9,8 @@
 class BildIE(InfoExtractor):
     _VALID_URL = r'https?://(?:www\.)?bild\.de/(?:[^/]+/)+(?P<display_id>[^/]+)-(?P<id>\d+)(?:,auto=true)?\.bild\.html'
     IE_DESC = 'Bild.de'
-    _TEST = {
+    _TESTS = [{
+        'note': 'static MP4 only',
         'url': 'http://www.bild.de/video/clip/apple-ipad-air/das-koennen-die-neuen-ipads-38184146.bild.html',
         'md5': 'dd495cbd99f2413502a1713a1156ac8a',
         'info_dict': {
@@ -19,7 +21,19 @@
             'thumbnail': r're:^https?://.*\.jpg$',
             'duration': 196,
         }
-    }
+    }, {
+        'note': 'static MP4 and HLS',
+        'url': 'https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html',
+        'md5': 'fb0ed4f09c495d4ba7ce2eee0bb90de1',
+        'info_dict': {
+            'id': '85158620',
+            'ext': 'mp4',
+            'title': 'Der Sprungturm-Skandal',
+            'description': 'md5:709b543c24dc31bbbffee73bccda34ad',
+            'thumbnail': r're:^https?://.*\.jpg$',
+            'duration': 69,
+        }
+    }]
 
     def _real_extract(self, url):
         video_id = self._match_id(url)
@@ -27,11 +41,23 @@
         video_data = self._download_json(
             url.split('.bild.html')[0] + ',view=json.bild.html', video_id)
 
+        formats = []
+        for src in traverse_obj(video_data, ('clipList', 0, 'srces', lambda _, v: v['src'])):
+            src_type = src.get('type')
+            if src_type == 'application/x-mpegURL':
+                formats.extend(
+                    self._extract_m3u8_formats(
+                        src['src'], video_id, 'mp4', m3u8_id='hls', fatal=False))
+            elif src_type == 'video/mp4':
+                formats.append({'url': src['src'], 'format_id': 'http-mp4'})
+            else:
+                self.report_warning(f'Skipping unsupported format type: "{src_type}"')
+
         return {
             'id': video_id,
             'title': unescapeHTML(video_data['title']).strip(),
             'description': unescapeHTML(video_data.get('description')),
-            'url': video_data['clipList'][0]['srces'][0]['src'],
+            'formats': formats,
             'thumbnail': video_data.get('poster'),
             'duration': int_or_none(video_data.get('durationSec')),
         }

{"golden_diff": "diff --git a/yt_dlp/extractor/bild.py b/yt_dlp/extractor/bild.py\n--- a/yt_dlp/extractor/bild.py\n+++ b/yt_dlp/extractor/bild.py\n@@ -1,6 +1,7 @@\n from .common import InfoExtractor\n from ..utils import (\n     int_or_none,\n+    traverse_obj,\n     unescapeHTML,\n )\n \n@@ -8,7 +9,8 @@\n class BildIE(InfoExtractor):\n     _VALID_URL = r'https?://(?:www\\.)?bild\\.de/(?:[^/]+/)+(?P<display_id>[^/]+)-(?P<id>\\d+)(?:,auto=true)?\\.bild\\.html'\n     IE_DESC = 'Bild.de'\n-    _TEST = {\n+    _TESTS = [{\n+        'note': 'static MP4 only',\n         'url': 'http://www.bild.de/video/clip/apple-ipad-air/das-koennen-die-neuen-ipads-38184146.bild.html',\n         'md5': 'dd495cbd99f2413502a1713a1156ac8a',\n         'info_dict': {\n@@ -19,7 +21,19 @@\n             'thumbnail': r're:^https?://.*\\.jpg$',\n             'duration': 196,\n         }\n-    }\n+    }, {\n+        'note': 'static MP4 and HLS',\n+        'url': 'https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html',\n+        'md5': 'fb0ed4f09c495d4ba7ce2eee0bb90de1',\n+        'info_dict': {\n+            'id': '85158620',\n+            'ext': 'mp4',\n+            'title': 'Der Sprungturm-Skandal',\n+            'description': 'md5:709b543c24dc31bbbffee73bccda34ad',\n+            'thumbnail': r're:^https?://.*\\.jpg$',\n+            'duration': 69,\n+        }\n+    }]\n \n     def _real_extract(self, url):\n         video_id = self._match_id(url)\n@@ -27,11 +41,23 @@\n         video_data = self._download_json(\n             url.split('.bild.html')[0] + ',view=json.bild.html', video_id)\n \n+        formats = []\n+        for src in traverse_obj(video_data, ('clipList', 0, 'srces', lambda _, v: v['src'])):\n+            src_type = src.get('type')\n+            if src_type == 'application/x-mpegURL':\n+                formats.extend(\n+                    self._extract_m3u8_formats(\n+                        src['src'], video_id, 'mp4', m3u8_id='hls', fatal=False))\n+            elif src_type == 'video/mp4':\n+                formats.append({'url': src['src'], 'format_id': 'http-mp4'})\n+            else:\n+                self.report_warning(f'Skipping unsupported format type: \"{src_type}\"')\n+\n         return {\n             'id': video_id,\n             'title': unescapeHTML(video_data['title']).strip(),\n             'description': unescapeHTML(video_data.get('description')),\n-            'url': video_data['clipList'][0]['srces'][0]['src'],\n+            'formats': formats,\n             'thumbnail': video_data.get('poster'),\n             'duration': int_or_none(video_data.get('durationSec')),\n         }\n", "issue": "Bild.de Extractor not working\n### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE\n\n- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\\* field\n\n### Checklist\n\n- [X] I'm reporting that yt-dlp is broken on a **supported** site\n- [X] I've verified that I'm running yt-dlp version **2023.07.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)\n- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details\n- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)\n- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates\n- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)\n- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required\n\n### Region\n\nGermany\n\n### Provide a description that is worded well enough to be understood\n\nToday i tried downloading a video from bild.de i have never realy downloaded from there. But after the download starts the file is done. The content of the file is nothing just a black screen. \r\nThe m3u8 file i get out looks like this. I already tried updating im on the nightly@2023.08.20.172604 now.\r\n\r\n`#EXTM3U\r\n#EXT-X-PLAYLIST-TYPE:VOD\r\n#EXT-X-VERSION:5\r\n#EXT-X-MEDIA-SEQUENCE:0\r\n#EXT-X-TARGETDURATION:6\r\n#EXTINF:6.0,\r\nsegment_0_playlist_0.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_1.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_2.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_3.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_4.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_5.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_6.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_7.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_8.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_9.ts\r\n#EXTINF:6.0,\r\nsegment_0_playlist_10.ts\r\n#EXTINF:3.96,\r\nsegment_0_playlist_11.ts\r\n#EXT-X-ENDLIST\r\n#EXTM3U\r\n#EXT-X-PLAYLIST-TYPE:VOD\r\n#EXT-X-VERSION:5\r\n#EXT-X-MEDIA-SEQUENCE:0\r\n#EXT-X-TARGETDURATION:6\r\n#EXTINF:6.0,\r\nsegment_1_playlist_0.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_1.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_2.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_3.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_4.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_5.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_6.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_7.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_8.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_9.ts\r\n#EXTINF:6.0,\r\nsegment_1_playlist_10.ts\r\n#EXTINF:3.96,\r\nsegment_1_playlist_11.ts\r\n#EXT-X-ENDLIST\r\n#EXTM3U\r\n#EXT-X-PLAYLIST-TYPE:VOD\r\n#EXT-X-VERSION:5\r\n#EXT-X-MEDIA-SEQUENCE:0\r\n#EXT-X-TARGETDURATION:6\r\n#EXTINF:6.0,\r\nsegment_2_playlist_0.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_1.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_2.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_3.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_4.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_5.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_6.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_7.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_8.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_9.ts\r\n#EXTINF:6.0,\r\nsegment_2_playlist_10.ts\r\n#EXTINF:3.96,\r\nsegment_2_playlist_11.ts\r\n#EXT-X-ENDLIST\r\n`\n\n### Provide verbose output that clearly demonstrates the problem\n\n- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)\n- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead\n- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below\n\n### Complete Verbose Output\n\n```shell\nyt-dlp.exe -vU https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html\r\n[debug] Command-line config: ['-vU', 'https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html']\r\n[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8\r\n[debug] yt-dlp version nightly@2023.08.20.172604 [7cccab79e] (win_exe)\r\n[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k  25 Mar 2021)\r\n[debug] exe versions: ffmpeg 2023-06-11-git-09621fd7d9-essentials_build-www.gyan.dev (setts), ffprobe 2023-06-11-git-09621fd7d9-essentials_build-www.gyan.dev\r\n[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.07.22, mutagen-1.46.0, sqlite3-2.6.0, websockets-11.0.3\r\n[debug] Proxy map: {}\r\n[debug] Loaded 1864 extractors\r\n[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest\r\nAvailable version: nightly@2023.08.20.172604, Current version: nightly@2023.08.20.172604\r\nCurrent Build Hash: 71c3f327a60b9cbbaa27ff92ed08abe76e600010298e392b98a41e2cdac634f8\r\nyt-dlp is up to date (nightly@2023.08.20.172604)\r\n[Bild] Extracting URL: https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html\r\n[Bild] 85158620: Downloading JSON metadata\r\n[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id\r\n[debug] Default format spec: bestvideo*+bestaudio/best\r\n[info] 85158620: Downloading 1 format(s): 0\r\n[debug] Invoking hlsnative downloader on \"https://hds.ak.token.bild.de/85158620,delivery=hls.m3u8\"\r\n[hlsnative] Downloading m3u8 manifest\r\n[hlsnative] Total fragments: 3\r\n[download] Destination: Bademeister sorgt f\u00fcr Skandal [85158620].m3u8\r\n[debug] File locking is not supported. Proceeding without locking\r\n[download] 100% of    1.64KiB in 00:00:00 at 6.58KiB/s\n```\n\n", "before_files": [{"content": "from .common import InfoExtractor\nfrom ..utils import (\n    int_or_none,\n    unescapeHTML,\n)\n\n\nclass BildIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?bild\\.de/(?:[^/]+/)+(?P<display_id>[^/]+)-(?P<id>\\d+)(?:,auto=true)?\\.bild\\.html'\n    IE_DESC = 'Bild.de'\n    _TEST = {\n        'url': 'http://www.bild.de/video/clip/apple-ipad-air/das-koennen-die-neuen-ipads-38184146.bild.html',\n        'md5': 'dd495cbd99f2413502a1713a1156ac8a',\n        'info_dict': {\n            'id': '38184146',\n            'ext': 'mp4',\n            'title': 'Das k\u00f6nnen die  neuen iPads',\n            'description': 'md5:a4058c4fa2a804ab59c00d7244bbf62f',\n            'thumbnail': r're:^https?://.*\\.jpg$',\n            'duration': 196,\n        }\n    }\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n\n        video_data = self._download_json(\n            url.split('.bild.html')[0] + ',view=json.bild.html', video_id)\n\n        return {\n            'id': video_id,\n            'title': unescapeHTML(video_data['title']).strip(),\n            'description': unescapeHTML(video_data.get('description')),\n            'url': video_data['clipList'][0]['srces'][0]['src'],\n            'thumbnail': video_data.get('poster'),\n            'duration': int_or_none(video_data.get('durationSec')),\n        }\n", "path": "yt_dlp/extractor/bild.py"}], "after_files": [{"content": "from .common import InfoExtractor\nfrom ..utils import (\n    int_or_none,\n    traverse_obj,\n    unescapeHTML,\n)\n\n\nclass BildIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?bild\\.de/(?:[^/]+/)+(?P<display_id>[^/]+)-(?P<id>\\d+)(?:,auto=true)?\\.bild\\.html'\n    IE_DESC = 'Bild.de'\n    _TESTS = [{\n        'note': 'static MP4 only',\n        'url': 'http://www.bild.de/video/clip/apple-ipad-air/das-koennen-die-neuen-ipads-38184146.bild.html',\n        'md5': 'dd495cbd99f2413502a1713a1156ac8a',\n        'info_dict': {\n            'id': '38184146',\n            'ext': 'mp4',\n            'title': 'Das k\u00f6nnen die  neuen iPads',\n            'description': 'md5:a4058c4fa2a804ab59c00d7244bbf62f',\n            'thumbnail': r're:^https?://.*\\.jpg$',\n            'duration': 196,\n        }\n    }, {\n        'note': 'static MP4 and HLS',\n        'url': 'https://www.bild.de/video/clip/news-ausland/deftiger-abgang-vom-10m-turm-bademeister-sorgt-fuer-skandal-85158620.bild.html',\n        'md5': 'fb0ed4f09c495d4ba7ce2eee0bb90de1',\n        'info_dict': {\n            'id': '85158620',\n            'ext': 'mp4',\n            'title': 'Der Sprungturm-Skandal',\n            'description': 'md5:709b543c24dc31bbbffee73bccda34ad',\n            'thumbnail': r're:^https?://.*\\.jpg$',\n            'duration': 69,\n        }\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n\n        video_data = self._download_json(\n            url.split('.bild.html')[0] + ',view=json.bild.html', video_id)\n\n        formats = []\n        for src in traverse_obj(video_data, ('clipList', 0, 'srces', lambda _, v: v['src'])):\n            src_type = src.get('type')\n            if src_type == 'application/x-mpegURL':\n                formats.extend(\n                    self._extract_m3u8_formats(\n                        src['src'], video_id, 'mp4', m3u8_id='hls', fatal=False))\n            elif src_type == 'video/mp4':\n                formats.append({'url': src['src'], 'format_id': 'http-mp4'})\n            else:\n                self.report_warning(f'Skipping unsupported format type: \"{src_type}\"')\n\n        return {\n            'id': video_id,\n            'title': unescapeHTML(video_data['title']).strip(),\n            'description': unescapeHTML(video_data.get('description')),\n            'formats': formats,\n            'thumbnail': video_data.get('poster'),\n            'duration': int_or_none(video_data.get('durationSec')),\n        }\n", "path": "yt_dlp/extractor/bild.py"}]}