Try using this: --merge-output-format MP4 I guess this will preserve the original webm video stream, and just pack the AV stream into MP4 container. Do let me know if this worked for you. Answer from Deleted User on reddit.com
🌐
Reddit
reddit.com › r/youtubedl › how to embed thumbnail in yt-dlp?
r/youtubedl on Reddit: How to embed thumbnail in yt-dlp?
January 4, 2022 -

Disclaimer: I just want to mention that I'm not a techy person and I don't really know how to code so please explain as simple as possible!

So I recently changed from youtube-dl to yt-dlp and so far I'm having issues with embedding the thumbnail to my videos

Here is the command I use:

yt-dlp -f bestvideo*+bestaudio/best --sleep-interval 10 --write-sub --sub-lang en --embed-subs --add-metadata --embed-thumbnail https://www.youtube.com/watch?v=Ht4MUoQsRnI -o "[%(upload_date)s] %(title)s.%(ext)s"

However I always get this issue:

"WARNING: webm doesn't support embedding a thumbnail, mkv will be used"

Does anyone know how to fix this?

🌐
VideoHelp
forum.videohelp.com › forum home › video conversion
YouTube-DL - Embedding Thumbnail in MKV File - VideoHelp Forum
August 15, 2020 - @echo off cd /D "%~dp0" setlocal enableDelayedExpansion set /p video="Paste the video link to download: " youtube-dl ^ -f ("bestvideo[width>=1920]"/bestvideo)+bestaudio/best --write-thumbnail --embed-thumbnail ^ --o "L:/VideoSharingSites/%%(title)s.%%(ext)s" ^ !video! PAUSE For the MKV downloaded I then dragged it into MKV Toolnix GUI. I resized the thumbnail file to various sizes as mentioned below. I renamed the file as "cover_land" and dragged it into the attachments tab.
🌐
Reddit
reddit.com › r/youtubedl › youtube thumbnail is being properly embedded to video file, but thumbnail is not being displayed
r/youtubedl on Reddit: YouTube Thumbnail is being properly embedded to video file, but thumbnail is not being displayed
May 11, 2024 -

The goal was to download a 720 resolution video with the best audio available, embed the thumbnail to the file, and save it as an mp4. I'm not sure why the file was saved as an mkv. But it seems like the proper thumbnail was written to the file, but VLC is not displaying the thumbnail as it's "cover art". I used Tag Editor to extract the thumbnail to view it (it is the correct thumbnail). I wanted to ask what I missed in regards to it being saved as an mkv vs. mp4, and also wanted to make sure I'm not missing something else in regards to the thumbnail.

picture of the yt thumbnail

picture showing the thumbnail is attached to the file

picture showing vlc is not identifying the album art

picture of the file

verbose log below:

