You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg为WMV、AVI生成m3u8及TS分片?(复用命令报错)

解决FFmpeg处理WMV/AVI生成m3u8及TS分片的问题

首先得说清楚你之前命令出错的核心原因:

  • 你用的-vbsf h264_mp4toannexb是专门给MP4里的H.264视频做格式转换的(把MP4用的AVCC格式转成TS要求的Annex B格式),但WMV和AVI里的视频编码大概率不是H.264(比如WMV常用WMV3编码,老AVI可能用MPEG-4或DivX),这个滤镜自然会报错。
  • -codec copy直接复制原编码的做法也有问题,因为TS容器只支持特定的编码格式(比如H.264/H.265视频、AAC/MP3音频),原文件的编码如果不在这个列表里,根本没法直接封装到TS里。

接下来给你分两种场景的解决方案:

场景1:原文件编码本身兼容TS容器

先确认一下你的WMV/AVI用的是什么编码,运行这个命令查看:

ffmpeg -i PalivalaBadraVatakam.avi

在输出里找类似这样的行:

Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 50 tbc
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s

如果视频是H.264、音频是AAC/MP3这类TS兼容的编码,那只需要去掉那个不适用的滤镜,直接复制编码即可:

ffmpeg -i PalivalaBadraVatakam.avi -codec copy -map 0 -f segment -segment_list palivaala.m3u8 -segment_time 10 palivaala%03d.ts

(注:如果还是报错,可能是AVI里的H.264是AVCC格式,可以试试把旧的-vbsf换成新版FFmpeg的写法-bsf:v h264_mp4toannexb)

场景2:原文件编码不兼容TS容器(大部分WMV和老AVI属于这种)

这种情况必须把视频转成H.264、音频转成AAC(TS最通用的兼容编码组合),命令如下:

处理AVI文件:

ffmpeg -i PalivalaBadraVatakam.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -map 0 -f segment -segment_list palivaala.m3u8 -segment_time 10 palivaala%03d.ts

处理WMV文件:

ffmpeg -i input.wmv -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -map 0 -f segment -segment_list output.m3u8 -segment_time 10 output%03d.ts

参数说明:

  • -crf 23:控制视频质量,数值越小质量越高(18-28是常用范围,23是默认)
  • -preset medium:平衡编码速度和压缩效率,可选fast(更快)或slow(质量更好但更慢)
  • -b:a 128k:设置音频比特率,保证音频质量

这样处理后生成的TS分片和m3u8就能正常播放了。

内容的提问来源于stack exchange,提问作者Sat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:05:21