SUBMIT A FILE TYPE CONTACT US SUPPORT ABOUT US

What Is an FLV File? How to Read a Flash Video File Without Playing It

An FLV file is a Flash Video file, and a reader that opens FLV files can still accept a damaged one. Jump to your question below, or work through it in order.

36 min read Updated October 2026 Checked against sources and tests

What Is an FLV File? Flash Video, a container that outlived Flash

Short answer

An FLV file is a Flash Video file. It starts with the letters FLV, and a chain of tags stores the video, the audio and a block of metadata. Adobe ended Flash Player in 2020, and current video tools still open FLV files.

We read 43 FLV files with six readers, and we damaged one FLV file in 39 ways. All six readers refused 4 copies, all six opened 22 and the readers split on 13. Four of the 22 decode only part of the video.

To check an FLV file without a player, read the six steps. To see what is inside, read the layout. If an FLV file will not play, begin with the eight causes.

An FLV file is a Flash Video file. A chain of small tags stores its video, audio and metadata, and the letters FLV start the file. The ending is only a label, because the first bytes decide what the file is.

Picture an old video called lecture.flv on a backup drive. It plays nowhere you try, and the name says nothing about the codec. It is one of the FLV files that Flash Player played in browsers, and the ending proves nothing.

Wikipedia says Macromedia developed the format and Adobe developed it later, and gives 10 September 2003 for the first release. PRONOM says Flash Video came in 2002. FileInfo files FLV files under video files from Adobe Systems.

Adobe ended Flash Player on 31 December 2020, as Wikipedia reports on its SWF page. The format survived, because FLV files are simple. All six readers we tested open them without Flash.

The ending causes the first mix up. We copied one FLV file to 10 names, like movie.mp4, picture.jpg and notes.txt. All six readers still read one FLV file in all 10, so the first bytes decide what the file is.

Who makes FLV files

Video tools and streaming servers write FLV files. Our 43 FLV files come from 6 public projects. They include the Ruffle Flash emulator and the Red5, Ant Media and SRS streaming servers. Many are test files, so they include odd cases that an export from a normal tool does not.

We fetched 54 files, dropped 10 byte identical copies and one F4V file, and recorded the SHA256 hash of every file. The tests below also use 39 damaged copies of one FLV file, and 10 renamed copies.

FLV file facts at a glance

Quick facts about FLV files
Property Value
Meaning A Flash Video file. It stores video and audio as a chain of tags inside the FLV container.
Ending .flv. The later F4V format uses .f4v and is built on the MP4 container, per Wikipedia.
Made by Macromedia, later Adobe. Wikipedia gives 2003 for the first release, and PRONOM says 2002.
First bytes 46 4c 56 (FLV) at byte 0, then the version 01. All 43 of our FLV files start this way.
Media type video/x-flv, per Wikipedia and PRONOM. IANA lists no FLV type in its video registry.
Opens with VLC media player, HandBrake and other tools, per FileInfo. We tested ffprobe, MediaInfo, hachoir, 7-Zip, OpenCV and the file command.
Status Adobe ended Flash Player on 31 December 2020. Current tools still open FLV files.
Our tests 43 FLV files, 39 damaged copies and 10 renamed copies, read by six readers and a full decode on Linux.

Wrong page? A file that ends in .f4v, .swf or .mp4 is a different format. Compare them by their first bytes.

What Is Inside an FLV File? A 9 byte header and a chain of tags

An FLV file has a 9 byte header, a PreviousTagSize of 0 and then tags. A tag is an 11 byte header, the data and a 4 byte size. In our 430,172 byte example the first tag starts at byte 13, and the first keyframe starts at byte 1,347.

We took a 10 second clip, bbb.flv, so every byte can be read. It is 430,172 bytes long and has 686 tags. The figure shows the blocks from the outside in.

The layout of one FLV file from our tests: a 9 byte header that starts with FLV, a PreviousTagSize of 0, a script tag with metadata, video and audio configuration tags, audio and video tags and a PreviousTagSize after every tag.
One FLV file from our tests, outside in. The blocks are not drawn to scale, and the numbers come from bbb.flv, a 430,172 byte clip.

Read the figure from the top. Block 1 is the only fixed check. The Flash Video article says the header size is 9 by default, so a reader can skip a larger header in a newer version. All 43 of our FLV files have a header of 9 bytes.

Block 3 is the metadata, with the duration and the picture size. Blocks 4 and 5 contain no sound or picture. They store the codec settings that a decoder needs before the first frame.

The tag header, field by field

Every tag has the same 11 bytes in front of its data. The table lists the fields and what our FLV files showed.

Fields of an FLV tag
Field What we found
Type One byte. 8 is audio, 9 is video and 18 is script data, per Wikipedia. Our walker found one tag of type 15 in 43 files.
Data size Three bytes, so a tag can have up to 16,777,215 bytes of data.
Time stamp Three bytes in milliseconds, plus a fourth byte for the top 8 bits. Our largest was 4,151,263 ms, in a file of 2,636 bytes.
Stream ID Three bytes, and 0 in 42 of our 43 FLV files. One file has a nonzero ID in every tag.
PreviousTagSize Four bytes after the data. It equals the data size plus 11, and in bbb.flv it reads 605 after the script tag. Two files have a wrong value in every tag.

The script tag and its metadata

35 of our 43 FLV files start with an onMetaData script tag, and one has an onTimeCoordInfo tag. 7 FLV files have no script tag at all. The tag is a hint for players and not a rule for the file.

Every onMetaData tag we found has a duration. 26 give the file size, and all 26 match the size on disk to the byte. 24 name an encoder, and all 24 say Lavf, the name that the FFmpeg library libavformat writes.

The duration matched the last time stamp within one second in 33 of 35 FLV files. The other 2 differ, so treat a duration as a claim and not a measurement. None of our 35 tags has a keyframes entry, a field that Wikipedia lists among the metadata.

