背景:
因为项目要播放一个宣传和讲解视频,视频文件过大,同时还为了节省存储流量,想到了一个方案,用m3u8切片替代mp4。
m3u8:切片播放,可以理解为一个1G的视频文件,自行设置文件分割大小,通过切片,把视频1G分割成若干个小片段,播放的时候由.m3u8文件来指定在某个时间节点播放某个切片,好处就是拖动进度条不需要下载1G的文件,只需要根据m3u8记录的拖动时间的.ts文件进行下载播放。
mp4:文件流,下载完之后再播放,这个1G先转圈圈下载,下载完之后再播放。
实现切片,需要两步
因为项目要播放一个宣传和讲解视频,视频文件过大,同时还为了节省存储流量,想到了一个方案,用m3u8切片替代mp4。
m3u8:切片播放,可以理解为一个1G的视频文件,自行设置文件分割大小,通过切片,把视频1G分割成若干个小片段,播放的时候由.m3u8文件来指定在某个时间节点播放某个切片,好处就是拖动进度条不需要下载1G的文件,只需要根据m3u8记录的拖动时间的.ts文件进行下载播放。
mp4:文件流,下载完之后再播放,这个1G先转圈圈下载,下载完之后再播放。
实现切片,需要两步
一、安装工具
首先我们需要下载所需的工具(ffmpeg)
https://www.gyan.dev/ffmpeg/builds/

将这三个文件放置:
C:\Windows\System32
或者 进入解压目录,按shift + 右键 》》powershell , 进入当前命令窗口
管理员CMD运行:ffmpeg
二、切片
操作命令有很多,可自行查找,这条是一个简单的切片命令。
ffmpeg -i 0.mp4 -codec copy -hls_list_size 0 -strict -2 -f hls G:\项目\郑好\video.m3u8
视频播放地址:https://xxxxxxroutine/video/1/video.m3u8
针对微信小程序播放的FFmpeg M3U8切片配置:
基本命令格式
ffmpeg -i "源目录/input.mp4" -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_playlist_type vod "目标目录/output.m3u8"
微信小程序优化配置
ffmpeg -i "D:/videos/source.mp4" \
-c:v libx264 -profile:v baseline -level 3.0 \
-c:a aac -ar 44100 -b:a 128k \
-s 720x1280 -r 25 -b:v 1500k \
-f hls -hls_time 6 -hls_list_size 0 \
-hls_playlist_type vod \
-hls_segment_filename "D:/output/segment_%03d.ts" \
"D:/output/playlist.m3u8"
关键参数说明
编码格式(必须):
-
-c:v libx264 -profile:v baseline -level 3.0
-
-c:a aac -ar 44100 -b:a 128k
- -hls_list_size 0 - 包含所有片段(默认值5会限制片段数量)
- -hls_playlist_type vod - 设置为点播模式
微信小程序优化:
-
-s 720x1280
-
-r 25
-
-b:v 1500k
-
-hls_time 6
文件路径设置:
-
-hls_segment_filename
-
最后的参数 - M3U8播放列表文件路径
批处理脚本示例
Windows批处理:
@echo off
chcp 65001 >nul
echo 开始视频转换...
set SOURCE_DIR=D:\ChengDev\视频切片
set OUTPUT_DIR=D:\ChengDev\视频切片\output
REM 检查源目录是否存在
if not exist "%SOURCE_DIR%" (
echo 错误:源目录不存在 %SOURCE_DIR%
pause
exit /b 1
)
REM 创建输出目录
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
REM 检查是否有MP4文件
dir "%SOURCE_DIR%\*.mp4" >nul 2>&1
if errorlevel 1 (
echo 错误:源目录中没有找到MP4文件
pause
exit /b 1
)
REM 转换所有MP4文件 - 优化参数匹配5.17Mbps码率
for %%f in ("%SOURCE_DIR%\*.mp4") do (
echo 正在转换: %%~nxf
ffmpeg -i "%%f" ^
-c:v libx264 ^
-preset medium ^
-crf 23 ^
-maxrate 6000k ^
-bufsize 12000k ^
-profile:v high ^
-level 4.0 ^
-c:a aac ^
-b:a 128k ^
-ar 44100 ^
-f hls ^
-hls_time 2.4 ^
-hls_list_size 0 ^
-hls_flags delete_segments ^
-hls_segment_type mpegts ^
-hls_segment_filename "%OUTPUT_DIR%\%%~nf_%%03d.ts" ^
"%OUTPUT_DIR%\%%~nf.m3u8"
if errorlevel 1 (
echo 转换失败: %%~nxf
) else (
echo 转换完成: %%~nxf
REM 简单处理M3U8文件
if exist "%OUTPUT_DIR%\%%~nf.m3u8" (
findstr /v "ALLOW-CACHE" "%OUTPUT_DIR%\%%~nf.m3u8" > "%OUTPUT_DIR%\%%~nf_temp.txt"
if exist "%OUTPUT_DIR%\%%~nf_temp.txt" (
copy "%OUTPUT_DIR%\%%~nf_temp.txt" "%OUTPUT_DIR%\%%~nf.m3u8" >nul
del "%OUTPUT_DIR%\%%~nf_temp.txt"
)
)
echo 生成的M3U8: %OUTPUT_DIR%\%%~nf.m3u8
)
)
echo.
echo 所有转换完成!
echo 输出目录: %OUTPUT_DIR%
pause
重要注意事项
-
编码格式必须兼容:
-
视频:H.264 Baseline Profile
-
音频:AAC LC
-
-
文件路径:
-
使用绝对路径避免错误
-
Windows路径用反斜杠或双引号
-
-
微信小程序限制:
-
单个视频文件不超过50MB
-
建议码率不超过2Mbps
-
支持HTTPS协议访问
-