MP4 plays audio but no video? Check the video stream
An MP4 that plays sound but no picture has a video stream the player can't decode, or none at all. Probe the codec and pixel format, then re-encode.

When an MP4 plays audio but no video, the player is decoding the sound but not the picture; the two are separate streams inside the file, each compressed with its own codec. On the file side, check three things: a video codec the player can't decode, such as HEVC, a pixel format it can't show, such as a 10-bit or 4:4:4 one, or no video stream at all. Probe the file to find out which. For a codec or pixel format problem, re-encode the video to H.264 in 8-bit yuv420p and keep the audio as it is.
The FFmpeg facts come from its ffmpeg, ffprobe, filters, codecs, and formats documentation and its pixfmt.h reference, and Sume's from the Video trim and Video inspect docs and the Sume API reference, read on 2026-09-28. Anything described as current behavior is read from Sume's code.
How do I tell which cause it is?
First, play the same file in another player. If the picture shows there, the file is fine, and the problem is the first player, its settings, or the device; this post covers the file. If the picture starts and then freezes while the sound runs on, that's a different problem: see Video freezes but audio continues. If nothing plays at all, not even the sound, Faststart MP4 and the moov atom covers an MP4 whose writing never finished.
Otherwise, probe the file's video stream. This ffprobe command selects only video streams and prints their codec and pixel format, so an empty result means the file has no video stream; How to check a video's codec explains the options:
ffprobe -v error -select_streams v -show_entries stream=codec_name,pix_fmt \
-of default=noprint_wrappers=1 input.mp4What does the probe result mean?
Read what the command prints against this table:
| What the command prints | What it means | What to do |
|---|---|---|
| Nothing | The file has no video stream, so there is no picture to show. | Re-encoding can't add one. Redo the step that made the file; in FFmpeg, look for -vn or a -map that left the video out. |
codec_name other than h264, such as hevc | The player may have no decoder for that codec. | Re-encode the video to H.264. |
pix_fmt other than yuv420p, such as yuv420p10le (10-bit) or yuv444p (4:4:4) | The player may not handle that pixel format. | Re-encode to yuv420p, YUV 4:2:0 at 8 bits. |
codec_name=h264 and pix_fmt=yuv420p | The video is already in the format the fix below produces. | Look at the player or the device instead. |
How do I fix it with FFmpeg?
Re-encode the video stream and copy the audio as it is. FFmpeg's docs use -c:v libx264 -c:a copy for exactly that split, and -pix_fmt sets the pixel format. If the encode stops on an odd width or height, FFmpeg height not divisible by 2 has the fix, and How to convert HEVC to H.264 covers the conversion in more depth.
Run this, then probe the new file the same way to confirm it shows h264 and yuv420p:
ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p -c:a copy output.mp4How do I fix a file that's already on Sume?
Sume's media tools read your workspace's media.sume.com files, such as an earlier Sume job's output. Check the clip with the free probe, POST /v1/video-inspect with frames: false, which returns video_codec, pix_fmt, and hdr (How to check a video's codec lists the fields). Then trim the whole clip, from start 0 to the probe's duration_seconds, at the default exact precision: it re-encodes the video with libx264 in yuv420p and remuxes kept audio as AAC, so the one job changes both the codec and the pixel format.
In current code, the probe and the trim refuse a source file over 300 MiB with source_too_large, an exact trim refuses PQ and HLG sources (hdr: true) with hdr_source_unsupported, and a keyframe trim won't help, because it copies the stream as it is. How to convert HEVC to H.264 shows the request and covers the length limits and the cost.
Do videos edited with Sume have this problem?
Sume's editing tools re-encode to H.264 in yuv420p: an exact trim per the docs, and video filter, Timeline compose, and Timeline render in current code. A keyframe trim is the exception, since it keeps the source's codec and pixel format. If an edited file plays with sound and no picture, probe it the same way. For the opposite symptom, see MP4 video has no sound.
Sources
- Video trim
- Video inspect
- API reference
- Sume API reference
- ffmpeg Documentation (read 2026-09-28)
- ffprobe Documentation (read 2026-09-28)
- FFmpeg Filters Documentation (read 2026-09-28)
- FFmpeg Codecs Documentation (read 2026-09-28)
- FFmpeg Formats Documentation (read 2026-09-28)
- FFmpeg libavutil/pixfmt.h reference (read 2026-09-28)
Related posts
More in Media tools
- Product video sound: when to add it, and how with AI
Browsers generally block autoplay with sound until a visitor interacts, so a looping product clip must work muted. Save sound for clips people play.
- Roku ad specs: video and audio rules for Roku Ads Manager
Roku ads must be 16:9, 6–92 seconds, .mov or .mp4 up to 1 GB, 23.98, 25 or 29.97 fps, 6 Mbps or more, with 48 kHz 2-channel stereo audio.
- Social media video sizes: 8 platforms in one table
Vertical 9:16 is the video shape most platforms list. The sizes TikTok, Instagram, Facebook, YouTube, Snapchat, X, LinkedIn, and Pinterest give.
- How to split a video by file size without re-encoding
Split a video by file size: scale its length by your limit ÷ its size, cut parts that long without re-encoding, then check each part's size.
Written by Sume