The header is small. Our check script reads the 13 bytes of header and the first 8 tags. It decodes no frame, so damage deeper in the file can pass it, as the damage tests show.

Which Kind of FLV File Do You Have? Tag IDs name the codecs, and the ending does not

Two IDs sort FLV files, the video codec and the audio format. Both come from the first byte of a tag. Our 43 FLV files used 19 H.264 and 8 Sorenson videos, and 21 AAC and 6 MP3 soundtracks. The ending names none of them.

Most questions about an FLV file come down to the codecs. Will my player open it? Can I copy the streams to MP4? The tags answer both, and no frame has to be decoded to read them.

What our 43 FLV files contain: 33 have video, mostly H.264 or Sorenson, 35 have audio, mostly AAC, 26 have both, 9 have audio only, 7 have video only and 1 is empty.
The ending says FLV and the tags say what is inside. 19 of our files use H.264, the codec that MP4 files use too.

Which video codec an FLV file uses

Wikipedia's codec list names Sorenson Spark, VP6, Screen video and H.264 as video codecs of the format. We found all four, with the IDs 2, 4, 3 and 7. 19 FLV files use H.264, 8 use Sorenson, 4 use VP6 and 1 uses Screen video.

One file uses a newer scheme. The first byte of its video tags starts with a flag bit, and the four letters hvc1 replace a codec ID. Our ffprobe named it HEVC. A stream copy moved it to MP4 and MKV with identical packets.

Which audio format an FLV file uses

AAC is the most common audio format in our set, with 21 files, then MP3 with 6, Speex with 3 and ADPCM with 2. Nellymoser, A-law and mu-law appear in one file apiece. 35 of our 43 FLV files have audio.

Audio only, video only and empty FLV files

26 FLV files have both streams, 9 have audio only, 7 have video only and 1 has no tag at all. The audio and video bits of the flags byte matched the tags in all 43 files. The empty file is 13 bytes long and ends after the header.

The ending is not the codec 19 FLV files use H.264, the codec that MP4 files use too.
Flags are a promise The audio and video bits matched all 43 files, and copies with flags 00 and 01 still opened in all six readers.
Newer codecs exist One FLV file uses the four letters hvc1 in place of a codec ID.
Audio only files exist 9 FLV files have audio and no video, and OpenCV opened none of them.

Not sure the file is an FLV file at all? Check it with our script.

What Did We Find in 43 FLV Files? Six readers and a decode, with gaps on odd files

We read 43 FLV files from 6 public projects with six readers. MediaInfo, hachoir and the file command opened all 43. 7-Zip refused 5, and OpenCV opened none of the 9 audio only files. The set has more odd cases than a normal export does.

We fetched 54 files from the test folders of Ruffle, Red5, Ant Media, SRS, Flavors and Streamio. We dropped 10 byte identical copies and one F4V file, which left 43 FLV files. We recorded the SHA256 hash of every file and checked it again at the end.

The readers were ffprobe 6.1.1, MediaInfo 24.12, hachoir 3.4.0, 7-Zip 25.01, OpenCV 5.0.0.93 and the file command 5.45, on Python 3.13 and Linux. We added a full decode with ffmpeg 6.1.1. We played no file for sound or picture.

43 FLV files we read
6 readers on every file
39 damaged copies of one FLV file
26 FLV files with video and audio
Six readers on the same 43 FLV files: MediaInfo, hachoir and the file command opened all 43, ffprobe opened 42, 7-Zip opened 38 and OpenCV opened 31 of the 33 files with video.
Six readers on 43 FLV files. The gaps come from odd files, an empty file and a reader that only opens video.
What six readers found in 43 FLV files
Test Result
Opened MediaInfo, hachoir and the file command opened all 43 FLV files. ffprobe opened 42, 7-Zip 38 and OpenCV 31, which is 31 of the 33 files with video.
Decoded ffmpeg decoded 41 of 43 FLV files without an error. It failed on the empty file and on h264_mp3.flv.
Video codec 19 H.264, 8 Sorenson, 4 VP6, 1 Screen video and 1 HEVC. The HEVC file uses the newer hvc1 tag.
Audio format 21 AAC, 6 MP3, 3 Speex and 2 ADPCM. Nellymoser, A-law and mu-law appear in one file apiece.
Metadata 35 files start with an onMetaData tag, and all 35 give a duration. 26 give a file size that matches the disk. No tag has a seek table.
Duration The duration matched the last time stamp within one second in 33 of the 35 tags.
Sizes From 13 bytes to 41,900,095 bytes. The smallest file with a tag is 314 bytes. The 43 files total 166,805,566 bytes.

All six readers opened 29 of the 43 FLV files. The other 14 were missed by 7-Zip, OpenCV or ffprobe, and every miss is a limit or an odd file, as the next parts show.

The 5 files that 7-Zip refused

7-Zip refused NAPNAP.flv, flv1_nelly.flv, h264_aac.flv, h264_mp3.flv and the empty file. NAPNAP is a valid file. Its first tag is an audio tag with no data, and the other five readers opened it. The empty tag at the start is the one thing we could trace.

We found odd tags in the other three. The file flv1_nelly.flv has one tag of type 15, which Wikipedia lists among the RTMP control types. Every one of its 3,690 tags has a stream ID that is not 0. In h264_aac.flv and h264_mp3.flv the PreviousTagSize is wrong in every tag. We did not trace why 7-Zip refused them.

The file with stray bytes between its tags

webrtctestrecord.flv is a valid recording with stray bytes between its tags, and all six readers opened it. Our check script refuses it at the third tag, because the tag type there is 0. The stray bytes are not part of any tag we could name.

Why OpenCV missed 12 files

