下载 FLV 文件有哪些方法?结构识别、ffmpeg 转换与合规边界
FLV(Flash Video)是国内视频网站在 2006~2016 年间最常用的封装格式,现在虽然主流已转向 MP4/HLS,但仍有大量老资源、监控录像、企业内部分发文件以 FLV 存在。本文整理合法获取与处理 FLV 文件的技术方法——只针对你自己拥有版权或已获授权的内容。

一、先了解 FLV 的结构
FLV 是 Adobe 的轻量封装格式,文件头 9 字节:46 4C 56("FLV")+ 版本 + 标志位 + 头长度(通常 09 00 00 00 00);之后是 Tag 序列,每个 Tag 有类型(音频=08、视频=09、脚本/元数据=12)、数据长度、时间戳。
- 视频编码常见 Sorenson Spark(FLV1) 与 H.264/AVC;音频是 MP3 或 AAC-LC;
- 校验是不是 FLV:
head -c 3 file.flv | xxd应显示464c 56,或file xxx.flv返回 “Flash Video”; - 看内部流信息:
ffprobe -v error -show_format -show_streams xxx.flv。
二、下载/提取 FLV 的常用技术途径
1. 浏览器 Network 面板(最直接的定位方法)
按 F12 → Network → 过滤 Media 或输入 flv,刷新页面,就能看到真实请求的 URL 与它的内容类型。这一步的价值在于理解传输机制:老式站点是整段 .flv 一次请求(HTTP 渐进式下载),新式站点则是 m3u8/mpd 分片,此时页面里根本没有 flv 文件,只能先下载分片再合并。
2. 缓存文件位置(自己的历史记录找回)
早期 Flash 播放器会把正在播放的内容写到临时缓存,路径形如:
Windows XP: C:\Documents and Settings\用户名\Local Settings\Application Data\Macromedia\Flash Player\#cache\...
Win7/10: %LOCALAPPDATA%\Mozilla\Firefox\Profiles\xxxx\flashcache (老 Firefox 插件时代)
%LOCALAPPDATA%\Microsoft\Windows\INetCache\... (IE 内核)
这些文件常是无扩展名的 video12345 之类,改名加 .flv 即可用播放器打开——前提是缓存未失效、且文件完整。
3. 用 ffmpeg 处理已知 URL(对自己有权访问的地址):
# 直接下载 ffmpeg -i "http://example.com/my/video.flv" -c copy out.flvFLV 无损转 MP4(推荐,播放兼容性更好)
ffmpeg -i in.flv -c copy -bsf:v h264_mp4toannexb out.mp4
FLV 转 HLS 分片
ffmpeg -i in.flv -c copy -hls_time 6 -hls_list_size 0 seg_%03d.ts
修复损坏(下载中断、尾部缺失)
ffmpeg -err_detect ignore_err -i broken.flv -c copy fixed.flv
注意 -c copy 是转封装、不重编码,速度快且无质量损失。若 FLV 里是老的 FLV1(Sorenson) 编码,MP4 兼容性差,需要重编码:-c:v libx264 -crf 23。
4. RTMP 流(老站点常用协议)
rtmp 是协议不是文件,抓包得到 rtmp://服务器/app/stream?token=... 后用:
ffmpeg -i "rtmp://example.com/app/stream live=1" -c copy out.flv # 或 rtmpdump 工具 rtmpdump -r "rtmp://example.com/app/stream" -o out.flv
5. HLS 分片合并成 FLV/MP4:ffmpeg -i index.m3u8 -c copy out.mp4,或把 .ts 用 concat 拼接(见前文 TS 篇)。
此外还有一些通用的下载管理工具(IDM、aria2、Xtreme Download Manager)会在检测到媒体类型时弹出下载按钮,原理就是解析响应头里的 Content-Type: video/x-flv。
三、FLV 打不开/无法播放的处理
- 播放器不支持:Windows Media Player 原生不支持 FLV,改用 VLC、PotPlayer、MPC-HC(+LAV Filters);
- 只有声音没画面:视频是 H.264 但当前解码器/滤镜没启用硬件解码,或 FLV 的 metadata 里
videocodecid为 7 而滤镜未处理;换 VLC 通常立刻正常; - 时长显示不对/不能拖动:文件缺少
onMetaData的duration/keyframes索引(典型表现是“录制中断”的文件)。修复:ffmpeg -i in.flv -c copy -map_metadata -1 out.flv让 ffmpeg 重建索引,或加-fflags +genpts; - 文件很小但播放失败:常见于下载被截断(HTML 错误页伪装成 flv),用
xxd -l 16看头部是否是46 4c 56,若是3c 21 44 4f("<!DO")那就是 404 页面。
四、批量处理与验证
#!/bin/bash
# 批量把目录下的 flv 无损转 mp4,并跳过失败项
for f in *.flv; do
[ -f "$f" ] || continue
out="${f%.flv}.mp4"
if ffmpeg -nostdin -loglevel error -i "$f" -c copy -bsf:v h264_mp4toannexb "$out"; then
echo "OK $f"
else
echo "FAIL $f"
fi
done
验证脚本:ffmpeg -v error -i 输出.mp4 -f null -,无输出即说明解码全帧通过(这是判断转换质量的可靠方法,比“能打开”严格得多)。
五、必须说明的合规边界
技术本身中立,但获取他人内容时必须守法:
- 只有你自己上传/拥有版权、或已获书面授权、或明确以开放许可声明可下载的内容,才可以下载保存;
- 多数视频平台的用户协议明确禁止抓取与二次分发,绕过技术保护措施可能违反《著作权法》关于技术措施的规定,甚至触犯刑法第 217 条(侵犯著作权罪)与第 285 条(非法获取计算机信息系统数据);
- 把下载内容再传播、用于商业或牟利,风险显著更高;
- 企业场景(监控录像、内网培训视频、自己的直播回放)请优先走平台官方的导出/回放下载功能,那是最省事也最合规的路径。
六、常见问题 FAQ
问:FLV 和 MP4 有什么区别,要不要都转?
答:FLV 头部开销小、适合流式追加写入(当年直播录制首选),但设备兼容性远不如 MP4。建议存档保留原始 FLV,分发用 MP4,转封装不重编码即可,代价很小。
问:现在的视频网站还有 flv 吗?
答:几乎都换成 HTTP-FLV 直播 + HLS/DASH 点播了。HTTP-FLV 用于直播分发(延迟低),但它没有完整索引,本地播放器难以拖动。
核心记忆:结构看文件头、定位用 Network、处理靠 ffmpeg、合法性先确认。
生产内容,同时打通搜索引擎(SEO)与AI搜索引擎(GEO)流量入口的软件! 点击进入365建站器 »
