Skip to content
streamneo.
Tools12 min read

How to Check Whether a Video File Has Variable Frame Rate Before Streaming

Use FFprobe to screen a video for variable frame rate, then inspect frame timing when rate fields do not give a clear answer.

sn.
StreamNeoPublished 4 October 2026
Worth sharing?

To check whether a video is variable frame rate (VFR), use FFprobe to compare its reported frame-rate fields, then inspect frame or packet timing if the result is unclear. A difference between the fields is a reason to investigate, not proof on its own; the timing in the file is the stronger evidence.

VFR means frame durations vary, while constant frame rate (CFR) means they remain consistent. Neither a rate label nor a VFR finding alone tells you how YouTube or another destination will handle a particular file, so check the platform’s current ingest guidance before relying on it.

What VFR and CFR mean

A video is made up of frames displayed over time. In a CFR file, frames are intended to arrive at regular intervals. In a VFR file, the intervals vary: some frames may be displayed for less time than others. This can be useful in recording workflows where motion or capture conditions change, but it can make a simple frame-rate label less informative than the actual timestamps.

Frame rate is commonly expressed as frames per second. A nominal rate such as 30 fps can be a useful description, but it does not by itself tell you that every frame is separated from the next by exactly the same duration. A file may also contain timing details that are represented differently by different containers and tools. That is why a quick summary field is a starting point, not a full diagnosis.

For a pre-recorded video that will be streamed as a long loop, the practical question is whether the file’s timing is suitable for your playback and ingest workflow. A devotional channel preparing a bhajan loop, for example, may have a file edited from phone recordings with mixed capture settings. Checking the file before scheduling the stream can help you decide whether to leave it alone, inspect it more closely, or create a consistent-rate copy for testing.

VFR does not automatically mean that a video is defective or unsuitable. CFR is not automatically a guarantee of trouble-free streaming either. Your source, encoding, playback software and the destination’s current requirements all matter. If you are also planning the broader stream workflow, a YouTube live video playlist setup on an old laptop is a separate operational question from the timing inside an individual file.

Run the FFprobe metadata check

FFprobe is part of FFmpeg and reports information about multimedia streams. The FFprobe documentation describes it as a tool that gathers information from streams and prints it in human- and machine-readable form. You can use it in a terminal to request a small set of video-stream fields rather than reading a long report.

With FFprobe installed, run:

ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,avg_frame_rate -of default=noprint_wrappers=1 input.mp4

Replace input.mp4 with the actual path and filename. If the path contains spaces, put it in quotation marks, for example "/home/name/My videos/loop.mp4". On Windows, use the path format supported by the terminal you opened. If the file is not in the current folder, provide its full path rather than moving or renaming it just for the check.

The command asks FFprobe to select the first video stream (v:0), request r_frame_rate and avg_frame_rate, and print those entries without wrapper labels. -v error suppresses routine output while retaining errors. If FFprobe reports that the file cannot be opened, first check the path, spelling and permissions. If it finds no selected video stream, confirm that the file actually contains video; an audio-only file will not provide the fields requested here.

The output often looks like this:

r_frame_rate=30000/1001
avg_frame_rate=30000/1001

Those values are rational numbers, not decimal errors. 30000/1001 is a fraction that represents a rate; you do not need to convert it to a decimal to make the first comparison. The sample is only an illustration of the format, not a recommended setting or a claim about the file you are checking.

If you cannot use a terminal, a media-information application may display a frame-rate summary, but the exact fields and their definitions can differ. For a repeatable check, especially when files will be processed in a batch, FFprobe’s command makes explicit which stream fields you requested. Keep the original file unchanged while investigating, and write any transcode to a separate output file.

Read the reported frame-rate fields

Compare the two values FFprobe prints. If r_frame_rate and avg_frame_rate differ, treat the mismatch as a warning that calls for closer inspection. If they match, do not conclude that every frame interval is constant. The comparison is a quick metadata screen, not a universal classification rule for every container and encoding.

In broad terms, avg_frame_rate describes an average rate for the stream, while r_frame_rate is another stream-level rate reported by FFprobe. They are not two independent measurements of every frame’s presentation interval. Their precise interpretation depends on the stream and its timing information, so a matching pair can conceal variation that only becomes apparent when you inspect individual timestamps.

