FFMPEG 在从 mp4 编码为 HLS 时出现故障

FFMPEG 在从 mp4 编码为 HLS 时出现故障

在过去的两天里,我一直在试图弄清楚为什么 FFMPEG 在使用 xlib264 将 h264 mp4 转码为 HLS 时会产生故障视频。每个视频都会发生这种情况。故障如下所示:

720p MP4 H264 转 480p HLS

这是原始 mp4 文件:

原始 MP4 H264 720p

编辑:不是整个视频都是这样,只有一些帧,有时是整个片段。我尝试的每个视频都会发生这种情况,来自不同的来源。我不确定是什么原因造成的。我测试了许多选项,包括每两秒插入一次关键帧,调整 crf 设置、比特率和最大速率,甚至完全删除它们。我总是在编码视频的随机位置遇到这些问题。

这是当前使用的命令,它产生相同的结果:

/root/bin/ffmpeg -i "$f" -c:v libx264 -crf 26 -b:v 1200k -bufsize 2000k -strict -2 -vf "scale=trunc(oh*a/2)*2:480" -c:a aac -b:a 128k -profile:v main -level 4.1 -preset fast -g 48 -keyint_min 48 -pix_fmt yuv420p -flags -global_header -metadata "service_provider=XXX" -hls_time 10 -hls_playlist_type vod -hls_segment_filename /root/OUTPUT/"$URLENCODED"/480p/"$URLENCODED"_%03d.ts -threads 0 /root/OUTPUT/"$URLENCODED"/480p/playlist.m3u8

我现在有点迷茫了。我应该在哪里查找错误?我无法使用 Apple 的 HLS 分析工具,因为我的 Apple 电脑不够新。除此之外,我找到的所有在线工具都没有报告任何错误。

编辑:问题仍然存在于 FFMPEG 版本 N-93594-g09f8b2 和 N-92724-g826655d(后者是昨天从 ffmpeg.org 构建的)

答案1

这个问题与 FFMPEG 完全无关。它是由 Nginx Web 服务器中的 sub_filter 模块引起的,该模块用于将安全令牌应用于视频。我应该先在本地测试一下。对于遇到同样问题的人,请确保对 .ts 片段和(如果使用 HLS 加密).key 文件使用 sub_filter。不要在清单上应用过滤器。

相关内容