FFmpeg生成多清晰度HLS视频遇问题:自定义分辨率未生效求助
解决FFmpeg生成HLS时自定义分辨率不生效的问题
嘿,我看到你在尝试用FFmpeg生成不同清晰度的m3u8流时遇到了分辨率没变化的问题——这其实是个很典型的新手误区,我来帮你理清问题并给出修复方案!
问题根源
你当前命令里的-vcodec copy(或者缩写-c:v copy)是直接复制原始视频流,这会让FFmpeg跳过所有需要重新编码视频的操作(包括你加的-vf scale滤镜)。滤镜处理必须在视频编码阶段完成,所以直接复制流的话,scale根本不会被执行,视频自然还是原始分辨率。
修复后的命令
把-vcodec copy替换成具体的视频编码器(比如H.264的libx264),这样FFmpeg就会重新编码视频,同时应用scale滤镜。下面是修正后的各分辨率命令:
144p 命令
ffmpeg -i test_video.mp4 -vf scale=256:144 -c:v libx264 -c:a copy -vbsf h264_mp4toannexb -hls_time 2 -hls_list_size 999999999 out/144_vid.m3u8
240p 命令
ffmpeg -i test_video.mp4 -vf scale=426:240 -c:v libx264 -c:a copy -vbsf h264_mp4toannexb -hls_time 2 -hls_list_size 999999999 out/240_vid.m3u8
360p 命令
ffmpeg -i test_video.mp4 -vf scale=640:360 -c:v libx264 -c:a copy -vbsf h264_mp4toannexb -hls_time 2 -hls_list_size 999999999 out/360_vid.m3u8
额外优化小贴士
- 控制视频质量:可以添加
-crf 23参数(默认值,数值范围18-28,越小质量越高),比如:ffmpeg -i test_video.mp4 -vf scale=256:144 -c:v libx264 -crf 23 -c:a copy -vbsf h264_mp4toannexb -hls_time 2 -hls_list_size 999999999 out/144_vid.m3u8 - 平衡编码速度与压缩率:添加
-preset medium(默认),如果想更快编码用-preset fast,想更好的压缩效果用-preset slow。 - 保持宽高比:如果不想强制拉伸视频,可以用
scale=w=256:h=-2(自动计算高度,保持原始宽高比)或者scale=w=-2:h=144(自动计算宽度),避免画面变形。
内容的提问来源于stack exchange,提问作者Rtra
相关产品推荐
相关产品推荐