OpenCV is a video reader, so it opened none of the 9 audio only files or the empty file. It also missed h264_aac.flv and h264_mp3.flv, which have video. Count a miss from OpenCV as a limit of that reader, and not as a sign of damage.

Odd tags exist One file has a tag of type 15, and two have a wrong PreviousTagSize in every tag.
Readers have gaps OpenCV opened 31 files and MediaInfo opened 43. Use a second reader on any FLV file you rely on.
Empty files exist One file is 13 bytes long, and ffprobe and the decode both failed on it.
Durations are claims 2 of the 35 metadata tags differ from the last time stamp by more than a second.

Read the study with care. It shows what six readers do with 43 FLV files from 6 public test folders. Many are test files, so the odd cases are common here. A reader that agrees on our FLV files can still fail on yours.

What Do Readers Do With a Damaged FLV File? 39 broken copies, six readers and 13 split decisions

We damaged one 430,172 byte FLV file in 39 ways. All six readers refused 4 copies, all six opened 22 and the readers split on 13. Opened copies by reader were 7-Zip 25, OpenCV 28, ffprobe 30, hachoir 33, MediaInfo 34 and file 34. A full decode gave all 250 frames for 23 copies.

The 39 damaged copies of bbb.flv come in seven groups. Group A damages the header fields, B the first bytes and C cuts the file short. D changes the metadata tag, E the tag fields, F the codec settings and G adds data at the end. Every copy changes one thing.

A grid of 39 damaged copies of one FLV file, six readers and a full decode. All six readers refused 4 copies, all six opened 22 and the readers split on 13. 23 copies decode all 250 video frames.
Rows are damaged copies and columns are readers. Green means the reader opened it, and red means it refused. The last column counts the video frames a full decode returned, out of 250.

The 4 copies that every reader refused

Copies A1, A2, B1 and B2 broke the one fixed check. Their damage is the signature FLX, a zeroed signature or the first 9 or 13 bytes removed. All six readers refused all four. ffprobe said it found invalid data, and our script says the first 3 bytes are not FLV.

The 22 copies that every reader opened

Most damage went unseen. The copies with a changed duration, a missing metadata tag, a middle tag of size 0 and a time stamp of ffffff passed all six readers. So did flags of 00 and 01, and 64 KB of random bytes added at the end.

Opened does not mean complete. Four of the 22, C4, C5, E3 and E9, decode only part of the video. The copy cut in half gave 132 of 250 frames, and the copy cut after 100 tags gave 35. All six readers opened both without a word.

The 13 copies that split the readers

7-Zip refused 10 of the 13, more than any other reader. It refused version 2, flags ff, a first PreviousTagSize of 1 and a stream ID of 1. A header size of 0 was opened by the file command alone, because that command reads the letters FLV and nothing else.

The three short copies, C1 to C3, were opened by MediaInfo, hachoir and the file command and refused by ffprobe, 7-Zip and OpenCV. A header of 9 bytes with no tag after it is a file that ends too early, and the readers disagree on that.

Five readers opened a copy that has no frames

F1 changes the video codec ID from 7 to 2, F3 zeroes the AVC decoder config and F4 zeroes the AAC config. Five of the six readers opened every one, and a full decode gave 0 frames. E6, with every PreviousTagSize zeroed, was opened by four readers and also gave 0 frames.

A reader that opens a file shows that the tag chain parses. It does not show that the video decodes. For anything you rely on, decode it with ffmpeg and count the frames, as the frame count shows.

Readers differ The six readers split on 13 of 39 copies. Use two readers on any FLV file you care about.
Cuts go unseen A copy cut in half was opened by all six readers and gave 132 of 250 frames.
Codec settings matter Zeroing the AAC or AVC config left the file readable and gave 0 frames.
Extra data is harmless All four copies with data added at the end opened in every reader and decoded in full.

Read the grid with care. Every copy changes one thing in one H.264 and AAC file of 10 seconds. Damage in the wild changes many things at once. We played no copy, so the grid shows how readers answer and says nothing about a media player.

What Does Our Expert Say About FLV Files? A note from Neeraj Singh on testing before you give up

Check an FLV file with two tools before you trust one answer. All six of our readers opened 29 of 43 good files and split on 13 of 39 damaged copies. A header check takes seconds, and a frame count takes a little longer.

Neeraj Singh

Expert insight

“An FLV file looks like an old video, so people give up when one player says no. In our tests six readers split on 13 of 39 damaged copies, and four copies that all six opened lost frames in a full decode. Check an FLV file with two tools, copy its streams and keep the original.”

Neeraj Singh Manager, Tech Support & Operations 19+ years fixing Windows and system errors

Why a quiet reader proves little

A reader that opens an FLV file shows that the header and the tags parse. It does not show that the video decodes. In our tests every reader opened the copy cut in half, and a full decode gave 132 of 250 frames.

The check has a limit. Two readers that agree can both be wrong, and neither plays the file for you. The script from the check reads 13 bytes and the first tags, so compare its answer with a second reader and a frame count.

Copy the FLV file before you touch it. Write down the SHA256 hash of the original and work on a copy. The hash shows which file you received, and it lets you spot a changed download later.

How Do You Open an FLV File? Most players still open it, and Flash is not needed

Most video players still open an FLV file, and Flash Player is not needed. FileInfo lists VLC media player and HandBrake. We read all 43 FLV files with six tools, and none of them needs Flash.

Adobe ended Flash Player in 2020, but the file survived. The table lists the programs we used and the two that FileInfo names. It marks what we tested, because we worked on Linux and played no file.

