![FFMPEG 在从 mp4 编码为 HLS 时出现故障](https://linux22.com/image/1589206/FFMPEG%20%E5%9C%A8%E4%BB%8E%20mp4%20%E7%BC%96%E7%A0%81%E4%B8%BA%20HLS%20%E6%97%B6%E5%87%BA%E7%8E%B0%E6%95%85%E9%9A%9C.png)
在过去的两天里,我一直在试图弄清楚为什么 FFMPEG 在使用 xlib264 将 h264 mp4 转码为 HLS 时会产生故障视频。每个视频都会发生这种情况。故障如下所示:
这是原始 mp4 文件:
编辑:不是整个视频都是这样,只有一些帧,有时是整个片段。我尝试的每个视频都会发生这种情况,来自不同的来源。我不确定是什么原因造成的。我测试了许多选项,包括每两秒插入一次关键帧,调整 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。不要在清单上应用过滤器。