過去2日間、xlib264を使用してh264 mp4をHLSにトランスコードすると、FFMPEGがグリッチなビデオを生成する理由を理解しようとしています。それはすべてのビデオに起こります。グリッチは次のようになります:
これは元のmp4ファイルです:
編集:ビデオ全体がそのようなものではなく、一部のフレームだけであり、場合によってはセグメント全体です。これは、さまざまなソースからの、私が試したすべてのビデオで発生します。何が原因なのかわかりません。キーフレームを正確に2秒ごとに挿入する、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コンピュータがないため、AppleのHLSアナライザツールを使用できません。それ以外は、見つけたすべてのオンラインツールでエラーが報告されません。
編集:問題はFFMPEGバージョンN-93594-g09f8b2とN-92724-g826655d(後者は昨日ffmpeg.orgからビルドされました)全体で持続します
この問題はFFMPEGとはまったく関係ありません。これは、ビデオにセキュアトークンを適用するために使用されていたNginxWebサーバーのsub_filterモジュールが原因でした。最初にローカルでテストする必要がありました。同じ問題が発生した場合は、.tsフラグメントにsub_filterを使用し、(HLS暗号化を使用している場合は).keyファイルに必ず使用してください。マニフェストにフィルターを適用しないでください。