Programs that open FLV files
Program What it does
VLC media player Plays FLV files on Windows, Mac and Linux, per the FileInfo list. We played no file, so we tested no player.
HandBrake FileInfo lists it for Windows, Mac and Linux. It reads an FLV file and writes another format. We did not test it.
ffprobe and ffmpeg Version 6.1.1. ffprobe opened 42 of 43 FLV files, and a full ffmpeg decode worked on 41.
MediaInfo Version 24.12 opened all 43 FLV files and named the format Flash Video.
7-Zip Version 25.01 opened 38 FLV files and listed the video and the audio as two parts.
hachoir A Python module, version 3.4.0. It opened all 43 FLV files and printed metadata lines.
OpenCV A video library, version 5.0.0.93. It opened 31 FLV files, all with video.
Our script A 52 line Python script that reads 13 bytes and the first 8 tags. It decodes nothing.

Open an FLV file with ffprobe

ffprobe is part of FFmpeg. It prints the streams of an FLV file and decodes nothing. For our example it names an H.264 video and an AAC soundtrack.

List the streams of an FLV file
ffprobe -v error -show_entries stream=index,codec_name,codec_type -of csv=p=0 bbb.flv
0,h264,video
1,aac,audio

To count the frames, add the option -count_frames. That option decodes the video, so it is the one read here that proves the picture is there. Our example gave 250 frames.

Count the video frames
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of csv=p=0 bbb.flv
250

Open an FLV file with 7-Zip

7-Zip lists an FLV file as two parts, one for the video and one for the audio. The command 7zz l bbb.flv shows the two parts and their sizes. Add -slt to see the block counts, which were 252 and 433 for our example.

List the parts of an FLV file
7zz l bbb.flv
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
                    .....       362037       362037  bbb.video.flv
                    .....        67539        67539  bbb.audio.flv
------------------- ----- ------------ ------------  ------------------------
                                429576       429576  2 files

7-Zip refused 5 of our 43 FLV files, so a refusal can mean an odd file or a strict reader. The five are named in the study.

Open an FLV file on a phone or in a browser

We tested no phone and no browser. FileInfo lists players for Android, iOS and the web, but we did not try them. If a player says no, read the first bytes with the check before you blame the file.

Do not install Flash Player. FileInfo says Adobe no longer develops Flash Player and recommends uninstalling it for security reasons. An FLV file does not need it, and all six of our readers worked without it.

How Do You Check an FLV File? Six steps, and only one of them decodes frames

Check an FLV file in six steps. Read the first 13 bytes, the first tag header and the tags with our 52 line script. Only the last step decodes frames. The script reads 13 bytes and 8 tags and then stops.

The first three reads need no Python. The xxd command prints bytes, and the file command names the type of an FLV file. For bbb.flv the reads below show the letters FLV, a flag byte of 5 and a first tag of type 18.

Steps 2 to 4 on one FLV file
xxd -g 1 -l 13 bbb.flv
00000000: 46 4c 56 01 05 00 00 00 09 00 00 00 00           FLV..........
xxd -g 1 -s 13 -l 11 bbb.flv
0000000d: 12 00 02 52 00 00 00 00 00 00 00                 ...R.......
file -b bbb.flv
Macromedia Flash Video

Read the first line from the left. 46 4c 56 is FLV, 01 is the version and 05 is the flags byte. 00 00 00 09 is the header size, and the last four bytes are the first PreviousTagSize, 0.

The second line is the first tag header, with type 12 (18, script) and a size of 00 02 52, which is 594.

Check FLV files with Python

The script reads the 13 header bytes and then up to 8 tags. It prints the version, the streams the flags promise and every tag with its time stamp, size and codec. It never decodes a frame, and it never changes the file.

Read the header and the first tags of an FLV file
#!/usr/bin/env python3
"""flv_peek.py - read the header and the first tags of an FLV file and print what they say. Decodes no frame.
Usage: python3 flv_peek.py FILE [FILE ...]
"""
import os, struct, sys

VIDEO = {2: "Sorenson H.263", 3: "Screen video", 4: "VP6", 5: "VP6 with alpha", 6: "Screen video 2", 7: "H.264"}
AUDIO = {0: "PCM", 1: "ADPCM", 2: "MP3", 3: "PCM little endian", 4: "Nellymoser", 5: "Nellymoser", 6: "Nellymoser",
         7: "G.711 A-law", 8: "G.711 mu-law", 10: "AAC", 11: "Speex", 14: "MP3 8 kHz"}

def describe(kind, d):
    if not d:
        return {8: "audio", 9: "video", 18: "script"}[kind] + ", empty"
    if kind == 18:
        n = struct.unpack(">H", d[1:3])[0] if d[:1] == b"\x02" else 0
        return "script, " + (d[3:3 + n].decode("latin1") if n else "no name")
    if kind == 9:
        codec, frame = d[0] & 15, "keyframe" if d[0] >> 4 == 1 else "other frame"
        if d[0] & 0x80: return "video, enhanced tag " + d[1:5].decode("latin1")
        return "video, %s%s" % (VIDEO.get(codec, "codec %d" % codec), ", configuration" if codec == 7 and d[1] == 0 else ", " + frame)
    fmt = d[0] >> 4
    return "audio, %s%s" % (AUDIO.get(fmt, "format %d" % fmt), ", configuration" if fmt == 10 and d[1] == 0 else "")

def peek(path, limit=8):
    name, size = os.path.basename(path), os.path.getsize(path)
    with open(path, "rb") as f:
        head = f.read(13)
        if head[:3] != b"FLV":
            return "%s: not an FLV file, the first 3 bytes are %s" % (name, head[:3].hex(" ") or "missing")
        offset, flags = struct.unpack(">I", head[5:9])[0], head[4]
        has = [w for bit, w in ((1, "video"), (4, "audio")) if flags & bit]
        out = ["%s: FLV version %d, %s, header %d bytes" % (name, head[3], " and ".join(has) or "no stream declared", offset)]
        pos = offset + 4; f.seek(pos)
        for n in range(1, limit + 1):
            tag = f.read(11)
            if not tag:
                out.append("%s: the file ends after %d tags" % (name, n - 1)); break
            if len(tag) < 11:
                out.append("%s: tag %d is cut short, only %d of 11 header bytes" % (name, n, len(tag))); break
            kind, length = tag[0], int.from_bytes(tag[1:4], "big")
            if kind not in (8, 9, 18):
                out.append("%s: tag %d is not audio, video or script (type %d, %d bytes)" % (name, n, kind, length)); break
            if pos + 11 + length + 4 > size:
                out.append("%s: tag %d claims %d bytes and the file ends first" % (name, n, length)); break
            ms = int.from_bytes(tag[4:7], "big") | tag[7] << 24
            out.append("%s: tag %d at %d ms, %d bytes, %s" % (name, n, ms, length, describe(kind, f.read(min(length, 16)))))
            pos += 15 + length; f.seek(pos)
    return "\n".join(out)

if __name__ == "__main__":
    if len(sys.argv) < 2: sys.exit(__doc__)
    for p in sys.argv[1:]: print(peek(p))

Here is what it printed for three files. They are an H.264 and AAC clip, an old Sorenson and ADPCM file and a file with the newer hvc1 video tag.

Three files
python3 flv_peek.py bbb.flv zelda.flv test_hevc.flv
bbb.flv: FLV version 1, video and audio, header 9 bytes
bbb.flv: tag 1 at 0 ms, 594 bytes, script, onMetaData
bbb.flv: tag 2 at 0 ms, 46 bytes, video, H.264, configuration
bbb.flv: tag 3 at 0 ms, 4 bytes, audio, AAC, configuration
bbb.flv: tag 4 at 0 ms, 142 bytes, audio, AAC
bbb.flv: tag 5 at 23 ms, 142 bytes, audio, AAC
bbb.flv: tag 6 at 47 ms, 150 bytes, audio, AAC
bbb.flv: tag 7 at 70 ms, 151 bytes, audio, AAC
bbb.flv: tag 8 at 80 ms, 23908 bytes, video, H.264, keyframe
zelda.flv: FLV version 1, video and audio, header 9 bytes
zelda.flv: tag 1 at 0 ms, 537 bytes, video, Sorenson H.263, keyframe
zelda.flv: tag 2 at 0 ms, 642 bytes, audio, ADPCM
zelda.flv: tag 3 at 46 ms, 642 bytes, audio, ADPCM
zelda.flv: tag 4 at 83 ms, 521 bytes, video, Sorenson H.263, other frame
zelda.flv: tag 5 at 92 ms, 642 bytes, audio, ADPCM
zelda.flv: tag 6 at 139 ms, 642 bytes, audio, ADPCM
zelda.flv: tag 7 at 166 ms, 537 bytes, video, Sorenson H.263, other frame
zelda.flv: tag 8 at 185 ms, 642 bytes, audio, ADPCM
test_hevc.flv: FLV version 1, video and audio, header 9 bytes
test_hevc.flv: tag 1 at 0 ms, 292 bytes, script, onMetaData
test_hevc.flv: tag 2 at 0 ms, 120 bytes, video, enhanced tag hvc1
test_hevc.flv: tag 3 at 0 ms, 2 bytes, audio, AAC, configuration
test_hevc.flv: tag 4 at 0 ms, 4 bytes, audio, AAC, configuration
test_hevc.flv: tag 5 at 0 ms, 309 bytes, audio, AAC
test_hevc.flv: tag 6 at 21 ms, 126 bytes, video, enhanced tag hvc1
test_hevc.flv: tag 7 at 21 ms, 38619 bytes, video, enhanced tag hvc1
test_hevc.flv: tag 8 at 21 ms, 285 bytes, audio, AAC

The first line of every answer gives the version and the streams. Tags with codec settings say configuration, and a keyframe says keyframe. Damaged files print a reason, and the next listing shows three of them.

Four files it refused
python3 flv_peek.py A2.flv B2.flv C3.flv flv1_nelly.flv
A2.flv: not an FLV file, the first 3 bytes are 00 00 00
B2.flv: not an FLV file, the first 3 bytes are 12 00 02
C3.flv: FLV version 1, video and audio, header 9 bytes
C3.flv: tag 1 claims 594 bytes and the file ends first
flv1_nelly.flv: FLV version 1, video and audio, header 9 bytes
flv1_nelly.flv: tag 1 is not audio, video or script (type 15, 248 bytes)

What the script found in our FLV files

Our script on FLV files and damaged copies
Result Cases
Kind named (41 of 43) The script read 41 FLV files. One of them is the empty file, where it says the file ends after 0 tags.
Refused good files (2) It refused two valid files that ffmpeg decodes. One has a tag of type 15 and the other has stray bytes between tags.
Refused copies (7 of 39) A1, A2, B1 and B2 broke the signature. A7 and A8 changed the header size, and C3 was cut inside its first tag.
Passed with damage (32 of 39) 10 of the 32 decode fewer than 250 frames, because the script reads no frame.
Files changed (0) The SHA256 hash of all 54 files we fetched matched the hash we took before the tests.

The script reads tags and nothing else. It does not decode a frame, check a PreviousTagSize or look at the end of the file. A cut or padded FLV file can pass it, so the damaged copies matter.

Check order for any FLV file

  1. Copy the FLV file, write its SHA256 hash and work on the copy.
  2. Read the first 13 bytes. The first 3 must be 46 4c 56, the letters FLV. The last 4 must be zero bytes.
  3. Read byte 4. A value of 5 means video and audio, 1 means video only and 4 means audio only. The flags are a promise and not a proof.
  4. Read the first tag header at byte 13. A type of 12, 08 or 09 is a script, audio or video tag.
  5. Read the tags with our script. It names the codecs of the first 8 tags and says where a tag stops making sense.
  6. Compare with a second reader and count the video frames with ffprobe. Only this step decodes, and a difference means damage or a reader limit.

Is an FLV File Safe to Open? The file is data, and the risk sat in Flash Player

An FLV file is data that a player reads, so opening one with a reader is safe. The risk sat in Flash Player, which Adobe ended in 2020. A name proves nothing, because renamed copies still read as FLV files.

We played none of our 43 FLV files and scanned none for malware. All six readers only read bytes, and the SHA256 hash of every file matched after every test. The files come from public test folders, so their contents are not the worry on this page.

Reading the header Safe. Our six readers only read bytes, and no hash changed.
Writing down the hash Safe, and it shows which file you received.
A script tag 36 of our 43 FLV files have one. They name onMetaData in 35 files and onTimeCoordInfo in one.
Trusting the name A copy named bbb.flv.exe still read as an FLV file in all six readers.
Installing Flash Player FileInfo says Adobe no longer develops it and recommends uninstalling it.

The rename test

We copied one FLV file to 10 names, like bbb.mp4, bbb.jpg, bbb.txt, bbb.docx, a name with no ending and bbb.flv.exe. All six readers read all 10 as the same FLV file. The ending is a label, and the first bytes decide what a file is.

The reverse also works. We named an MP4, an MKV, an AVI, a MOV and an F4V file with the ending .flv. ffprobe, MediaInfo, hachoir and the file command named the actual container. 7-Zip refused all five, and OpenCV opened them.

If your file manager hides endings, bbb.flv.exe can look like a video. Show full file names, and read the first bytes of anything you doubt.

What Flash Player was, and why it ended

Flash Player was the browser plug in that played SWF and FLV files. Adobe ended it on 31 December 2020, as the SWF article reports. FileInfo recommends removing it. A current player reads an FLV file without Flash.

What a script tag shows

A script tag is a block of named values. In our files it names onMetaData or onTimeCoordInfo and lists the duration, the picture size and an encoder. We read the names and the values, and we found no program in any of them.

Not sure? Check it first. Copy the hash, read the header with our script and compare a second reader. If the FLV file came in an email you did not expect, delete the message and ask the sender through another route.

Why Will Your FLV File Not Play? Eight causes, and what to do about every one

Most FLV files that will not play fail for one of eight reasons. Read the first bytes first, then the tags, then count the frames. Our six readers refused 4 of 39 damaged copies and opened 22 that still lost frames or sound.

We read 43 FLV files and 39 damaged copies with six readers and a full decode. The table groups what we saw into eight causes. The number in brackets matches the cause.

Every row says what happens and what to try. The fixes work on a copy, and none changes the original. A reader that says nothing is no sign that the video plays.

Eight causes of an FLV file that will not play
Cause Result and fix
A damaged header (1) All six readers refused 4 of our 39 damaged copies, the ones with a bad signature or the first 9 or 13 bytes removed. Fix: Download the file again and compare the SHA256 hash. We tested no repair.
A cut download (2) A copy cut in half opened in all six readers and decoded 132 of 250 frames. A copy cut to 100 bytes was refused by three. Fix: Compare the size and the hash with the source, then download again.
A file that is not FLV (3) An MP4, MKV, AVI or MOV file named .flv has no FLV at byte 0, and four readers named the true container. Fix: Read the first 3 bytes. If they are not 46 4c 56, name the type with the file command and open it as that type.
Broken codec settings (4) Zeroing the AVC or AAC config left the file readable in five readers and gave 0 frames. Fix: Count the frames with ffprobe, then ask the source for a new export. We tested no repair.
Sound only or empty (5) 9 of our FLV files have sound and no picture, and one is 13 bytes long with no tag. A player shows nothing for them. Fix: Read the flags byte and the tag list. A flags value of 4 means audio only.
Odd tags (6) One file has a tag of type 15. Two have a wrong PreviousTagSize in every tag and one has stray bytes between tags. 7-Zip refused three of them. Fix: Try ffmpeg, which decoded three of the four.
A player that wants Flash (7) Adobe ended Flash Player in 2020. Our ffmpeg decode worked for all 8 Sorenson, 4 VP6 and 1 Screen video files, so an old codec is no reason to give up. Fix: Use a current player like VLC media player, and do not install Flash Player.
A broken soundtrack (8) Copy F2 changes the audio ID to MP3. All six readers opened it and 250 frames decoded, but ffprobe reported a missing MP3 header. Fix: Read the audio format with our script, play the file in two players and ask the source for a new copy.

Check an FLV file that will not play, step by step

We tested the reading steps on Python 3.13 and Linux. We played no file and tested no media player, and the steps keep the original untouched at every point.

  1. Copy the FLV file, write its SHA256 hash and work on the copy.
  2. Read the first 13 bytes with the check steps. If the first 3 bytes are not FLV, name the type with the file command.
  3. Read the tags with the header script. A refusal names the tag where the file stops making sense.
  4. Count the frames with the ffprobe command. Readable tags and 0 frames point to broken codec settings.
  5. If the file is smaller than the source says, download it again and compare the hash.
  6. If only the sound fails, read the audio format with the script and try a second player.
  7. If you need another format, copy the streams or transcode, as the convert part shows.

What to send a helper

Short messages get faster answers. Include the details below, and add the output of the script. Its first line gives the version and the streams, and the next lines name every tag.

A message that gets an answer
Subject: FLV file will not play
File: name, size in bytes and SHA256 hash
Header: the output of flv_peek.py
Frames: the count from ffprobe
System: player name, version and system
What happens: the exact words of the error
Source: where the FLV file came from and when it was copied

What no step can fix