A third-party guide sometimes recommends comparing these fields as a fast VFR check. That is useful as a screening heuristic, but the official FFprobe documentation explains how to obtain stream information; it does not promise that equality or mismatch conclusively classifies all files. Use a mismatch to decide what to inspect next rather than declaring the file VFR immediately.

For example, if a phone-recorded clip reports unequal values, note the difference and look at frame timing before deciding to transcode. If a pre-encoded loop reports equal values, you may have enough information for a low-stakes preview, but not necessarily for a compatibility decision where a platform’s current requirements matter. The distinction is between a clue and evidence about the durations of frames.

This is also why it is unhelpful to treat one printed number as a quality score. A displayed “30 fps” or “60 fps” label can summarise a stream without describing every interval. If you are comparing options for a broadcast, keep frame timing separate from other settings such as resolution and bitrate; a 4K 60 fps bitrate guide addresses a different part of the streaming configuration.

When metadata is ambiguous

Metadata is ambiguous when the two rate fields disagree, when they match but you need stronger confidence, or when a tool reports missing or unusual values. It can also be ambiguous when a container’s timing conventions or the way the file was created affect the summary. Do not infer VFR simply because a file came from a phone, screen recording, editor, or particular camera; inspect the file you actually plan to use.

First confirm that you queried the intended video stream. Some files contain more than one video stream, such as alternate views or embedded previews. The command above selects only the first one. If the file has multiple streams and the first is not the video you intend to play, adjust the selected stream and inspect the output accordingly. You can ask FFprobe to show stream information more broadly to identify stream indices, but avoid assuming the first stream is always the intended one.

Then consider the purpose of the decision. If you are simply checking a short clip before a private test, the summary may be a reasonable first filter. If the file is the central asset for a channel that will run overnight, or you need to meet a named platform specification, look at frame or packet timestamps and test the actual playback path. A long-running channel also has other failure modes; for example, Wi-Fi stream drop troubleshooting concerns connectivity rather than whether the source file’s frame durations vary.

There is a format-specific clue in Apple’s QuickTime documentation. For applicable QuickTime files, Apple describes a variable frame-rate indication field whose value is 0 when frame rate is constant and 1 when frame durations vary. The Apple QuickTime format reference documents this marker. It is useful when it applies, but it is not a generic field that you should expect in every container, and its meaning should not be extended to unrelated formats.

A useful way to keep the evidence straight is to write down what you know: the stream-level fields, whether frame timestamps were inspected, and whether a format-specific marker was present and applicable. That avoids turning a suggestive rate label into a claim of certainty. If the destination is YouTube, consult its current help or ingest documentation for the file and streaming workflow you plan to use; this check does not establish a universal acceptance rule.

Inspect frame or packet timing

When summary metadata does not settle the question, inspect individual frame timestamps or packet timing across the file. The relevant question is whether presentation intervals vary. FFprobe can show frame and packet information, although detailed output is longer and requires more care to interpret than the two-field screen.

To list frame-level information for the first video stream, you can start with:

ffprobe -v error -select_streams v:0 -show_frames -show_entries frame=best_effort_timestamp_time,pkt_duration_time -of csv=p=0 input.mp4

This requests presentation-timestamp and packet-duration values associated with frames, where available. The exact fields populated can vary by file and demuxer. You may see blank values or a different set of timing details, so do not assume every row will contain both columns. If a field is absent, try inspecting packet output or consult the FFprobe documentation for the format and available entries rather than filling in a value by guesswork.

The packet view can be requested separately:

ffprobe -v error -select_streams v:0 -show_packets -show_entries packet=pts_time,duration_time -of csv=p=0 input.mp4

Packet timing and frame presentation timing are related but not interchangeable in every file. A packet can contain encoded data that does not correspond one-to-one with a displayed frame, and presentation order can differ from packet order. Treat these commands as ways to examine timing evidence, not as a single magic output line that classifies all media.

Look across the file rather than sampling only its first few lines. Compare successive presentation timestamps and, where populated, durations. In a constant-timing sequence, intervals should be consistent within the precision and representation of the file. If intervals vary, that is evidence of variable timing. Be mindful of rounding in displayed decimals: tiny printed differences may reflect timestamp precision or formatting, so interpret values in the context of the container and stream rather than relying on a visual glance at rounded numbers.