C:\Users\Mike\Downloads\youtubedl>yt-dlp -f "bestvideo[height<=720][ext=mp4]+bestaudio/mp4" --embed-thumbnail --verbose https://youtu.be/RjO0JCSR7K0?si=mP-qqd_PVG3seshA [debug] Command-line config: ['-f', 'bestvideo[height<=720][ext=mp4]+bestaudio/mp4', '--embed-thumbnail', '--verbose', 'https://youtu.be/RjO0JCSR7K0?si=mP-qqd_PVG3seshA'] [debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8 [debug] yt-dlp version stable@2024.04.09 from yt-dlp/yt-dlp [ff0779267] (pip) [debug] Python 3.11.0 (CPython AMD64 64bit) - Windows-10-10.0.22631-SP0 (OpenSSL 1.1.1q 5 Jul 2022) [debug] exe versions: ffmpeg git-2020-03-12-675bb1f, ffprobe git-2020-03-12-675bb1f [debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.47.0, requests-2.31.0, sqlite3-3.38.4, urllib3-2.1.0, websockets-12.0 [debug] Proxy map: {} [debug] Request Handlers: urllib, requests, websockets [debug] Loaded 1810 extractors [youtube] Extracting URL: https://youtu.be/RjO0JCSR7K0?si=mP-qqd_PVG3seshA [youtube] RjO0JCSR7K0: Downloading webpage [youtube] RjO0JCSR7K0: Downloading ios player API JSON [youtube] RjO0JCSR7K0: Downloading android player API JSON WARNING: [youtube] Skipping player responses from android clients (got player responses for video "aQvGIIdgFDM" instead of "RjO0JCSR7K0") [debug] Loading youtube-nsig.17fd9675 from cache [debug] [youtube] Decrypted nsig ghxr4G0-lNlobt => sH2E3Mkt3Qp5Uw [debug] Loading youtube-nsig.17fd9675 from cache [debug] [youtube] Decrypted nsig Gw6mrP8U7koxMg => 86gcavseAv4_Xg [youtube] RjO0JCSR7K0: Downloading m3u8 information [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, size, br, asr, vext, aext, hasaud, id [info] RjO0JCSR7K0: Downloading 1 format(s): 609+251 [info] Downloading video thumbnail 41 ... [info] Writing video thumbnail 41 to: $2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].webp WARNING: webm doesn't support embedding a thumbnail, mkv will be used [debug] Invoking hlsnative downloader on "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1715483004/ei/HN0_ZoLPIvKJkucP-cWBgAE/ip/##.###.###.##/id/4633b4242491ecad/itag/609/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D73044674%3Bdur%3D783.733%3Bgir%3Dyes%3Bitag%3D247%3Blmt%3D1712792024826659/rqh/1/hls_chunk_host/rr4---sn-ab5l6nrl.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Bt/mm/31,26/mn/sn-ab5l6nrl,sn-p5qddn7d/ms/au,onr/mv/m/mvi/4/pl/19/initcwndbps/1035000/vprv/1/playlist_type/DVR/dover/13/txp/5537434/mt/1715461251/fvip/3/short_key/1/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRAIgR6ocnVw4ER1n6EXi2PT7eqn7Xyau4ABGB-eEyw-CUOQCIFXz8x5NGnrSl1w_B2w5f-tIDuxczvywe53NN8wOxbJE/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AHWaYeowRQIgfaI4px16KeTeCC5uKNa_E1RqJ4IubYGgBH6IrAWhXf8CIQChwP8Xt9jXxkqnQ47Umt_Yre89LYTAKYd6slo1JrgOtg%3D%3D/playlist/index.m3u8" [hlsnative] Downloading m3u8 manifest [hlsnative] Total fragments: 150 [download] Destination: $2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].f609.mp4 [debug] File locking is not supported. Proceeding without locking [download] 100% of 69.78MiB in 00:00:58 at 1.19MiB/s [debug] Invoking http downloader on "https://rr4---sn-ab5l6nrl.googlevideo.com/videoplayback?expire=1715483002&ei=Gt0_ZpvfK6WLkucPzr2luA4&ip=##.###.###.##&id=o-AFjz7IvhPDA5H_pzLxQwrM3mGkihGCefLMR-mLo2RYW8&itag=251&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Bt&mm=31%2C26&mn=sn-ab5l6nrl%2Csn-p5qlsndr&ms=au%2Conr&mv=m&mvi=4&pl=19&initcwndbps=966250&bui=AWRWj2T85zReDOY9HWPYf6tdOenoiCdc1o6rjolkvSs4zCReCAcI79BEoO93pl8mqZVfUyoWw0Dbj6jo&spc=UWF9f4ujdoBYqeNVesocytj3VP8ek94CeocF37RUEb5VpR81YtD2d3k&vprv=1&svpuc=1&mime=audio%2Fwebm&ns=sK2e2ucooPr_VSkN-EZ2LCEQ&rqh=1&gir=yes&clen=13955530&dur=783.761&lmt=1712780508447942&mt=1715461010&fvip=3&keepalive=yes&c=WEB&sefc=1&txp=5532434&n=86gcavseAv4_Xg&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhAN72cGHB1PiwC815dFPgk-OyaiIOlLHugGe_960ejsRLAiAwiKv562Me496Se9nxu6MFpqZyCjipKzmjbNfQgsvRpw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AHWaYeowRAIgeX_Q9PQOh1gx83b_8AP2g-_rp1xW_G6hVJX9swYTGnICIBPGW2jyjlZ0JugsVdxyl_QlQNeHpNB75t6Q51-UPzuX" [download] Destination: $2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].f251.webm [download] 100% of 13.31MiB in 00:00:01 at 8.85MiB/s [Merger] Merging formats into "$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].mkv" [debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].f609.mp4" -i "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].f251.webm" -c copy -map 0:v:0 -map 1:a:0 -movflags +faststart "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].temp.mkv" Deleting original file $2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].f609.mp4 (pass -k to keep) Deleting original file $2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].f251.webm (pass -k to keep) [debug] ffprobe command line: ffprobe -hide_banner -show_format -show_streams -print_format json "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].mkv" [EmbedThumbnail] ffmpeg: Adding thumbnail to "$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].mkv" [debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].mkv" -map 0 -dn -ignore_unknown -c copy -attach "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].webp" -metadata:s:2 "mimetype=image/webp" -metadata:s:2 "filename=cover.webp" -movflags +faststart "file:$2 Cheesy Bread Meal Prep for Fat Loss [RjO0JCSR7K0].temp.mkv"

