3

MP4/M4Aファイルのタグ付けに問題があります。タグ付け操作はA-OKになります。stcoアトムに問題がありましたが、修正しました。しかし今、MP4ファイルを再生すると、mplayerでエラーが発生します。

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x29db0a0] wrong sample count

ただし、ファイルは再生されます。

誰かが私が欠けているものを知っていますか?タグアトムをMP4ファイルに追加するために私が行うことは次のとおりです。新しい絶対ファイル位置参照で更新する必要があるstcoアトムのように、特定のアトムを更新していないように感じます。

  1. 'moov'アトムまで読み込む
  2. 'moovのサイズを更新して、私のタグのサイズを含めます(操作前には存在しませんでした)
  3. すべてのデータ(更新された「moov」サイズを含む)を新しいファイルに書き出します
  4. 'stco'アトムとそれに続く4バイトまで読み込みます(変更する必要のないバージョンとフラグの情報)。
  5. 'stco'ヘッダーを新しいファイルに書き出します
  6. 各4バイトの絶対ファイル位置を読み取り、処理し、読み取り、追加するudtaアトムのサイズだけ上に移動します。更新された各4バイトの場所を新しいファイルに書き込みます。
  7. 'udta'アトム('stco'の直後に続く)を新しいファイルに書き出します。
  8. 入力ファイルの残りの部分(「mdat」アトム)を新しいファイルにコピーします。

ファイル構造のAtomicParsleyダンプは次のとおりです。

Atom ftyp @ 0 of size: 36, ends @ 36
Atom moov @ 36 of size: 61886, ends @ 61922
     Atom mvhd @ 44 of size: 108, ends @ 152
     Atom iods @ 152 of size: 33, ends @ 185
     Atom trak @ 185 of size: 32935, ends @ 33120
         Atom tkhd @ 193 of size: 92, ends @ 285
         Atom mdia @ 285 of size: 32835, ends @ 33120
             Atom mdhd @ 293 of size: 32, ends @ 325
             Atom hdlr @ 325 of size: 37, ends @ 362
             Atom minf @ 362 of size: 32758, ends @ 33120
                 Atom smhd @ 370 of size: 16, ends @ 386
                 Atom dinf @ 386 of size: 36, ends @ 422
                     Atom dref @ 394 of size: 28, ends @ 422
                 Atom stbl @ 422 of size: 32698, ends @ 33120
                     Atom stts @ 430 of size: 24, ends @ 454
                     Atom stsd @ 454 of size: 106, ends @ 560
                         Atom mp4a @ 470 of size: 90, ends @ 560
                             Atom esds @ 506 of size: 54, ends @ 560
                     Atom stsz @ 560 of size: 29548, ends @ 30108
                     Atom stsc @ 30108 of size: 40, ends @ 30148
                     Atom stco @ 30148 of size: 2972, ends @ 33120
     Atom udta @ 33120 of size: 28802, ends @ 61922
         Atom meta @ 33128 of size: 28794, ends @ 61922
             Atom hdlr @ 33140 of size: 34, ends @ 33174
             Atom ilst @ 33174 of size: 28748, ends @ 61922
                 Atom ©ART @ 33182 of size: 33, ends @ 33215
                     Atom data @ 33190 of size: 25, ends @ 33215
                 Atom ©nam @ 33215 of size: 77, ends @ 33292
                     Atom data @ 33223 of size: 69, ends @ 33292
                 Atom ©alb @ 33292 of size: 34, ends @ 33326
                     Atom data @ 33300 of size: 26, ends @ 33326
                 Atom covr @ 33326 of size: 28596, ends @ 61922
                     Atom data @ 33334 of size: 28588, ends @ 61922
Atom mdat @ 61922 of size: 2742564, ends @ 2804486
4

1 に答える 1

3

ダン、私が推測する別の愚かな質問。私はさらに別のID-ten-Tプログラミングエラーでした。'stco'アトムを処理したとき、12バイト(サイズ、アトム名、バージョン、フラグ)でしか読み取れず、'totalentries'の4バイトセクションで読み取るのを忘れていました。そのため、「udta」アトムのサイズを「totalentries」ブロックに追加することになり、FFmpegエラーが発生しました。FFmpegのソースを見て、「stco」の構造を再確認することで、これを理解することができました。

于 2012-03-14T10:28:49.020 に答える