yt-dlp icon indicating copy to clipboard operation
yt-dlp copied to clipboard

The fields playlist and playlist_id are missing in exec command

Open martinspaniol opened this issue 2 years ago • 3 comments

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

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

Checklist

  • [X] I'm reporting a bug unrelated to a specific site
  • [X] I've verified that I'm running yt-dlp version 2022.11.11 (update instructions) 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
  • [X] I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates
  • [X] I've read the guidelines for opening an issue

Provide a description that is worded well enough to be understood

I try to download all videos from the Youtube playlist https://www.youtube.com/playlist?list=PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB including the metadata of the playlist with the --dump-single-json command in the exec part of my .conf file. The playlist metadata should be saved in the same location, as the videos of the playlist. I'm using the output filename template --output "/downloads/%(channel)s/%(playlist)s [youtube-%(playlist_id)s]/%(title)s [youtube-%(id)s].%(ext)s" for the videos.

The videos of the playlist get downloaded successfully. They are stored in /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/....

The playlist metadata cannot be stored in this directory because the fields %(playlist)s and %(playlist_id)s are not set in the exec part. Hence yt-dlp is trying to save the metadata to /downloads/Sew with Sally/NA [youtube-NA]/Playlist.info.json, which does not exist.

This is my yt-dlp.conf file (I had to add .txt as extension for uploading it to github): yt-dlp.conf.txt

