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.

5 min readSume
All posts

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.mp4

What does the probe result mean?

Read what the command prints against this table:

From FFmpeg's ffprobe, ffmpeg, formats, and filters documentation and its pixfmt.h reference, read 2026-09-28.
What the command printsWhat it meansWhat to do
NothingThe 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 hevcThe 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=yuv420pThe 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.mp4

How 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

Related posts

More in Media tools

All Media tools posts

Written by Sume