What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Use FFmpeg’s attached-picture stream to embed a still image in an MP4 without re-encoding the existing video or audio:
ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4
Replace in.mp4, IMAGE and out.mp4 with your paths. The first input supplies the original streams; the second supplies the artwork. FFmpeg copies the original streams, encodes the added image as PNG, and marks that image as attached cover art. Whether a particular application displays it depends on the MP4 muxer and the player or service you use.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
The Video Editing Handbook: For Beginners | $16.46 | Buy on Amazon |
| 2 |
|
The Advanced Video Editing Handbook | $12.99 | Buy on Amazon |
| 3 |
|
OpenShot Video Editing Handbook: A Beginner Friendly Guide to Timeline Editing, Effects,... | $5.99 | Buy on Amazon |
| 4 |
|
The Video Editing Handbook | $9.99 | Buy on Amazon |
What the command does
The command follows the embedded-cover example in the FFmpeg documentation. FFmpeg treats the still image as an additional video stream rather than replacing a frame in the video.
Input files
-i in.mp4opens the source video.-i IMAGEopens the JPEG, PNG or other still image you want to attach.
Stream selection
-map 0 includes every stream from the MP4 input, while -map 1 adds the image input. Explicit mapping prevents the output from accidentally omitting an audio, subtitle or data stream that you intended to retain.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
Codecs and disposition
-c copy enables stream copying for the existing streams, so FFmpeg does not re-encode the source video or audio in this example. The added image is handled separately by -c:v:1 png, which selects PNG for output video stream 1 (the second video stream). -disposition:v:1 attached_pic marks that stream as an attached picture. FFmpeg’s API defines AV_DISPOSITION_ATTACHED_PIC as a stream stored as an attached picture or cover art; see the libavformat API reference.
Prepare the image and files
- Install a current FFmpeg build and ensure both
ffmpegandffprobeare available in your shell. - Use a still image that your target MP4 workflow accepts. The documented example uses PNG, but FFmpeg notes that embedded-thumbnail support varies by muxer and that supported formats may be limited to formats such as JPEG or PNG.
- Put the image and source video in a path you can quote safely. Quoting handles spaces and shell metacharacters.
- Choose a new output filename. Writing to a separate file lets you compare the result and preserves the original if you need to retry.
Run the basic FFmpeg procedure
- Open Terminal, PowerShell or another shell in the directory containing the files.
- Run the command, quoting paths when necessary:
ffmpeg -i "in.mp4" -i "thumbnail.png" -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic "out.mp4" - Read FFmpeg’s output for stream mapping and errors. A successful run creates
out.mp4without changing the source file. - Open the output in the application where the thumbnail will actually be used. An attached picture is metadata-like artwork; it is not automatically a visible frame at the beginning of playback.
Verify that the artwork stream is present
Use ffprobe to inspect the output rather than relying only on a file browser thumbnail:
ffprobe -hide_banner -show_streams -show_entries stream=index,codec_type,codec_name,disposition:stream_tags -of json out.mp4
Look for an additional stream with codec_type set to video, the image codec you selected, and a disposition containing attached_pic: 1. The exact display behavior remains application-dependent, so verify in the destination player, media library or upload service as well.
Preserve or adjust stream selection
Keep every source stream
The documented command uses -map 0, which is appropriate when you want all streams from the first input. It then appends the image with -map 1. Because stream indexes can differ in files containing multiple video streams, check FFmpeg’s mapping output if you adapt the command.
When the image is not stream 1
v:1 means the second video stream in the output, not necessarily “input 1” in every customized command. If you add other video streams or alter mapping, update both -c:v:1 and -disposition:v:1 to point to the artwork stream.
Copying is not image passthrough
The -c copy option applies to streams that are copied. The image is explicitly assigned the PNG codec, so it is encoded as the attached-picture stream. This distinction matters when estimating processing time and output size.
Compatibility limits you should plan for
FFmpeg does not promise that every MP4 muxer supports embedded thumbnails. Muxers that do support them may accept only a small set of image formats, such as JPEG or PNG. A command can complete successfully while a downstream application ignores the attached picture, substitutes its own thumbnail, or shows no artwork. The official documentation does not establish compatibility for particular named players.
If PNG is rejected
Try a JPEG input and select an image codec accepted by your target workflow, while retaining the same mapping and attached-picture disposition. The accepted format is a property of the muxer and consuming application, so confirm the requirement for that workflow rather than assuming one format is universal.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Embedded art versus a generated preview
An attached picture is a separate stream flagged as cover art. It does not insert the image into the video timeline and does not force a website or player to use it. Some services generate thumbnails from a video frame or require a separate poster-image upload instead.
Troubleshooting common failures
“File not found” or “No such file or directory”
Check the spelling, current directory and extension. Quote paths containing spaces. On Windows, use a full path such as "C:Videosin.mp4" and verify that the shell did not hide a different extension.
Rank #3
“Stream specifier … matches no streams”
The output stream indexes do not match the command. Inspect the mapping lines and run ffprobe -show_streams out.mp4. If the attached image is not output video stream 1, change the :1 suffix on both codec and disposition options to the correct video-stream index.
The command finishes but no thumbnail appears
First confirm with ffprobe that an attached-picture stream exists. If it does, the consuming application may not read attached pictures, may support only certain image codecs, or may generate its own artwork. Test the exact destination workflow and, where documented, use its required image format.
“Could not write header” or an unsupported image format error
The selected MP4 muxer may not accept attached pictures in that format. Try the other format supported by your workflow, commonly JPEG or PNG, and verify that the output container is the one expected by the destination. FFmpeg’s documentation specifically cautions that muxer support is not universal.
The source video was unexpectedly re-encoded
Confirm that -c copy is present and review FFmpeg’s stream mapping. Do not add a global video codec option unless you intend to re-encode. The image still receives its own codec option because it is a new stream.
The output file is larger than expected
Stream copying avoids re-encoding the existing media, but the attached image adds bytes. A large or high-resolution PNG can increase the file size substantially; use an image size and format appropriate for the consuming application.
Rank #4
Performance, reliability and repeatability
With stream copying enabled, FFmpeg generally spends its work reading the source, writing a new container and encoding the still image rather than recompressing the full video. Runtime and output size depend on storage, source streams and image dimensions. For repeatable automation, write to a temporary output, check the process exit status, run ffprobe, and replace the destination only after verification. Keep the original until the destination workflow has displayed the artwork correctly.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsOr skip the browser setup
If you are creating thumbnails from web pages rather than attaching an existing local image, ScreenshotNeo returns a screenshot through one API request. Its cleanup steps accept cookie or consent banners and remove more than 60 known consent platforms, newsletter popups and chat widgets before capture; each step can be disabled. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and the response reports the page verdict and billing status in headers.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo documentation for options such as PNG, JPEG or WebP output, full-page capture, a CSS-selected element, device presets, custom CSS and JavaScript, waits, request blocking, cookies, headers, geolocation, caching and asynchronous jobs.
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients. The Free plan includes 1,000 screenshots per month without a card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
Frequently Asked Questions
Does this command change the video quality?
The documented command uses stream copying for the existing streams, so it does not re-encode those streams; the added artwork is encoded separately as the selected image stream.
Recommended Free Tools
Will every MP4 player show the embedded thumbnail?
No. FFmpeg documents that muxer support is not universal, and the consuming application may ignore attached pictures or require a particular image format.
Is an attached picture the same as a video poster frame?
No. Attached art is a separate stream marked as cover art; a poster frame or service-generated thumbnail is a different mechanism.
The Bottom Line
Start with FFmpeg’s mapped-image command, verify the attached_pic stream with ffprobe, and test the exact player or service that will consume the MP4.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →




