国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC

這篇具有很好參考價(jià)值的文章主要介紹了FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

? ? 最近在開(kāi)發(fā)中遇到了一個(gè)問(wèn)題,即無(wú)法提取到MP4中H264流的關(guān)鍵幀進(jìn)行處理,且保存到本地的AAC音頻也無(wú)法正常播放。經(jīng)過(guò)調(diào)試分析發(fā)現(xiàn),這是由于解封裝MP4得到的H264和AAC是ES流,它們?nèi)笔Ы獯a時(shí)必要的起始碼/SPS/PPSadts頭。

1. MP4格式解析

1.1 MP4簡(jiǎn)介

?MP4封裝格式是基于QuickTime容器格式定義,媒體描述與媒體數(shù)據(jù)分開(kāi),目前被廣泛應(yīng)用于封裝h.264視頻和aac音頻,是高清視頻/HDV的代表。MP4文件中所有數(shù)據(jù)都封裝在Box中(d對(duì)應(yīng)QuickTime中的atom),即MP4文件是由若干個(gè)Box組成,每個(gè)Box有長(zhǎng)度和類(lèi)型,每個(gè)Box中還可以包含另外的子Box,因此,這種包含子Box的也可被稱(chēng)為container Box。Box的基本結(jié)構(gòu)如下圖所示:

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC

?從上圖可知,Box的基本結(jié)構(gòu)由兩部分組成:BoxHeaderBoxData。BoxHeadersize、typelargesize(由size的值確定是否存在)組成,它們分別占4bytes、4bytes、8bytes,其中,size表示的是整個(gè)Box的大小(BoxHeader+BoxData),假如Box的大小超過(guò)了uint32的最大值,size會(huì)被置為1,這時(shí)將由largesize來(lái)表示Box的大小。type表示Box的類(lèi)型,主要有ftyp、moov、mdat等。largesize表示當(dāng)size=1時(shí),用它代替size來(lái)存儲(chǔ)Box的大小;BoxData存儲(chǔ)的是真實(shí)數(shù)據(jù)(不一定是音視頻數(shù)據(jù)),大小由真實(shí)數(shù)據(jù)決定。

【騰訊文檔】FFmpegWebRTCRTMPRTSPHLSRTP播放器-音視頻流媒體高級(jí)開(kāi)發(fā)-資料領(lǐng)取
https://docs.qq.com/doc/DYU5ORlBOdkpCUkNxhttps://docs.qq.com/doc/DYU5ORlBOdkpCUkNx

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC
?

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC

1.2 MP4結(jié)構(gòu)分析

?Box是構(gòu)成MP4文件的基本單元,一個(gè)MP4文件由若干個(gè)Box組成,且每個(gè)Box中還可以包括另外的子Box。MP4格式結(jié)構(gòu)中包括三個(gè)最頂層的Box,即ftypmoov、mdat,其中,ftyp是整個(gè)MP4文件的第一個(gè)Box,也是唯一的一個(gè),它主要用于確定當(dāng)前文件的類(lèi)型(比如MP4);moov保存了視頻的基本信息,比如時(shí)間信息、trak信息以及媒體索引等;mdat保存視頻和音頻數(shù)據(jù)。需要注意的是,moov Box和mdat Box在文件中出現(xiàn)的順序不是固定的,但是ftyp Box必須是第一個(gè)出現(xiàn)。

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC

?當(dāng)然,我們也可以使用MP4Info軟件打開(kāi)一個(gè)MP4文件來(lái)觀察MP4的結(jié)構(gòu)。從下圖可以看到,該軟件不僅能夠看到MP4文件的Box結(jié)構(gòu),還列出了音頻數(shù)據(jù)的格式(mp4a)、采樣率、通道數(shù)量、比特率和視頻的格式(AVC1)、寬高、比特率、幀率等信息。需要注意的是,由于錄制設(shè)備的不同,生成的MP4文件可能會(huì)包含類(lèi)型為free的Box,這類(lèi)Box通常出現(xiàn)在moov于mdata之間,它的數(shù)據(jù)通常為全0,其作用相當(dāng)于占位符,在實(shí)時(shí)拍攝視頻時(shí)隨著moov類(lèi)型數(shù)據(jù)的增多會(huì)分配給moov使用,如果沒(méi)有free預(yù)留的空間,則需要不停的向后移動(dòng)mdat數(shù)據(jù)以騰出更更多的空間給moov。

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC

  • ftype box

?ftyp就是一個(gè)由四個(gè)字符組成的碼字,用來(lái)標(biāo)識(shí)編碼類(lèi)型、兼容性或者媒體文件的用途,它存在于MP4文件和MOV文件中,當(dāng)然也存在于3GP文件中。因此,在MP4文件中,ftyp類(lèi)型Box被放在文件的最開(kāi)始,用于標(biāo)志文件類(lèi)型為MP4,這類(lèi)Box在文件中有且只有一個(gè)。我們利用WinHex工具打開(kāi)一個(gè)MP4文件,就可以看到ftyp Box的具體細(xì)節(jié),如下圖所示:

FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC

?根據(jù)Box的基本結(jié)構(gòu)可知,Box由BoxHeader和BoxData構(gòu)成,其中,BoxHeader又由size、type以及l(fā)argesize(可選)組成。由上圖可以知道,ftyp Box頭部信息為0x00 00 00 18 66 74 79 70,其中,0x00 00 00 18這四個(gè)字節(jié)表示ftyp Box整個(gè)Box的大小size=24字節(jié);0x66 74 79 70表示該Box為ftyp類(lèi)型,它們組成了ftyp的頭部。0x6D 70 34 32(十六進(jìn)制)表示major brand,這里為"mp42"且不同的文件該值可能不一樣;0x00 00 00 00表示minor version。

  • moov box

?moov類(lèi)型box主要用于存儲(chǔ)媒體的時(shí)間信息、trak信息和媒體索引等信息。從MP4Info軟件打開(kāi)的文件可知,moov Box是緊接著ftyp Box的,因此,該Box頭部為0x00 00 28 D1 6D 6F 6F 76,其中,0x00 00 28 D1表示整個(gè)moov Box的大小size=10449字節(jié),0x6D 6F 6F 76表示當(dāng)前Box為moov類(lèi)型,而剩下的字節(jié)數(shù)據(jù)即為BoxData。另外,moov Box還包含了mvhd文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-414892.html

到了這里,關(guān)于FFmpeg從入門(mén)到入魔(3):提取MP4中的H.264和AAC的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • OpenCV 報(bào)錯(cuò):FFMPEG: tag 0x34363258/‘X264‘ is not supported with codec id 27 and format ‘mp4 / MP4‘

    首先說(shuō)一下報(bào)錯(cuò)的地方,是在使用VideoWriter保存視頻時(shí): 出現(xiàn)如下錯(cuò)誤: 經(jīng)過(guò)查找網(wǎng)上資料,發(fā)現(xiàn)是cv2.VideoWriter_fourcc()參數(shù)存在問(wèn)題, 解決方法: 將 修改為: 即可完美解決問(wèn)題。

    2024年02月07日
    瀏覽(39)
  • ios系統(tǒng)下h264編碼的mp4文件無(wú)法播放的問(wèn)題

    ios系統(tǒng)下h264編碼的mp4文件無(wú)法播放的問(wèn)題

    問(wèn)題描述: ios系統(tǒng)下,部分h264編碼的mp4文件在瀏覽器中無(wú)法播放,而另外一些h264編碼的mp4文件正常,同時(shí)在安卓系統(tǒng)下全部正常。 問(wèn)題分析: H.264中有profile(畫(huà)質(zhì)級(jí)別)和level(用來(lái)約束分辨率、幀率和碼率)的概念,profile有四種,分別是Baseline Profile(基本畫(huà)質(zhì))、Ext

    2024年02月11日
    瀏覽(21)
  • [解決思路]關(guān)于h264裸流合成mp4時(shí)時(shí)間戳添加問(wèn)題

    ????????使用GPU編碼(Opencv)生成的h264視頻片段中不包含時(shí)間戳信息,且含有B幀,直接合成mp4后會(huì)導(dǎo)致播放出現(xiàn)問(wèn)題(瞬間播放完成)。因此,在合成時(shí)需要手動(dòng)添加時(shí)間戳。 ? ? ? ? 發(fā)現(xiàn)生成的視頻會(huì) 瞬間播放完成 后,意識(shí)到是時(shí)間戳的問(wèn)題,檢查時(shí)間戳代碼: ? ? ? ?

    2024年01月21日
    瀏覽(42)
  • 音視頻知識(shí):MPEG-4、H264、MP4、AAC之間的關(guān)系

    MPEG-4 一種編碼標(biāo)準(zhǔn)。是國(guó)際標(biāo)準(zhǔn)化組織 (ISO) 主要針對(duì)消費(fèi)類(lèi)應(yīng)用,已經(jīng)針對(duì)運(yùn)動(dòng)圖像壓縮定義的標(biāo)準(zhǔn)。MPEG(Moving Picture Experts Group)標(biāo)準(zhǔn)包括 MPEG1、MPEG2與 MPEG4。 MPEG-4標(biāo)準(zhǔn)目前分為27個(gè)部分,統(tǒng)稱(chēng)為ISO/IEC14496國(guó)際標(biāo)準(zhǔn)。其中第10部分(ISO/IEC 14496-10)就是熟悉的高級(jí)視頻編碼

    2024年02月14日
    瀏覽(40)
  • FFMPEG mp4封裝實(shí)現(xiàn)

    FFMPEG mp4封裝實(shí)現(xiàn)

    FFMPEG mp4錄像 author:lyn date:2022.09.28 version: ffmpeg4.1.3 1.mp4數(shù)據(jù)結(jié)構(gòu) 2.ffmpeg mp4封裝實(shí)現(xiàn) 3.mp4函數(shù)調(diào)用關(guān)系 4.參考資料 1.mp4數(shù)據(jù)結(jié)構(gòu) 1.1mp4簡(jiǎn)介 MP4或稱(chēng)MPEG-4第14部分(英語(yǔ):MPEG-4 Part 14)是一種標(biāo)準(zhǔn)的數(shù)字多媒體容器格式。MPEG-4第14部分的擴(kuò)展名為 .mp4 ,以存儲(chǔ)數(shù)字音頻及數(shù)字視頻

    2023年04月08日
    瀏覽(23)
  • ffmpeg操作MP4視頻封面

    ffmpeg操作MP4視頻封面

    提取視頻封面 視頻流中提取幀圖 3.重新設(shè)置視頻封面 更多參考: https://blog.csdn.net/m0_37624402/article/details/125123818

    2024年02月04日
    瀏覽(21)
  • 20231005使用ffmpeg旋轉(zhuǎn)MP4視頻

    20231005使用ffmpeg旋轉(zhuǎn)MP4視頻

    20231005使用ffmpeg旋轉(zhuǎn)MP4視頻 2023/10/5 12:21 百度搜搜:ffmpeg 旋轉(zhuǎn)90度 https://zhuanlan.zhihu.com/p/637790915 【FFmpeg實(shí)戰(zhàn)】FFMPEG常用命令行 https://blog.csdn.net/weixin_37515325/article/details/127817057 FFMPEG常用命令行 5.視頻旋轉(zhuǎn) 順時(shí)針旋轉(zhuǎn)90度:ffmpeg -i test.mp4 -vf \\\"transpose=1\\\" out.mp4//順時(shí)針旋轉(zhuǎn)90° 逆時(shí)針

    2024年02月07日
    瀏覽(21)
  • ffmpeg批量轉(zhuǎn)換mpg為mp4

    1、新建一個(gè)txt文件,并復(fù)制如下代碼進(jìn)入,然后保存。 2、把文件后綴修改為bat 。 3、把后綴為bat的文件放到要批量處理的視頻文件夾里面。 4、在確保安裝了ffmpeg的情況下,雙擊bat文件執(zhí)行即可。 5、參數(shù)說(shuō)明: -i? ? ? ? ? 輸入文件,這里指的就是視頻文件。 -y? ? ? ?

    2024年02月13日
    瀏覽(22)
  • ffmpeg將rtsp流轉(zhuǎn)成mp4

    中間的rtsp網(wǎng)址一定要加上雙引號(hào),避免出現(xiàn)url有特殊字符的問(wèn)題 如果不支持tcp協(xié)議,去掉下面兩個(gè)參數(shù)即可,加上這兩個(gè)參數(shù)是因?yàn)閒fmpeg默認(rèn)使用udp協(xié)議,會(huì)導(dǎo)致丟包 -rtsp_transport、-tcp

    2024年02月11日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包