A lost header or a cut file A header that is gone takes the video with it. Only a new download or a backup brings it back.
Zeroed codec settings The tags stay readable and the frames do not decode. We found no repair.
Odd tags ffmpeg decoded three of our four odd files. A reader that refuses one is not proof the video is lost.
An old codec ffmpeg decoded every Sorenson, VP6 and Screen video file in our set.
A file with sound only Nothing is missing. The file never had a picture.
A file with another type Read the first bytes and open it as the type it is.

Do not try online repair sites. A site that offers to fix any video for free can keep the upload. Try the steps above on a copy first.

Can You Convert an FLV File? A stream copy worked for 23 of 42 files in MP4

A stream copy moved 23 of our 42 FLV files into MP4 and 40 into MKV. Files with Sorenson, VP6 or Speex need a transcode, which worked for 18 of the 19 refused. A copy keeps the picture as it is, and a transcode changes it.

Converting an FLV file means writing its streams in another container. If the codecs fit, ffmpeg copies the packets and compresses nothing again. The table lists what we found, and every row names its source.

Conversions and what we found
Type Finding and source
FLV to MP4 by stream copy ffmpeg wrote an MP4 for 23 of 42 FLV files. All 23 use H.264, HEVC or AAC. The 19 refused files use Sorenson, VP6, Screen video, Speex, ADPCM, Nellymoser or G.711, or are h264_mp3.flv. Source: Our tests.
FLV to MKV by stream copy ffmpeg wrote an MKV for 40 of 42 FLV files. It refused flv1_nelly.flv and h264_mp3.flv. Source: Our tests.
Packets after the copy 30 of 36 MP4 streams and 54 of 63 MKV streams matched the original packet for packet. The rest had equal counts and different content, and one MKV stream had fewer packets. We did not trace why. Source: Our tests.
FLV to MP4 by transcode ffmpeg wrote H.264 and AAC for 18 of the 19 files that the copy refused. The one failure is h264_mp3.flv. We did not play the outputs. Source: Our tests.
FLV to F4V F4V is built on the ISO base media format, which MP4 files use too, per Wikipedia. We tested no F4V writer. Source: Wikipedia.

Copy the streams of an FLV file to MP4

The option -c copy moves the video and the audio into a new container. For bbb.flv the copy is 425,326 bytes. The file command names it an MP4 file, and ffprobe still counts 250 frames. It took no transcode, so the picture is the same.

Copy the streams to MP4
ffmpeg -i bbb.flv -c copy bbb.mp4
file -b bbb.mp4
ISO Media, MP4 Base Media v1 [ISO 14496-12:2003]

Use the same command with the ending .mkv to write a Matroska file. It accepted more of our files than MP4 did. A successful exit is not proof of a good copy, because h264_aac.flv gave an MP4 with an audio stream and no packets.

Transcode when the copy is refused

Sorenson, VP6 and Speex streams do not copy into MP4 in ffmpeg 6.1.1. The command below writes H.264 and AAC instead. The scale filter rounds the picture size to even numbers, because libx264 rejected a height of 233.

Transcode to H.264 and AAC
ffmpeg -i old.flv -vf scale=trunc(iw/2)*2:trunc(ih/2)*2 -c:v libx264 -pix_fmt yuv420p -c:a aac old.mp4

Speex files needed -ac 1 -ar 16000 as well. A transcode loses some quality, so keep the original. We checked that ffmpeg wrote the codecs and played no output.

Check the copy

Count the frames of the copy with the ffprobe command from the open section. The count should match the original. For a copy of bbb.flv it was 250 in both.

Keep the originals. A copy reads the FLV file and never changes it, and our hashes matched. Keep the original beside the new file. Do not upload an unknown FLV file to an online converter, because the upload shares the file.

How Do FLV Files Differ From F4V, SWF and MP4 Files? The first bytes name the type

The first bytes name the type. An FLV file starts with the letters FLV, and an SWF file starts with FWS, CWS or ZWS. An F4V file is built on the MP4 container, and only some FLV streams copy into MP4.

Five types get mixed up because they came from the same years and the same player. The table lists what separates them. Every row ends with its source.

FLV, F4V, SWF, MP4 and MKV files compared
Format What separates it
FLV file 46 4c 56 at byte 0 and the version 01. All 43 of our files. It stores video and audio as tags. Source: Our tests.
F4V file Built on the ISO base media format and released on 3 December 2007, per Wikipedia. The F4V file we found starts with 00 00 00 1c and the letters ftyp. Source: Wikipedia and our tests.
SWF file Begins with CWS, FWS or ZWS, per Wikipedia. It is the Flash movie file, and our SWF overview covers it. Source: Wikipedia.
MP4 file Uses the same container family as F4V. We used ffmpeg to copy the streams of 23 of our 42 FLV files into one. Our MP4 page covers the format. Source: Our tests.
MKV file A Matroska file. ffmpeg copied the streams of 40 of our 42 FLV files into one. Source: Our tests.

Separate them with our script

Our script reads the first 3 bytes and prints a refusal for a file that does not start with FLV. For our F4V file it would say the first 3 bytes are 00 00 00. It never guesses a type, and the file command names the type it finds.

Why the ending misleads

We named an MP4, an MKV, an AVI, a MOV and an F4V file with the ending .flv. ffprobe, MediaInfo, hachoir and the file command all named the true container. The ending is a label, and the first bytes say what the file is.

Which one do you have

An FLV file Check it with the check section before you convert it.
A Flash movie Read the SWF file format page for the Flash movie format.
An MP4 or F4V file Read the MP4 file format page for the container that F4V is built on.
A renamed program Read the EXE file format page if a file named .flv.exe will not open as a video.

What Is the FLV File Format Made Of? The facts we could check, and where they came from

FLV files use a simple tag format that Macromedia developed and Adobe later took over. The facts below come from Wikipedia, PRONOM, IANA, FileInfo and our checks of 43 FLV files and 39 damaged copies.