For a long file, you may direct output to a text file or use a script to analyse timestamps, but preserve the original. If you are not comfortable interpreting the stream, ask someone familiar with FFmpeg to review the output or use a media analysis tool that exposes per-frame timing. Do not turn a complicated trace into a definitive conclusion simply because one frame has an unusual duration; discontinuities, edits, timestamp resets, or damaged media can require a separate explanation.

The table summarises what each method can and cannot tell you:

Method What it examines Useful for Limitation
Stream fields Summary rate values such as r_frame_rate and avg_frame_rate Quick initial screen A match or mismatch is not conclusive for every file
Frame timing Presentation timestamps and available frame durations Checking whether intervals vary across frames Output and interpretation depend on the stream and container
Packet timing Packet timestamps and durations A closer look when frame details are incomplete Packets do not necessarily map one-to-one to displayed frames
QuickTime marker A format-specific VFR indication, where applicable Supporting evidence for relevant QuickTime files Not a marker available or applicable to every container

Decide whether conversion is needed

Finding variable timing does not by itself mean you must convert the file. Conversion may be sensible if your playback or editing chain expects a consistent output cadence, if a destination’s current specification calls for it, or if a controlled test shows a problem that the converted file resolves. It may be unnecessary when the file plays correctly through the intended workflow and the platform provides no contrary requirement. Do not convert merely to make two metadata fields match.

If you do convert, keep the source and create a separate output. Choose the target frame rate based on the project and destination requirements rather than copying a number from an unrelated example. A conversion can duplicate or drop frames to fit a constant cadence, changing motion slightly; depending on settings, it can also change file size, image quality, audio synchronisation or duration. Review the result at the start, middle and end, and listen for audio drift before replacing the source in a scheduled loop.

Do not assume that a transcode repairs every timing problem. If timestamps are damaged or discontinuous, a simple frame-rate setting may obscure the underlying issue. Inspect the output again and test it in the actual playback or ingest workflow. Where a platform has published current requirements, use those requirements as the deciding reference rather than a generic rule about VFR.

For a 24/7 YouTube channel, a preflight process can be modest: identify the intended video stream, record the two summary fields, inspect timing when the result matters, then run a short test through the player or streaming setup you plan to use. Keep a known-good copy of the original and label any converted version clearly. This makes it easier to roll back if the new file has a sync, motion or playback issue during a later broadcast.

If the source is already prepared and your concern is keeping a file-based broadcast running without leaving your own computer on, StreamNeo removes that specific operational burden: you upload the video and use your YouTube stream key, while the broadcast runs independently of your computer. It does not determine whether the file is VFR or replace the need to inspect timing and check YouTube’s current requirements.

Before committing, compare the operating options on the pricing page. When the file and channel are ready, start free — 24-hour trial, no card.

FAQ

How do I check if a video is variable frame rate?

Start with FFprobe and compare r_frame_rate and avg_frame_rate. If the values differ, or if you need a more reliable answer, inspect frame or packet timestamps across the file to see whether presentation intervals vary. The summary fields alone do not prove VFR or CFR in every case.

How can I tell if my video is VFR or CFR with FFprobe?

Use -show_frames or -show_packets to inspect timing information after the quick stream-field check. Varying frame presentation intervals indicate variable timing; consistent intervals support constant timing, while missing or confusing fields may need format-specific interpretation. The QuickTime marker applies only to relevant QuickTime files, not all formats.

Will variable frame rate cause problems when streaming?

Not necessarily. Whether a file is accepted or plays as intended depends on the destination’s current requirements and the playback and encoding path you use. Check the official requirements and test the actual workflow instead of treating VFR alone as a prediction of rejection.

Should I convert a VFR file to constant frame rate before streaming?

Only when the workflow or a current platform requirement gives you a reason, or testing reveals a problem that conversion resolves. Save a separate output and review motion, audio synchronisation and playback before using it in a long-running channel. Conversion is a trade-off, not an automatic fix.

YOU’VE REACHED THE END

Keep the ideas coming.

More guides, useful tools and a little help for your next broadcast.

Back to the journal ↗
YOUR NEXT READ

A little more to explore.

More Tools guides ↗ · All topics ↗