🌐
GitHub
github.com › yt-dlp › yt-dlp › issues › 14041
[Feature] Better way to handle thumbnails · Issue #14041 · yt-dlp/yt-dlp
August 16, 2025 - Even the album art from ytmusic is worse than if you open the track on youtube and set the video quality to highest. There should be an option which fetches the "thumbnail" from within the video frames. ... Youtube Thumbnail (Max fetched using --list-thumbnails, which I crop using command above to remove the left right bars) ... [debug] Command-line config: ['-vU', '-f251', '-x', 'https://youtu.be/BNjW6L4lrYM?si=bsCAdJhJ8a2SjsFi', '--embed-thumbnail', '--convert-thumbnail', 'jpg', '--exec-before-download', 'ffmpeg -i %(thumbnails.-1.filepath)q -vf crop="\'if(gt(ih,iw),iw,ih)\':\'if(gt(iw,ih),i
Author   yt-dlp
🌐
Reddit
reddit.com › r/youtubedl › correct method to add cover art(not only thumbnail) to mp3 files using youtube-dl
r/youtubedl on Reddit: Correct method to add cover art(not only thumbnail) to mp3 files using youtube-dl
November 12, 2021 -

I am trying to extract audio as mp3 from youtube with metadata and the cover art. Currently I am using the below command from bash shell in termux.

youtube-dl -f $audioformat --extract-audio --audio-format mp3 $url -o $storagepath --embed-thumbnail --add-metadata --postprocessor-args "write_id3v1 1 -id3v2_version 3"

This actually downloads mp3 with embedded thumbnail. But when I am downloading multiple mp3 files afterwards the cover art gets messed up(the new mp3 replaces cover art of the first one). I tried several music players in android that uses the cover art of the first mp3 files as cover art of the others. If I move the mp3 files to different location then cover art gets blank. What am I missing here.

In windows I tried Windows Media Player and cover art shows correctly(so the problem is in android only). Also in android file manager thumbnail is correct but the cover art during playing the file is incorrect. Any help is appreciated.

🌐
Luxian
notes.luxian.ro › node › 68
youtube-dl: How to convert landscape thumbnails to square by adding blur using ffmpeg filtering | Luxian's Notes
February 21, 2024 - After spending a few hours researching, here's the final result: a bash function that downloads a video/audio file from a URL supported by yt-dlp, converts it to mp3 320kpbs, and adds the metadata, including the picture, which was transformed to a square by adding blur to fill in the missing parts (similar to the way YouTube adds blur to the vertical videos on the desktop). You can find the code on Github (in case the embedded JS does not load): https://gist.github.com/Luxian/...
🌐
MusicBrainz
community.metabrainz.org › musicbrainz
Question about YouTube cover art - MusicBrainz - MetaBrainz Community Discourse
March 8, 2024 - Can a print screen from youtube be used for cover art? It is not an official cover but the start of a youtube clip
🌐
GitHub
github.com › yt-dlp › yt-dlp
GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader · GitHub
1 week ago - (Alias: --ppa) -k, --keep-video ... for mp4, webm and mkv videos) --no-embed-subs Do not embed subtitles (default) --embed-thumbnail Embed thumbnail in the video as cover art --no-embed-thumbnail Do not embed thumbnail (default) --embed-metadata ...
Author   yt-dlp
Find elsewhere
🌐
yt-dlp
yt-dlp-yt-dlp.mintlify.app › getting started › quick start guide
Quick start guide - yt-dlp
March 3, 2026 - yt-dlp --cookies-from-browser chrome "VIDEO_URL" Supported browsers: chrome, firefox, safari, edge, opera, brave · Embed video thumbnail as cover art: yt-dlp --embed-thumbnail --convert-thumbnails jpg "VIDEO_URL" View all available options: ...
🌐
GitHub
github.com › yt-dlp › yt-dlp › issues › 13265
[Youtube Music] How to embed cover art to flac file · Issue #13265 · yt-dlp/yt-dlp
May 22, 2025 - Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
Author   yt-dlp
🌐
GitHub
github.com › yt-dlp › yt-dlp › issues › 730
[Question] Possible to embed custom thumbnail (from image)? · Issue #730 · yt-dlp/yt-dlp
August 19, 2021 - But when I do so, I get the following: ['-i', 'thumbnail.jpg', '-map', '1', '-map', '0', '-disposition:0', 'attached_pic', '-c', 'copy'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] yt-dlp version 2021.08.10 [debug] Python version 3.7.0 (CPython 64bit) - Darwin-19.6.0-x86_64-i386-64bit [debug] exe versions: ffmpeg 4.4, ffprobe 4.4, rtmpdump 2.4 [debug] Optional libraries: mutagen, pycryptodome, sqlite, websockets [debug] Proxy map: {} [debug] [ParamountPlus] Extracting URL: https://www.paramountplus.com/shows/uefa-champions-league/video/QAwKIRrc1jjTN47xDhAfCBexYklc1
Author   yt-dlp
🌐
Reddit
reddit.com › r/youtubedl › goal is to download audio only and embed thumbnail from yt vids as the album art. best way to do this?
r/youtubedl on Reddit: Goal is to download audio only and embed thumbnail from YT vids as the album art. Best way to do this?
December 9, 2022 -