Provide verbose output that clearly demonstrates the problem

  • [X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
  • [X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output

bash-5.1# yt-dlp -vU https://www.youtube.com/playlist?list=PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB
[debug] Command-line config: ['-vU', 'https://www.youtube.com/playlist?list=PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB']
[debug] Home config "yt-dlp.conf": ['--exec', 'playlist:yt-dlp --ignore-config --restrict-filenames --dump-single-json %(original_url)s > "/downloads/%(channel)s/%(playlist)s [youtube-%(playlist_id)s]/Playlist.info.json"', '--restrict-filenames', '--no-simulate', '--extractor-args', 'innertube_key:XXXXXXXXXX', '--write-info-json', '--embed-metadata', '--write-thumbnail', '--embed-thumbnail', '--convert-thumbnails', 'jpg', '--format', 'bestvideo*[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4] / bestvideo*+bestaudio/best', '--output', '/downloads/%(channel)s/%(playlist)s [youtube-%(playlist_id)s]/%(title)s [youtube-%(id)s].%(ext)s', '--write-subs', '--sub-format', 'srt/best', '--convert-subs', 'srt', '--sub-langs', 'en', '--ignore-config']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.11.11 [8b64402] (pip)
[debug] Python 3.11.0 (CPython x86_64 64bit) - Linux-3.10.108-x86_64-with (OpenSSL 1.1.1s  1 Nov 2022)
[debug] exe versions: ffmpeg 5.0.1 (setts), ffprobe 5.0.1
[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.09.24, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1723 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.11.11, Current version: 2022.11.11
yt-dlp is up to date (2022.11.11)
[debug] [youtube:tab] Extracting URL: https://www.youtube.com/playlist?list=PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB
[youtube:tab] PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB: Downloading webpage
[youtube:tab] PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB: Redownloading playlist API JSON with unavailable videos
[download] Downloading playlist: How to Make a Skirt Sloper
[info] Writing playlist metadata as JSON to: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB].info.json
[info] Downloading playlist thumbnail 3 ...
[info] Writing playlist thumbnail 3 to: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB].jpg
[youtube:tab] Playlist How to Make a Skirt Sloper: Downloading 7 videos of 7
[debug] The information of all playlist entries will be held in memory
[download] Downloading video 1 of 7
[debug] [youtube] Extracting URL: https://www.youtube.com/watch?v=QwygNlqZRnA
[youtube] QwygNlqZRnA: Downloading webpage
[youtube] QwygNlqZRnA: Downloading android player API JSON
[youtube] QwygNlqZRnA: Downloading MPD manifest
[youtube] QwygNlqZRnA: Downloading MPD manifest
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[info] QwygNlqZRnA: Downloading subtitles: en
[info] QwygNlqZRnA: Downloading 1 format(s): 137+140
[info] Writing video subtitles to: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].en.vtt
[debug] Invoking http downloader on "https://www.youtube.com/api/timedtext?v=QwygNlqZRnA&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1670784130&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=ABDBA130921A0CD23E7005544A38DF1AD8B77DF8.E937293F377BC23B4AF2B211A59D5484A8403F65&key=yt8&lang=en&fmt=vtt"
[download] Destination: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].en.vtt
[download] 100% of   11.34KiB in 00:00:00 at 52.72KiB/s
[info] Downloading video thumbnail 41 ...
[info] Writing video thumbnail 41 to: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].webp
[info] Writing video metadata as JSON to: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].info.json
[SubtitlesConvertor] Converting subtitles
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].en.vtt' -f srt -movflags +faststart 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].en.srt'
Deleting original file /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].en.vtt (pass -k to keep)
[ThumbnailsConvertor] Converting thumbnail "/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].webp" to jpg
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -f image2 -pattern_type none -i 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].webp' -update 1 -bsf:v mjpeg2jpeg -movflags +faststart 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].jpg'
Deleting original file /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].webp (pass -k to keep)
[debug] Invoking http downloader on "https://rr1---sn-h0jeenld.googlevideo.com/videoplayback?expire=1670780531&ei=EsKVY7y4O96mgQefwruwDQ&ip=37.49.7.125&id=o-ACmDcy0zxlaDv69nnx-Q8Z2dXSrZPLasmpV04mvmyYC0&itag=137&source=youtube&requiressl=yes&mh=-u&mm=31%2C29&mn=sn-h0jeenld%2Csn-h0jelnez&ms=au%2Crdu&mv=m&mvi=1&pl=22&initcwndbps=2151250&spc=SFxXNk9YRXJKLPRTe2Bgv6Z4AQ8KHoE&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=169068599&otfp=1&dur=891.223&lmt=1668395884294754&mt=1670758635&fvip=1&keepalive=yes&fexp=24001373%2C24007246&c=ANDROID&txp=6216224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&sig=AOq0QJ8wRQIgSrBTRmt2lH8-0TV8aLttpY5z8cjVLa2jjIOmSXeYyCsCIQDH_E6VRHyvrOpHViWtWar1kb9DbBVZyr25l4dpcAlqaA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAPeWrvjJeo54aojR9nWWg5qhD4TdXjlqMI6nw1e4X71RAiBWH6ApOkczy9YJ0nRfOTtvoEdZX03qR4kRWD83_pnaXQ%3D%3D"
[download] Destination: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].f137.mp4
[download] 100% of  161.24MiB in 00:00:10 at 15.16MiB/s
[debug] Invoking http downloader on "https://rr1---sn-h0jeenld.googlevideo.com/videoplayback?expire=1670780531&ei=EsKVY7y4O96mgQefwruwDQ&ip=37.49.7.125&id=o-ACmDcy0zxlaDv69nnx-Q8Z2dXSrZPLasmpV04mvmyYC0&itag=140&source=youtube&requiressl=yes&mh=-u&mm=31%2C29&mn=sn-h0jeenld%2Csn-h0jelnez&ms=au%2Crdu&mv=m&mvi=1&pl=22&initcwndbps=2151250&spc=SFxXNk9YRXJKLPRTe2Bgv6Z4AQ8KHoE&vprv=1&svpuc=1&mime=audio%2Fmp4&gir=yes&clen=14425411&otfp=1&dur=891.297&lmt=1668395742360523&mt=1670758635&fvip=1&keepalive=yes&fexp=24001373%2C24007246&c=ANDROID&txp=6211224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cotfp%2Cdur%2Clmt&sig=AOq0QJ8wRAIgDO3oVMmRR8RtH7RISrk9HHj7tsD0FdUZhf456Jdvc6YCIGoGbpOfQZsIGIWkMYjjuuVBFGcX1p6yzCi0SxAkRJVA&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAPeWrvjJeo54aojR9nWWg5qhD4TdXjlqMI6nw1e4X71RAiBWH6ApOkczy9YJ0nRfOTtvoEdZX03qR4kRWD83_pnaXQ%3D%3D"
[download] Destination: /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].f140.m4a
[download] 100% of   13.76MiB in 00:00:01 at 13.08MiB/s
[Merger] Merging formats into "/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].mp4"
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].f137.mp4' -i 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].f140.m4a' -c copy -map 0:v:0 -map 1:a:0 -movflags +faststart 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].temp.mp4'
Deleting original file /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].f140.m4a (pass -k to keep)
Deleting original file /downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].f137.mp4 (pass -k to keep)
[Metadata] Adding metadata to "/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].mp4"
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].mp4' -map 0 -dn -ignore_unknown -c copy -write_id3v1 1 -metadata 'title=How to Make a Skirt Sloper Pt1 | Sew with Sally' -metadata date=20221115 -metadata 'description=Learn custom pattern making for a skirt. Sally teaches step-by-step how to make a skirt sloper, which can be used to create custom fit sewing patterns from scratch. 
First make the skirt sloper, use it to make an oak tag pattern, then use the oak tag pattern to create pattern patterns for sewing.


