快速修復(fù)截?cái)嗟?MP4 視頻:完整新手指南)
如何用 Untrunc 免費(fèi)快速修復(fù)截?cái)嗟?MP4 視頻完整新手指南【免費(fèi)下載鏈接】untruncRestore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video.項(xiàng)目地址: https://gitcode.com/gh_mirrors/unt/untruncUntrunc 是一個(gè)免費(fèi)開(kāi)源的命令行工具用于 MP4 視頻修復(fù)——基于一個(gè)完好樣本恢復(fù)被截?cái)嗟?MP4/M4V/MOV/3GP 視頻。當(dāng)視頻的索引結(jié)構(gòu)丟失、但數(shù)據(jù)流仍在時(shí)它能重建出可播放的文件。適合會(huì)用命令行、且能拿到同設(shè)備樣本的用戶。先確認(rèn)你的文件是否適合做 MP4 視頻修復(fù) 運(yùn)行修復(fù)前先做三個(gè)判斷可以避免無(wú)效操作。適合的場(chǎng)景文件在寫入過(guò)程中被中斷斷電、存儲(chǔ)卡拔出、傳輸中斷、錄制軟件崩潰文件是 MP4 家族的容器格式mp4、m4v、mov、3gpm4a 音頻同理文件頭或索引結(jié)構(gòu)損壞但數(shù)據(jù)主體大部分還在你能提供一個(gè)來(lái)自同一相機(jī)或同一 App的完好視頻作為樣本不適合的場(chǎng)景文件完全為空或數(shù)據(jù)流本身大面積損壞——Untrunc 重建的是容器結(jié)構(gòu)不恢復(fù)丟失的媒體數(shù)據(jù)找不到同設(shè)備、同編碼配置的樣本視頻。README 的說(shuō)明很直接沒(méi)有同款樣本時(shí)修復(fù)機(jī)會(huì)很小文件來(lái)源不明無(wú)法確認(rèn)它與樣本的編碼參數(shù)接近運(yùn)行前必須確認(rèn)原始損壞文件已備份后續(xù)所有操作都在副本上進(jìn)行樣本視頻本身可正常播放你有一個(gè)可以執(zhí)行命令行的環(huán)境Linux、macOS或 Windows 下的 Docker/WSL快速運(yùn)行 Untrunc 的最小上手路徑Docker 與源碼編譯兩種安裝方式任選其一。Docker 方式不需要配置任何依賴推薦優(yōu)先嘗試。方式一Docker依賴最少git clone --recurse-submodules https://gitcode.com/gh_mirrors/unt/untrunc cd untrunc docker build -t untrunc .如果構(gòu)建時(shí)出現(xiàn) Temporary failure resolving 的網(wǎng)絡(luò)錯(cuò)誤可在構(gòu)建命令后追加--networkhost。方式二從源碼編譯按README.md中的 Installing from git 章節(jié)操作核心步驟是三步git clone --recurse-submodules克隆倉(cāng)庫(kù)--recurse-submodules不可省略libav目錄是編譯依賴進(jìn)入libav目錄執(zhí)行./configure make構(gòu)建 Libav回到倉(cāng)庫(kù)根目錄用g一次性編譯main.cpp mp4.cpp atom.cpp track.cpp file.cpp log.cpp codec.cpp codec_*.cpp codecstats.cpp等源文件鏈接libavformat、libavcodec、libavresample、libavutil不同系統(tǒng)可能遇到鏈接報(bào)錯(cuò)如BZ2_bzDecompressInit、lzma_stream_decoder未定義README.md列出了對(duì)應(yīng)的額外鏈接參數(shù)-lbz2、-llzma、-lX11、-lvdpau、-ldl按報(bào)錯(cuò)逐條添加即可。macOS 還需追加-framework參數(shù)見(jiàn) README。如何正確使用修復(fù)命令完整流程、參數(shù)與結(jié)果判斷 拿到可執(zhí)行文件后修復(fù)的主流程只有一條命令參數(shù)順序不能顛倒先寫完好樣本再寫損壞文件。./untrunc /path/to/working-video.mp4 /path/to/broken-video.mp4在 Docker 中運(yùn)行時(shí)把視頻目錄掛載進(jìn)容器的/filesdocker run -v /path/to/videos/:/files untrunc /files/working_video /files/broken_video結(jié)果如何判斷成功當(dāng)前目錄生成損壞文件名_fixed.mp4例如broken-video_fixed.mp4日志中無(wú) Failed recovering the file 錯(cuò)誤。用播放器實(shí)際播放確認(rèn)畫面、聲音、時(shí)長(zhǎng)失敗日志出現(xiàn) Failed recovering the file。程序默認(rèn)先按 FIRST 策略定位mdat起點(diǎn)失敗后會(huì)自動(dòng)依次嘗試 SAME、SEARCH、LAST 三種策略全部失敗才報(bào)錯(cuò)常用參數(shù)完整用法見(jiàn)./untrunc無(wú)參數(shù)時(shí)的輸出參數(shù)作用何時(shí)用-o 文件名指定輸出文件名不想用默認(rèn)_fixed.mp4后綴時(shí)-i打印樣本視頻的編碼器和 MOV 結(jié)構(gòu)信息修復(fù)前先確認(rèn)樣本能被正確解析-a測(cè)試樣本視頻排查樣本問(wèn)題-s用樣本模擬修復(fù)自身驗(yàn)證工具鏈?zhǔn)欠裾2粍?dòng)真實(shí)文件-v/-w詳細(xì)日志 / 調(diào)試日志修復(fù)失敗后定位問(wèn)題-q/-e靜默 / 只報(bào)錯(cuò)誤批量處理或只要結(jié)論時(shí)-d嘗試修正音視頻漂移修復(fù)后出現(xiàn)音畫不同步-m/-M分別用相同偏移或搜索包起點(diǎn)定位 mdat默認(rèn)策略失敗后手動(dòng)指定-b 偏移量手動(dòng)指定 mdat 起始字節(jié)已知數(shù)據(jù)起點(diǎn)時(shí)-B不跳過(guò)零字節(jié)PCM 音頻異常時(shí)嘗試-S 十六進(jìn)制串在樣本文件中搜索字節(jié)串并輸出偏移輔助定位數(shù)據(jù)位置注意只傳一個(gè)樣本文件時(shí)Untrunc 只做分析配合-i、-a、-t等參數(shù)不會(huì)執(zhí)行修復(fù)。修復(fù)前的三項(xiàng)檢查清單輸入文件、參考樣本、備份驗(yàn)證? 把這三項(xiàng)做完再運(yùn)行主命令能覆蓋大部分本可避免的失敗。輸入文件要求確認(rèn)損壞文件確實(shí)是 MP4 家族容器且文件大于 0 字節(jié)先運(yùn)行./untrunc -i working-video.mp4確認(rèn)樣本能正常輸出編碼器與結(jié)構(gòu)信息連-i都跑不通的樣本不要用用-s對(duì)樣本做一次模擬修復(fù)確認(rèn)工具鏈本身工作正常參考樣本選擇優(yōu)先級(jí)排序同一設(shè)備 同一 App 同類配置 其他來(lái)源。設(shè)備不一致時(shí)成功率明顯下降分辨率、幀率、碼率盡量與損壞文件一致樣本不需要長(zhǎng)幾秒到幾十秒即可準(zhǔn)備 2 個(gè)以上不同時(shí)間點(diǎn)的樣本備用備份與驗(yàn)證修復(fù)輸出是新文件不覆蓋輸入替換或刪除原始文件前必須先用播放器完整驗(yàn)證輸出對(duì)重要素材驗(yàn)證時(shí)重點(diǎn)檢查開(kāi)頭、結(jié)尾和隨機(jī)中間位置失敗排查按現(xiàn)象定位問(wèn)題 每個(gè)現(xiàn)象對(duì)應(yīng)一個(gè)直接可執(zhí)行的動(dòng)作按日志輸出對(duì)號(hào)入座?,F(xiàn)象可執(zhí)行動(dòng)作日志出現(xiàn) Failed recovering the file重跑并追加-v -w保留完整日志再依次嘗試-m、-M改變 mdat 定位策略報(bào)錯(cuò)無(wú)法打開(kāi)文件檢查路徑拼寫、文件權(quán)限確認(rèn)兩個(gè)文件都存在且可讀修復(fù)成功但播放跳幀、花屏用-i分別查看樣本和損壞文件的編碼信息換成編碼參數(shù)更接近的樣本重跑修復(fù)后音畫不同步加-d參數(shù)重跑讓程序嘗試修正漂移輸出沒(méi)有音軌或 PCM 音頻異常加-B參數(shù)不跳過(guò)零字節(jié)重跑輸出只有開(kāi)頭一小段mdat 起點(diǎn)定位偏差嘗試-M搜索包起點(diǎn)或用-S定位后配合-b手動(dòng)指定Docker 構(gòu)建時(shí)域名解析失敗構(gòu)建時(shí)追加--networkhost仍不行則確認(rèn)宿主機(jī)網(wǎng)絡(luò)原理速覽一個(gè)完好視頻為什么能借給損壞視頻判斷能不能用只需要理解這一點(diǎn)MP4 文件由一個(gè)個(gè)原子atom拼接而成。ftyp聲明文件格式moov索引與元數(shù)據(jù)——每個(gè)樣本的時(shí)長(zhǎng)、位置、編碼參數(shù)都在這里mdat真正的音視頻數(shù)據(jù)流視頻被截?cái)鄷r(shí)最常見(jiàn)的損傷是moov丟失或損壞索引沒(méi)了而mdat里的數(shù)據(jù)往往完好。播放器沒(méi)有索引就無(wú)法播放所以文件看起來(lái)壞了。Untrunc 做的事情是解析完好樣本的moov結(jié)構(gòu)把它映射到損壞文件的mdat數(shù)據(jù)流上重新生成一份索引寫出新文件。它不改動(dòng)視頻內(nèi)容本身——這正是樣本必須來(lái)自同設(shè)備、同編碼配置的原因借來(lái)的是結(jié)構(gòu)模板模板和內(nèi)容對(duì)不上修復(fù)就失敗。項(xiàng)目入口文檔、源碼與輔助工具只列你下一步會(huì)用得到的位置均在倉(cāng)庫(kù)內(nèi)無(wú)外部依賴。README.md安裝git/Docker/zip/CentOS/Arch與使用說(shuō)明編譯報(bào)錯(cuò)對(duì)照表DockerfileDocker 鏡像的構(gòu)建定義含依賴清單moovfirst/README.txt輔助工具 moovfirst 的說(shuō)明——把moov原子移到文件開(kāi)頭讓視頻適合流式播放它無(wú)第三方依賴g -o moovfirst main.cpp file.cpp atom.cpp log.cpp即可編譯COPYINGGPL 許可全文核心源碼mp4.cpp容器解析與修復(fù)流程、atom.cpp原子解析、track.cpp軌道處理、codec_*.cpp各編解碼器處理libav/Libav 依賴git 子模塊源碼編譯時(shí)由它提供頭文件與靜態(tài)庫(kù)下一步行動(dòng)與風(fēng)險(xiǎn)提示建議的執(zhí)行順序備份原始損壞文件所有操作在副本上進(jìn)行用./untrunc -i 樣本.mp4驗(yàn)證樣本可解析必要時(shí)-s模擬自檢對(duì)副本執(zhí)行./untrunc 樣本.mp4 損壞副本.mp4完整播放驗(yàn)證輸出文件確認(rèn)后再處理原始文件失敗時(shí)保留-v -w日志對(duì)照上一節(jié)表格逐一嘗試適用邊界修復(fù)依賴同款樣本沒(méi)有同設(shè)備樣本時(shí)成功率很低Untrunc 重建容器結(jié)構(gòu)mdat數(shù)據(jù)流本身?yè)p壞的部分無(wú)法恢復(fù)它不承諾對(duì)任何文件有效輸出文件務(wù)必驗(yàn)證后再?zèng)Q定取舍原始文件在驗(yàn)證完成前不要?jiǎng)h除備份是你唯一的安全底線【免費(fèi)下載鏈接】untruncRestore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video.項(xiàng)目地址: https://gitcode.com/gh_mirrors/unt/untrunc創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考