Need some advice here--up til recently, I used YouTube-dl but I stopped since my old computer broke. On my old computer, I was using YouTube-dl + ffmpg + atomic parsley so I could download the audio only of songs on YouTube, and also get the album art embedded from the video's thumbnail. This all took a lot of effort and struggling over two years ago when I got it set up, since I am not tech savvy so doing stuff in my Mac's Terminal was not easy.

Now, my new computer doesnt have that software installed and I also know YT-dl was getting super slow. Has YT-dlp been the main replacement? Or should I use something else?

All I want to be able to do is: download files that are 1) audio only, 2) the actual audio quality of the file that was uploaded to YouTube (not downgraded even more) and 3) retain the thumbnail art. Any suggestions? Really appreciate it!!

Top answer
1 of 2
8

You have to add the postprocessors:

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {
    'writethumbnail': True,
    'postprocessors': [
        {
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
        },
        {'key': 'EmbedThumbnail'},
        {'key': 'FFmpegMetadata'},
    ],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['http://www.youtube.com/watch?v=5wK5-ChsDsQ'])
2 of 2
2

I prefer commands over python since it has well-explained documentation. So I suggest you make a bash script that contains your preferred command. Then run the python program that will call the bash-script and runs your commands.

Linux: yt_script.sh:

#!/bin/sh
youtube-dl $1 -x --audio-format mp3 --add-metadata --xattrs --embed-thumbnail --prefer-ffmpeg --postprocessor-args "-metadata comment='my comment'" -o 'yt_%(id)s_.mp3' --verbose
exit 0