Learn how to sew. Sew with Sally simplifies sewing with sewing lessons for fine, custom and couture clothing. It'"'"'s simpler than it seams!

All rights reserved, copyright 2022' -metadata 'synopsis=Learn custom pattern making for a skirt. Sally teaches step-by-step how to make a skirt sloper, which can be used to create custom fit sewing patterns from scratch. 
First make the skirt sloper, use it to make an oak tag pattern, then use the oak tag pattern to create pattern patterns for sewing.


Learn how to sew. Sew with Sally simplifies sewing with sewing lessons for fine, custom and couture clothing. It'"'"'s simpler than it seams!

All rights reserved, copyright 2022' -metadata 'purl=https://www.youtube.com/watch?v=QwygNlqZRnA' -metadata 'comment=https://www.youtube.com/watch?v=QwygNlqZRnA' -metadata 'artist=Sew with Sally' -movflags +faststart 'file:/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].temp.mp4'
[EmbedThumbnail] mutagen: Adding thumbnail to "/downloads/Sew_with_Sally/How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/How_to_Make_a_Skirt_Sloper_Pt1_Sew_with_Sally [youtube-QwygNlqZRnA].mp4"
[download] Downloading video 2 of 7
...
[download] Downloading video 3 of 7
...
[download] Downloading video 4 of 7
...
[download] Downloading video 5 of 7
...
[download] Downloading video 6 of 7
...
[download] Downloading video 7 of 7
...
[Exec] Executing command: yt-dlp --ignore-config --restrict-filenames --dump-single-json https://www.youtube.com/playlist?list=PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB > "/downloads/Sew with Sally/NA [youtube-NA]/Playlist.info.json"
/bin/sh: can't create /downloads/Sew with Sally/NA [youtube-NA]/Playlist.info.json: nonexistent directory
ERROR: Command returned error code 1
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1485, in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1582, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1711, in process_ie_result
    return self.__process_playlist(ie_result, download)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1879, in __process_playlist
    ie_result = self.run_all_pps('playlist', ie_result)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3435, in run_all_pps
    info = self.run_pp(pp, info)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3414, in run_pp
    files_to_delete, infodict = pp.run(infodict)
                                ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/postprocessor/common.py", line 24, in run
    ret = func(self, info, *args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/postprocessor/exec.py", line 33, in run
    raise PostProcessingError('Command returned error code %d' % retCode)
yt_dlp.utils.PostProcessingError: Command returned error code 1

martinspaniol avatar Dec 11 '22 12:12 martinspaniol

playlist_id refers to the id of the playlist which the item is in. You are running --exec at the playlist stage. The playlist itself is not contained inside a parent playlist, and so does not have a playlist_id. You can use it's id and title instead

btw, --write-info-json already writes the playlist infojson. Any reason why you are writing it again with --exec?

pukkandan avatar Dec 11 '22 14:12 pukkandan

playlist_id refers to the id of the playlist which the item is in. You are running --exec at the playlist stage. The playlist itself is not contained inside a parent playlist, and so does not have a playlist_id. You can use it's id and title instead

Thank you @pukkandan for your reply and the explanation about the id and title fields. I changed my .conf file to use these fields instead. So the exec part in my .conf file is: --exec playlist:'yt-dlp --ignore-config --restrict-filenames --dump-single-json %(original_url)s > "/downloads/%(channel)s/%(title)s [youtube-%(id)s]/Playlist.info.json"'

If I download the same playlist as in the first post, the output is: [Exec] Executing command: yt-dlp --ignore-config --restrict-filenames --dump-single-json https://www.youtube.com/playlist?list=PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB > "/downloads/Sew with Sally/How to Make a Skirt Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/Playlist.info.json" /bin/sh: can't create /downloads/Sew with Sally/How to Make a Skirt Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB]/Playlist.info.json: nonexistent directory ERROR: Command returned error code 1 Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1485, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1582, in __extract_info return self.process_ie_result(ie_result, download, extra_info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1711, in process_ie_result return self.__process_playlist(ie_result, download) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1879, in __process_playlist ie_result = self.run_all_pps('playlist', ie_result) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3435, in run_all_pps info = self.run_pp(pp, info) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3414, in run_pp files_to_delete, infodict = pp.run(infodict) ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/postprocessor/common.py", line 24, in run ret = func(self, info, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/yt_dlp/postprocessor/exec.py", line 33, in run raise PostProcessingError('Command returned error code %d' % retCode) yt_dlp.utils.PostProcessingError: Command returned error code 1

So the fields id and title are correctly replaced in the command, unfortunately I noticed another issue here: The command --restrict-filenames should replace special characters and spaces from the path. This seems not to work as the output path includes spaces. Any idea how to circumvent this?

btw, --write-info-json already writes the playlist infojson. Any reason why you are writing it again with --exec?

You made an interesting point about the --write-info-json command. The explanation says:

Write video metadata to a .info.json file (this may contain personal information).

I thought that this refers to the metadata of a video file only and not to the metadata of the playlist. In my example, if I take a look at the How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB].info.json, I notice that it contains not much information: How_to_Make_a_Skirt_Sloper [youtube-PLtgLx2K6W8-BX52Iyqi37udoGk33Z2GJB].info.json.txt Compared to a json created with --dump-single-json: Playlist.info.json.txt