Facts about the FLV file format
Part What we could check
Maker Macromedia, later Adobe. Wikipedia gives 10 September 2003 for the first release. PRONOM says 2002, and FileInfo ties it to Flash Player 7 in 2003.
Name Flash Video, or FLV. FileInfo calls it the Adobe Flash Video container format.
First bytes 46 4c 56 (FLV) at byte 0, then the version 01, a flags byte and a header size of 00 00 00 09.
Flags Wikipedia gives 4 for audio and 1 for video, with 5 as the default. All 43 of our files matched their tags.
Tag types 8 for audio, 9 for video and 18 for script data, per Wikipedia. Every tag has an 11 byte header and a 4 byte size after the data.
Video codecs Wikipedia names Sorenson Spark, VP6, Screen video and H.264. We found those and one HEVC file.
Audio formats Wikipedia names MP3, ADPCM, Nellymoser, Speex, AAC and PCM. We found AAC, MP3, Speex, ADPCM, Nellymoser, A-law and mu-law.
Endings .flv. Wikipedia lists .f4v and others for the related F4V formats.
Media type video/x-flv, per Wikipedia and PRONOM. IANA lists no FLV entry in its video registry.
Detection 46 4c 56, then the version. The file command names it "Macromedia Flash Video".
Related formats F4V is built on the MP4 container. SWF is the Flash movie format, and Wikipedia says it begins with FWS, CWS or ZWS.
Our tests 43 FLV files, 39 damaged copies, 10 renamed copies, six readers and a 52 line script on Linux.

About the values we list

Facts about structure come from Wikipedia and from our FLV files, and every row names its source. We could not open Adobe's own FLV specification, so we make no claim that rests on it alone.

Sources differ on the first year, and we print both. The media type is a registry fact, and IANA has no FLV entry. We list no price, because no tool on this page is sold.

What we left out

We played no FLV file, and we tested no media player, browser or phone. We tested no encrypted file and no live stream. Our largest file is 41,900,095 bytes, so we say nothing about files in the gigabytes.

Our 43 FLV files come from 6 public test folders and many are odd on purpose. Our damage copies change one thing at a time in one file. A reader that fails on our files can still work on yours.

Sources checked

For the format, see the Wikipedia article on Flash Video and the PRONOM record for Flash Video. For the Flash movie format, see the Wikipedia article on SWF files.

For the media type, see the IANA registry of video media types. For the ending and the programs, see the FileInfo page on FLV files.

Every count came from the files and scripts in our research folder.

Frequently Asked Questions About FLV Files

What is an FLV file?

An FLV file is a Flash Video file. It starts with the letters FLV, and a chain of tags stores the video, the audio and the metadata. Adobe ended Flash Player in 2020, and current tools still open FLV files.

How do I open an FLV file?

Use a video player like VLC media player, or a tool like ffprobe, MediaInfo or 7-Zip. We read all 43 of our FLV files with six readers, and none of them needs Flash. Do not install Flash Player to open one.

What does FLV stand for?

FLV stands for Flash Video. FileInfo calls it the Adobe Flash Video container format, and Macromedia developed it first. The letters FLV are also the first three bytes of every FLV file.

Is an FLV file safe to open?

Reading one with a video tool is safe, because the file is data. The risk sat in Flash Player, which Adobe ended in 2020. We played none of our 43 files and scanned none for malware, so check the source of any file you do not know.

What is inside an FLV file?

A 9 byte header, then tags for the metadata, the video and the audio. Our example, bbb.flv, is 430,172 bytes long with 686 tags. Its first tag starts at byte 13, and its first keyframe starts at byte 1,347.

How do I convert an FLV file to MP4?

Copy the streams with ffmpeg and the option -c copy. That worked for 23 of our 42 FLV files, the ones with H.264, HEVC or AAC. The other 19 need a transcode, which worked for 18 of them.

Why will my FLV file not play?

Eight causes cover most cases. They include a damaged header, a cut download, a file that is not FLV, broken codec settings and a file with sound only. Read the first bytes first, then count the frames.

What is the difference between FLV and MP4?

They are different containers. An FLV file starts with FLV, and an MP4 file starts with an ISO base media header. We used ffmpeg to copy the streams of 23 of our 42 FLV files into MP4 without a transcode.

What is the difference between FLV and F4V?

F4V is built on the ISO base media format that MP4 files use, and Wikipedia gives 3 December 2007 for its release. An FLV file uses its own tag format. The F4V file we found starts with the letters ftyp.

How can I check if an FLV file is damaged?

Read the first 13 bytes, then the tags, then count the frames. Six readers split on 13 of our 39 damaged copies. Four copies that every reader opened still lost frames, so a frame count is the better test.

Can a renamed FLV file still be a video?

Yes. We copied one FLV file to 10 names, like bbb.mp4 and bbb.txt, and all six readers read all 10 as the same file. The ending is a label, and the first bytes decide what the file is.

What is the difference between an FLV file and an SWF file?

An SWF file is a Flash movie and begins with FWS, CWS or ZWS, per Wikipedia. An FLV file is a video container that begins with FLV. Both were made for Flash Player.

Still Stuck With an FLV File? Seven routes out, depending on what went wrong

Your FLV file will not play

Read the first bytes and count the frames. The cause table lists what to try in order.

You need another format

Copy the streams or transcode. The convert part shows both commands.

Is it an MP4 or F4V file? The page on MP4 files covers the container that F4V is built on.

Is it a Flash movie? The page on SWF files covers the Flash movie format, with its own tests.

Is it a renamed program? The page on EXE files covers Windows programs, which a renamed copy can imitate.

Do you need an animated image? The page on GIF files covers the image format.

Is it a file type you do not know? Browse the file extension resource library, or send it on the submit a file type page.