and in the python file you call the bash script giving the url as a parameter.

python_program.py:

import subprocess
subprocess.call(["Path/to/yt_script.sh","https://www.youtube.com/watch?v=5wK5-ChsDsQ"])

Don't forget to give your script the correct permissions by typing chmod u+x Path/to/yt_script.sh in the terminal.

Then run python /Path/to/python_program.py to run the program from terminal.

You may also need to pass arguments (youtube URLs) to the command. You can do that by editing "python_program.py" as following:

import subprocess
import sys
subprocess.call(["Path/to/yt_script.sh",sys.argv[1]])

Then all you have to do is to open the terminal, run the python program, add the YouTube URL at the end of the command as follows:python /Path/to/python_program.py https://www.youtube.com/watch?v=z60S2DCqDpY

I hope this clears things out!

🌐
Reddit
reddit.com › r/youtubedl › i can't embed thumbnails to the videos.
r/youtubedl on Reddit: I can't embed thumbnails to the videos.
August 1, 2022 -

Hello, recently I noticed that my downloaded videos no longer have the thumbnails embedded to them, I haven't changed any settings aside from updating yt-dlp and the ffmpeg version with the fix for yt-dlp (https://github.com/yt-dlp/FFmpeg-Builds this one). Also in the case that I'm able to fix this is there any way to apply the thumbnails without having to download everything from 0? I have downloaded quite a bit of vids before noticing this.

These are my settings

yt-dlp -i --add-metadata --write-description --write-info-json --write-annotations --write-thumbnail --embed-thumbnail --merge-output-format mkv --throttled-rate 100k -o "%(uploader)s/%(upload_date)s %(title)s - %(id)s.%(ext)s" -o "%(uploader)s - (%(uploader_id)s)/%(upload_date)s - %(title)s - %(id)s.%(ext)s" 

And on the config file I have the path for my cookies, the fixed ffmpeg and the archive.

Here is the verbose output of a video without the thumbnail

https://www.toptal.com/developers/hastebin/uhipesumuy.pl (I wasn't able to format the output properly in the post)

Thanks for your time.

🌐
Zorin Forum
forum.zorin.com › customization
Any Ideas? Show embedded mp4 coverart as video Thumbnail in files - Customization - Zorin Forum
July 18, 2024 - For months I am trying to use embedded coverart from mp4 files as the thumbnail for the respective file in the files app (nautilus I assume). All videos were downloaded with the yt-dlp utility and the "--embed-thumbnail" flag enabled.
🌐
Reddit
reddit.com › r/youtubedl › having trouble getting thumbnail and metadata to embed with dlp
r/youtubedl on Reddit: Having trouble getting thumbnail and metadata to embed with dlp
May 12, 2025 -

I always pass the "--embed-thumbnail --embed-metadata" arguments, but DLP never actually does it.

In the CLI output, it'll indicate that it will use mkv since webm doesn't support thumbnails, and I can see the [Metadata] and [EmbedThumbnail] processes executing, but the final file is always missing the thumbnail, and the Details tab in Properties only has the video title, length, and url. Frame rate, resolution, and any other data are missing, and total bitrate is always displayed as 0kbps.

I can't tell what's going wrong. DLP is updated, and I didn't think I needed to specify a container. For reference, here is the full command I usually use:

"yt-dlp --embed-thumbnail --embed-metadata --abort-on-unavailable-fragment --ignore-errors [URL]"

Does anybody know what could be going wrong?