I've added the command --dump-single-json because I'm using Plex as media server and ZeroQIs Absolute-Series-Scanner as scan engine. To get all information of a playlist without creating many API request to the Youtube API, the manual says to create a Playlist.info.json file:

For YouTube, it it create too many API requests, unless you create 'Playlist.info.json' in library folder with YouTube-dl -J --dump-single-json > Playlist.info.json

If there's an easier way to achieve the same, I'm happy to try it out.

martinspaniol avatar Dec 11 '22 15:12 martinspaniol

The command --restrict-filenames should replace special characters and spaces from the path. This seems not to work as the output path includes spaces. Any idea how to circumvent this?

Use #S formatting operator (search "Sanitize as filename" in readme)

I notice that it contains not much information:

The info about the individual entries is normally not desired since it's also being written to the video's infojson. Use --no-clean-info to write all info

pukkandan avatar Dec 11 '22 17:12 pukkandan

The info about the individual entries is normally not desired since it's also being written to the video's infojson. Use --no-clean-info to write all info

I thought --clean-info-json is used for privacy reasons ?

README: --clean-info-json Remove some private fields such as filenames from the infojson. Note that it could still contain some personal information (default)

So does your comment mean:

  • --clean-info-json: remove private data + remove redundant data
  • --no-clean-info-json: keep private data + keep redundant data

?

Is there no way to keep private data + remove redundant data ?

chrizilla avatar Apr 16 '23 09:04 chrizilla

Do you have a use-case for separating it?

Btw, "private" is used here in a programing sense and refers to the various book-keeping fields that we add to the infodict. It has nothing to do with privacy. Suggestions to docs is welcome.

