single.php

ffmpegで[Error parsing ADTS frame header!]が表示される場合の対処法

EXTM3U形式(拡張子 .m3u8)を利用して動画変換をしていた時に[Error parsing ADTS frame header!]が表示された場合の対処法を備忘録的に投稿しておきます。

Error parsing ADTS frame header!

[FFmpeg]で「EXTM3U」形式のファイルを利用して動画ファイルを作成する場合に次のような[Error parsing ADTS frame header!]エラーが発生しました。

/bin/ffmpeg -protocol_whitelist file,http,https,tcp,tls -i "H:\Users\...\Downloads\test.m3u8" -c copy "H:\Users\...\Downloads\test.mp4"

色々調べて音声コーデックのオプションを追加してみたり、読み取りの遅延タイムを調整しても解決せず困っていたんですが、意外に簡単な方法で回避ができたので紹介します。

[EXTM3U]ファイルを分割してみる

[Error parsing ADTS frame header!]エラーで上手く行かない場合には「EXTM3U」形式の内容を分割してみると、エラーを回避できる場合があります。

例えば、以下のようなファイルの場合には

[sample.m3u8]
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:12
#EXTINF:10.123456,
0000.mp4
#EXTINF:10.123456,
0001.mp4
#EXTINF:10.123456,
0002.mp4
#EXTINF:10.123456,
0003.mp4
#EXTINF:10.123456,
0004.mp4
#EXTINF:10.123456,
0005.mp4
#EXTINF:10.123456,
0006.mp4
#EXTINF:10.123456,
0007.mp4
#EXTINF:10.123456,
0008.mp4
#EXTINF:10.123456,
0009.mp4
#EXTINF:10.123456,
0010.mp4
#EXT-X-ENDLIST

2つのファイルに分割されるように分割します。

[sample-1-5.m3u8]
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:12
#EXTINF:10.123456,
0000.mp4
#EXTINF:10.123456,
0001.mp4
#EXTINF:10.123456,
0002.mp4
#EXTINF:10.123456,
0003.mp4
#EXTINF:10.123456,
0004.mp4
#EXTINF:10.123456,
0005.mp4
#EXT-X-ENDLIST
[sample-6-10.m3u8]
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:12
#EXTINF:10.123456,
0006.mp4
#EXTINF:10.123456,
0007.mp4
#EXTINF:10.123456,
0008.mp4
#EXTINF:10.123456,
0009.mp4
#EXTINF:10.123456,
0010.mp4
#EXT-X-ENDLIST

分割した2つのファイルを使って、FFmpegのコマンドを実行します。

.\/bin/ffmpeg -protocol_whitelist file,http,https,tcp,tls -i 'sample-1-5.m3u8' -c copy 'sample-1-5.mp4'
.\/bin/ffmpeg -protocol_whitelist file,http,https,tcp,tls -i 'sample-6-10.m3u8' -c copy 'sample-6-10.mp4'

分割してもエラーになる場合は、もっと細かく分割してみます。

分割して変換したファイルを結合

ここまで出来たら、後は分割して変換したファイルを結合します。

次のようなテキストファイルを用意して、結合したいファイルをリストにします。

[margelist.txt]
file 'sample-1-5.mp4'
file 'sample-6-10.mp4'

後は、次のコマンドを実行して新しいファイルに結合します。

.\/bin/ffmpeg -safe 0 -f concat -i 'margelist.txt' -c copy 'sample.mp4'

新しい動画ファイルが作成されていれば、完成です。

まとめ

今回はEXTM3U形式(拡張子 .m3u8)を利用して動画変換をしていた時に[Error parsing ADTS frame header!]エラーが表示された場合の理由について紹介しました。

音声コーデックのオプションや、遅延時間の調整で回避できるという記事も見つけましたが、回避できない場合には EXTM3U形式(拡張子 .m3u8)の内容を分割すると回避できる場合もあるようです。

EXTM3U形式から[FFmpeg]で変換する場合に[Error parsing ADTS frame header!]エラーが発生する人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です