overlay filter within the -vf argument. This method composites your transparent PNG over the base video frame at specified coordinates. The process requires extracting or identifying the target frame and applying the filter during encoding to merge the assets into a final output file.
Understanding the Overlay Filter Syntax
The core of this operation relies on theoverlay video filter in FFmpeg. Unlike simple concatenation, which joins clips sequentially, overlaying places one image directly on top of another spatially. The syntax generally follows the pattern overlay=x:y, where x and y define the horizontal and vertical position of the top-left corner of the PNG relative to the video frame.
You must ensure that your PNG file contains an alpha channel for transparency. If the PNG is solid, it will completely obscure the underlying video content behind it. Most modern graphic editors allow you to save images with transparency by selecting "Save for Web" or exporting as PNG-24. Without this alpha channel, the overlay will appear as a solid rectangle rather than a floating element.
For precise placement, you can calculate the x and y values based on the video resolution. For example, to center a 100x100 pixel logo on a 1920x1080 video, you would set x=(W-w)/2 and y=(H-h)/2. Here, W and H represent the input video width and height, while w and h represent the overlay image dimensions. This dynamic calculation ensures the overlay remains centered regardless of minor resolution variations.
Preparing Your Assets
Before running the command, organize your files. You need two primary inputs: the source video (which may be a single static frame exported as a video file) and the PNG overlay. If you are starting with a full video and want to replace or add to a specific frame, you might first extract that frame. Refer to our guide on Extracting Frames from a Video using FFmpeg if you need to isolate a specific moment from a longer clip. Ensure both files are accessible via their file paths. FFmpeg handles local paths well, but if you are working in a directory with spaces, wrap the paths in quotes. It is also advisable to check the codec compatibility. While PNG overlays work with most video codecs like H.264, using a lossless codec during intermediate steps can preserve image quality better than compressed formats. If you are concerned about color accuracy during this process, particularly if the overlay appears washed out or distorted, consider reading Ensuring Correct Color Extraction when Extracting Frames from Videos using FFmpeg: PNG, JPEG and More. This article details how to maintain proper color profiles between different media types, which is crucial when blending high-dynamic-range images with standard video frames.Executing the Command
Open your terminal or command prompt and navigate to the directory containing your files. Construct the FFmpeg command with the following structure:ffmpeg -i input_video.mp4 -i overlay.png -filter_complex "overlay=x:y" output_video.mp4
Replace input_video.mp4 with your source video path and overlay.png with your image path. Substitute x:y with your calculated coordinates. For instance, to place the image 50 pixels from the right and 50 pixels from the bottom, you might use overlay=W-w-50:H-h-50.
FFmpeg will process the streams and mux them into the output file. Monitor the console output for any errors related to unsupported formats or invalid filters. If the video freezes or hangs, check if the input video has an audio stream. If you do not need audio, you can strip it using -an to speed up processing.
Advanced Positioning and Scaling
Sometimes, a fixed coordinate system is not enough. You may want the overlay to scale proportionally with the video resolution. You can combine thescale and overlay filters using a comma-separated list in the -filter_complex argument.
ffmpeg -i input.mp4 -i logo.png -filter_complex "[1:v]scale=0.5:-1[ovr];[0:v][ovr]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2" output.mp4
In this example, the second input ([1:v]) is scaled to half its original width while maintaining aspect ratio. The resulting stream is labeled [ovr]. The main video is labeled [0:v]. The overlay filter then positions the scaled logo in the exact center of the main video. This approach is robust for responsive design scenarios where video dimensions may vary.
If you encounter issues with color numbers or extraction artifacts during complex filtering, refer to Fixing FFmpeg Color Number Extraction Issue to troubleshoot potential data type mismatches in your pipeline.
Frequently Asked Questions
Why does my PNG overlay look solid instead of transparent?
This usually happens because the PNG was saved without an alpha channel. Ensure you export your image with transparency enabled, typically by choosing "PNG-24" or "Save for Web" options in your image editor. Re-exporting with the correct settings will resolve the opacity issue.
Can I animate the position of the overlay?
Yes, you can use time-based expressions for x and y. For example, x='if(gte(t,2),100,0)' moves the image to x=100 only after 2 seconds. This allows for dynamic entrance effects without creating separate keyframe images.
How do I handle audio when overlaying images?
If your source video has audio, FFmpeg copies it by default. To remove audio entirely, add the -an flag to your command. If you want to keep the audio but change the video codec, specify the desired video codec with -c:v libx264 to ensure compatibility.
What if the overlay is too large for the video frame?
You must scale the overlay down before positioning it. Use the scale filter in combination with overlay. For instance, [1:v]scale=1920:1080[ovr] forces the image to match the video resolution, preventing clipping or distortion during the composite step.
Does this method work for multiple overlays?
Yes, you can chain multiple overlay filters or use a more complex filter graph. Label each input stream uniquely (e.g., [1:v], [2:v]) and apply overlays sequentially. Each subsequent overlay layers on top of the previous result, allowing for complex compositions.