pukkandan avatar Apr 16 '23 09:04 pukkandan

Do you have a use-case for separating it?

  • redundant/duplicate data: I want to avoid this to save disk space.
  • private/personal data: I don't worry about privacy in this case. And since I don't know what data I am missing with --clean-info-json I always used --no-clean-info-json until now.

But I didn't know that I would duplicate some of the data this way, which I definitely want to avoid.

It has nothing to do with privacy.

"personal information" --> this is why I thought it's about privacy. If it's not about privacy, what's the point of --clean-info-json then ?

Suggestions to docs is welcome.

I'm obviously not an English native speaker and not fully grasping what exactly the switch does, so I am not sure how to improve the doc.

chrizilla avatar Apr 16 '23 13:04 chrizilla

"personal information" --> this is why I thought it's about privacy.

The doc is saying that even if you use --clean-info, the json may still contain personal info. It was written to counter the exact confusion you are having, but doesn't seem to be doing it's job 😓

If it's not about privacy, what's the point of --clean-info-json then ?

You should instead be asking what is the point of --no-clean-info. The default behavior even in ytdl was to remove the private (book-keeping, not privacy related) fields before writing the info. Most of time you don't need these fields and so it is a good default. But some people did want access to it for programmatic use, so I added the options.

PS: This was before implementation of --print-to-file, so it as impossible to get the private field without the option. If someone had asked the same feature now, I honestly would just ask them to use --print-to-file %()j ... instead.

pukkandan avatar Apr 16 '23 17:04 pukkandan

The doc is saying that even if you use --clean-info, the json may still contain personal info. It was written to counter the exact confusion you are having, but doesn't seem to be doing it's job 😓

Ah perhaps I understand now ... the doc wants to prevent users misunderstanding the cleaning job as privacy-related and thus alerts the user that it is NOT privacy related and therefore the json may contain personal information. Right?

If I had to write it so that it makes sense to me (but again, I am not an English native and not very knowledgeable), I would write:

Removes some private fields such as filenames from the infojson. (Note: This is unrelated to privacy protection, so it does not necessarily remove personal information.) It also deduplicates redundant data between the playlist infojson and the playlist items' infojson. (default)

chrizilla avatar Apr 16 '23 20:04 chrizilla

or could replace "private" with "internal data" since the word "private" seems to be the source of confusion

bashonly avatar Apr 16 '23 20:04 bashonly

or could replace "private" with "internal data" since the word "private" seems to be the source of confusion

I think "private" (which is somewhat known to have a separate meaning when it comes to coding) is less confusing than "personal information". When I read that, I thought the main goal was to remove personal information. That's when I started thinking it was a privacy protection measure.

I think it should be explained that privacy protection is NOT the main goal. And it should also be explained what the main goal is, but I don't know how to explain that.

chrizilla avatar Apr 16 '23 20:04 chrizilla

If it's not about privacy, what's the point of --clean-info-json then ?

You should instead be asking what is the point of --no-clean-info. The default behavior even in ytdl was to remove the private (book-keeping, not privacy related) fields before writing the info. Most of time you don't need these fields and so it is a good default. But some people did want access to it for programmatic use, so I added the options.

Is there an enumeration somewhere of what fields are removed during the cleaning process ?

For testing purposes I have diffed clean and unclean info.json for http://youtu.be/SoEkCshMcOY . Below are the parts that are missing from the cleaned info.json.

Aside from the long list of filepaths which I do not need (taking into account their considerable byte size), I would keep the other fields in principle, but seeing they all only have a "null" value (why?) I guess there is no loss in losing that information either.

Could I potentially be losing any interesting information with --clean-info-json ?

fps	null
height	null
width	null
language	null
preference	null
dynamic_range	null	
aspect_ratio	null
fps	null
height	null
width	null
language	null
preference	null
dynamic_range	null
aspect_ratio	null
fps	null
height	null
width	null
language	null
dynamic_range	null
aspect_ratio	null
fps	null
height	null
width	null
language	null
preference	null
dynamic_range	null
...
...
asr	null
audio_channels	null
language	null
preference	null
asr	null
audio_channels	null
language	null
preference	null
...
...
filesize	null
language	null
preference	null
asr	null
audio_channels	null
...
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].0.jpg"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].1.webp"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].2.jpg"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].3.webp"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].4.jpg"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].5.webp"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].6.jpg"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].7.webp"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].8.jpg"
...
average_rating	null
release_timestamp	null
_format_sort_fields	
0	"quality"
1	"res"
2	"fps"
3	"hdr:12"
4	"source"
5	"vcodec:vp9.2"
6	"channels"
7	"acodec"
8	"lang"
9	"proto"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].af.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].ak.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].sq.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].am.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].ar.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].hy.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].as.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].ay.ttml"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].az.ttml"
...
comment_count	null
chapters	null
original_url	"SoEkCshMcOY"
playlist	null
playlist_index	null
requested_subtitles	
af	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=af&fmt=ttml"
name	"Afrikaans"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].af.ttml"
ak	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=ak&fmt=ttml"
name	"Akan"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].ak.ttml"
sq	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=sq&fmt=ttml"
name	"Albanian"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].sq.ttml"
am	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=am&fmt=ttml"
name	"Amharic"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].am.ttml"
ar	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=ar&fmt=ttml"
name	"Arabic"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].ar.ttml"
hy	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=hy&fmt=ttml"
name	"Armenian"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].hy.ttml"
as	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=as&fmt=ttml"
name	"Assamese"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].as.ttml"
ay	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=ay&fmt=ttml"
name	"Aymara"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].ay.ttml"
az	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=az&fmt=ttml"
name	"Azerbaijani"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].az.ttml"
bn	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=bn&fmt=ttml"
name	"Bangla"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].bn.ttml"
eu	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=eu&fmt=ttml"
name	"Basque"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].eu.ttml"
be	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=be&fmt=ttml"
name	"Belarusian"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].be.ttml"
bho	
ext	"ttml"
url	"https://www.youtube.com/api/timedtext?v=SoEkCshMcOY&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1681669169&sparams=ip%2Cipbits%2Cexpire%2Cv%2Ccaps%2Cxoaf&signature=E2C6991639AC9E829F0075080E40084AFF09C6AB.17626599B09DB8AE9DB21F0532632E308263CDE5&key=yt8&kind=asr&lang=en&tlang=bho&fmt=ttml"
name	"Bhojpuri"
filepath	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].bho.ttml"
...
...
_has_drm	null
epoch	1681643969
language	null
_filename	"c:\\hp\\-\\#YT\\2020-04-07 Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter\\Hong Kong Free Press: Donald Trump confronts Chinese Phoenix TV reporter [youtube.SoEkCshMcOY] [17].3gp"
current_git_head	null

chrizilla avatar Apr 16 '23 20:04 chrizilla

This is the rule for removal https://github.com/yt-dlp/yt-dlp/blob/9874e82b5a61582169300bea561b3e8899ad1ef7/yt_dlp/YoutubeDL.py#L3409-L3413

pukkandan avatar Apr 17 '23 07:04 pukkandan

Suggestions to docs is welcome

I first found out what an infojson was today, but I'll have a crack:

--clean-info-json               Remove internal metadata, such as filenames,
                                from the infojson. (default)
--no-clean-info-json            Don't remove internal metadata from the infojson

(inspired by @bashonly's suggestion)

gamer191 avatar Apr 17 '23 08:04 gamer191

This is the rule for removal

Thank you. That enlightens everything.

I'd suggest to at least keep original_url though, because for example in case of redirects it can be useful to have the original url when trying to get a webarchived/cached version.

chrizilla avatar Apr 28 '23 09:04 chrizilla

original_url is a property of how the video was attempted to be downloaded, not a property of the video/playlist itself. hence why it is removed. Same as requested_formats etc

pukkandan avatar Apr 28 '23 12:04 pukkandan

Well, I presented an example for why it would be useful to keep it, namely for searches in webcaches/webarchives.

chrizilla avatar Apr 28 '23 14:04 chrizilla