Duplicate cleaner pro 的使用技巧
- 前言
- 文件去重
- 基本介紹
- 經驗之談
- 目錄結構
- 修改盤符
- 起因
- 方法
- 手動分配方法?
- 數據修改方法
- 安裝sqlite-web
- 修改數據庫
- GPU加速
- 安裝驅動
- 獲取驅動和硬件信息
- 安裝CUDA
- 配置環境變量(如果是自定義安裝)
- 創建程序
- <1>獲取參數和命令
- <2>選擇命令參數
- <3>修改原來的ffmpeg.exe為其他名稱
- <4>要確認怎么將bat轉換成exe
- <5>編寫bat腳本
- <6>將bat轉換成exe
- 實際效果
- 問題解答
- DLL及其他軟件文件誤刪除恢復
前言
很長時間沒寫文了,不寫東西也成了習慣。我發現很多人推廣軟件,但是不詳細介紹如何使用,只是在不斷的發簡介。因此我在這里就不介紹Duplicate cleaner pro是干嘛的了,因為查這篇文的應該是想要獲取某種技巧。所以這篇文章,主要介紹的是使用Duplicate cleaner pro 進行去重的一些使用經驗,其中包括一些官方文檔和截止到今日全網都沒有人去總結的技巧。
我發現寫東西一直的確有點枯燥,很多Makedown語法沒用到,盡量去搞的好看點
文件去重
基本介紹
?Duplicate Cleaner Pro是一款專業的重復文件查找和清理工具?,適用于Windows系統,能夠通過多種方式(如文件內容、名稱、大小、日期等)快速掃描并清理重復的圖片、音樂、視頻等文件,同時支持高級功能如硬鏈接處理和圖像比較。????
可清理的文件包括視頻,圖片,音頻,文檔,實際上也可用于其他格式文件的去重,例如模型文件,數據庫.data文件等等,不過對于這些沒有包含在內置設定中的格式的文件,需要進行如下操作:
1、內置設定中新建文件過濾器,也可直接使用任意類型
2、在掃描位置中,選擇要掃描的硬盤和目錄
3、在探索規則中選擇常規模式,過濾器中勾選新建得文件過濾器或者所有文件類型
4、使用md5的方式,通過掃描和計算文件內容的md5,來確認文件是否重復。
這種通過md5確認文件是否重復的方式被廣泛應用于某衛士和某電腦管家等電腦管理軟件的重復文件清理中。而Duplicate Cleaner Pro的其中之一的優勢在于可以靈活選擇搜索范圍?,選擇文件格式和選擇其他條件(文件名,大小,日期等)進行掃描,并且對不同的文件格式有對應的搜索規則和模式,而系統或者電腦廠家自帶的重復文件清理往往不能精確選擇,要花費大量的時間掃描一整個硬盤的所有文件,其中電腦廠家自帶的重復文件清理掃描文件通常最快,因為它在后臺偷偷就在進行掃描和搜集一些信息,而不是當你點擊重復文件清理才開始掃描。并且Duplicate Cleaner Pro界面也算舒服,的確能算優點,有一些很久之前試過的去重軟件界面一點美學設計沒有。
關于這個軟件的下載,包括其他任何軟件。建議找官方網站,而不是找第三方或者自稱有代理權的網站,往往它們軟件中總是夾帶私貨。當然如果你不在意這些,包括病毒,為了方便那就隨意了。實際上包括有些博主或者某些網站提供的軟件,部分情況都帶有木馬或后門,而且8成不是從官方下載的,某些網站你以為它提供了下載地址就會負責,實際它也只是從某些綠色網站下載,重新打包或者不做任何修改并進行傳播。
https://www.duplicatecleaner.com/
經驗之談
關于它的具體功能還包括?多維度掃描??,靈活搜索范圍?,安全清理機制,通過百度等翻譯或者把界面切換成你的語言,多試幾次可以很自然的理解和掌握基礎的使用,因此這里說一些小經驗,官方文檔在某些情況下讀的確實有些模棱兩可。
-
這個軟件對不同的文件格式有對應的搜索規則和模式,通常還是建議:是什么文件,搜索規則就使用它的什么模式即可。因為它給不同的文件設置了對應這個文件格式的不同的算法或者匹配設置。例如:視頻就使用視頻模式,圖片就使用圖片模式,音頻就使用音頻文件即可,其中常規模式適配任何需要去對比md5的文件,md5是通過計算文件內容得到的。
-
當使用md5或者哈希值的時候,文件查找重復的精確度通常最高,可以在掃描結束后,選擇不同的篩選方式來保留或者去除符合條件的某一組文件。普通文檔或模型等文件,選擇常規模式即可,使用常規模式- 相似內容(75%),常規模式- 相同內容 : MD5 都可以,它是把文件內容計算出哈希值進行對比。
-
關于圖片和音頻的對比,使用對應的模式和默認設置即可,也可根據需求調整設置。因為通常情況下都是小文件,對比的速度特別快。
-
視頻模式常用的包含:哈希值 - 視頻 ; 匹配視頻抽樣幀; 匹配縮略圖 ;音頻 - 近似比較(開頭15秒)音頻 - 近似比較(開頭2分鐘); 哈希值 - 視頻+音頻
關于視頻的去重,可以使用哈希值或者使用匹配視頻抽樣幀等方式,建議使用這2種,準確度最高,速度最快。其他方式不是算法越復雜需要的時間越多(例如:哈希值 - 視頻+音頻(要求的精確度最高,效率最慢,精確度低一點的視頻內容未必不是需要去重的),
就是精確的不高(例如:匹配縮略圖,精確度最低,速度最快。因為即使同一個視頻內容,封面未必都是配置的第一幀截圖,而且大多數視頻有片頭。封面不同未必是同一個內容,封面相同未必其他內容一致。例如一個電視劇片頭片頭曲一致,縮略圖大概率也是第一幀,那么用這個方法,第一集到第十二集都被認定為重復) -
使用哈希值 - 視頻,哈希值需要計算,占用內存和CPU,這個查找重復的精確度通常最高,找到的文件必然是重復的。但是對于視頻內容是同一個,視頻長度不同,分辨率不同,長寬不同,開頭不同,水印不同的等情況下,使用md5方式并不能達到好的去重效果
-
使用匹配視頻抽樣幀的方式,它會調用ffmpeg,對每個視頻文件抽取一定的幀,生成截圖并進行對比,占用CPU資源。建議匹配時長配置30秒,因為10-15秒太短,從1-15秒匹配的幀大概率可能是個視頻的廣告開頭,而廣告開頭可能大量的一致,這容易導致開頭廣告一致的會被掃描成重復視頻。配置成幾分鐘需要等待的時間又太長。(實際上經過測試,它自帶的ffmpeg是支持CUDA或者GPU的,但是官方沒有做GPU的配置,因為使用cpu命令已經滿足了幾乎所有視頻的轉碼和截圖與適配大部分人的設備,人們不一定有顯卡,顯卡不一定好,廠商未必一致。因此引入GPU設置又可能會導致更多的問題,所以官方沒做。但是由于我嫌效率太慢,GPU又處于閑置狀態,于是后面有我對navida的適配做的插件或者說挾持腳本)
-
關于對視頻的音頻 - 近似比較,通常音頻的計算比視頻的計算快。如果配置開頭15秒又可能是視頻開頭的op片頭曲。配置2分鐘,準確度提高了工作率下降。但是問題在于視頻是哪種視頻,是有明確臺詞的電影,電視劇,動漫還是半天不出聲音的。在明確視頻內容的情況下,這個推薦排在第三位。
-
如何節省去重的時間,這是對于視頻的建議,因為圖片和音樂等文件體積小速度快,用不著,一直換方法。可以先用系統自帶的去重軟件去除一遍重復文件或者duplicate cleaner pro跑一遍哈希值或者 音頻 - 近似比較(開頭2分鐘), 先去重一些文件,再使用抽樣幀等方式精準去重。也可以直接跳到GPU加速教程,使用GPU加速過程。
目錄結構
在安裝軟件的時候要選擇安裝目錄,由于很多人選擇的位置不同,安裝目錄就不列出了。下面是在軟件安裝后其他默認的位置生成的目錄和文件(通常是你的用戶目錄下,如果你的用戶不是admin,換成你自己的用戶名)。
軟件的數據目錄,存放軟件產生的數據和緩存
C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner軟件的配置的存儲文件
C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\DuplicateCleaner5_Pro_Settings.data軟件數據緩存目錄
C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache軟件數據緩存目錄下的截圖目錄,ffmpeg截出的圖都輸出到這個目錄
C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache\VideoFrames軟件的日志文件,記錄掃描,刪除與運行中的事件
C:\Users\admin\Documents\Duplicate Cleaner log file.txt
其中還包含著一些報錯:
File skipped (IgnoreList) 跳過文件
Error generating video frames 生成視頻幀時出錯
Exitcode=1 常見的報錯,代表失敗
Exitcode=-1 常見的報錯,代表失敗
Exitcode=255 代表失敗,可能是超時或者資源不足導致,前期正常,后期失敗這種類型軟件數據緩存目錄下的數據文件,由文件內容可以看出是運行匹配視頻抽樣幀方式記錄的文件
C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache\DuplicateCleaner5_Pro_Cache-VideoFrameMetrics-F6.data當獲取的要掃描的目錄中文件的數據,路徑,文件名,md5等與這類data緩存文件對應上的時候,就不會再使用ffmpeg命令去進行生成截圖,可以節省大量時間。
介紹這個是因為后面要用到,其中有一些data文件,存儲的是配置和數據,可以sqlite-web打開和配置。
修改盤符
起因
在什么情況下會要修改盤符呢?
-
Windows系統中的盤符分配自動分配流程?:
系統啟動時,Windows會掃描所有連接的存儲設備
按照主分區優先、邏輯分區次后的順序分配盤符 -
有時候會因為硬件變動,USB設備識別問題導致的盤符變化:
?USB設備頻繁插拔?,每次插入USB設備時,系統可能分配不同的可用盤符?;
移動硬盤在不同USB端口插入后被分配不同盤符?;
插入多個移動硬盤的順序產生了變化被依次分配不同盤符?;
安裝增加硬盤后,系統可能重新調整原有盤符分配?;
過去直接插入的是移動硬盤,現在是插入了擴展塢,再插入移動硬盤
這些都有可能導致盤符的變化 -
Duplicate cleaner pro會因為硬件變動導致的盤符變化而導致問題。盤符變化對文件內容沒什么影響,但是當使用Duplicate cleaner pro,在過去掃描并且記錄過緩存,由于盤符產生變化,文件的路徑也會變,過去的緩存內容也失效了,按照過去的路徑找不到文件,新路徑的文件會被當作未掃描過,而重新開始掃描,導致浪費了大量的時間。例如過去掃描了3萬個文件,新增加了200個文件,如果盤符正常,緩存正常,軟件會找到這200個新文件進行計算和工作,但是現在要重頭開始。
方法
由于上面的原因,我們需要把盤符或者路徑修改成原來的,選擇任意一個方法即可。除非是有重新進行計算和掃描的需求。
建議第一個方法,第一個方法不可執行再選擇第二個方法,因為較麻煩。
手動分配方法?
搜索"磁盤管理",可手動修改盤符
選擇要修改的硬盤的驅動器,右鍵目標驅動器,“更改驅動器號和路徑”,選擇新盤符?(未被占用的或者你需要的盤符
注意:系統分區(C:)的盤符修改需謹慎,可能導致系統無法啟動?
數據修改方法
SQLite-Web是一個提供直觀Web界面的工具,用于訪問和管理SQLite數據庫
安裝sqlite-web
https://github.com/coleifer/sqlite-web
具有多種安裝方式,可以docker或者pip安裝,以及其他方式,根據需求選擇。
實際上只是打開用一下,使用pip方式臨時啟動即可;
為了避免引入其他安全問題,不建議允許任何訪問;
允許成功會打開瀏覽器或者復制提供的鏈接即可訪問數據庫
docker run --rm -d \
--name sqlite-web \
-p 9090:8080 \
-v $PWD:/data \
-e SQLITE_DATABASE="C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache\DuplicateCleaner5_Pro_Cache-VideoFrameMetrics-F6.data" \
coleifer/sqlite-webSQLITE_DATABASE指定的是你要打開的data文件,如果不存在會進行創建。這里我們應該打開你需要進行修改的數據庫文件,示例展示的是計算抽樣幀的數據庫文件
pip install sqlite-web
or
pip3 install sqlite-websqlite_web.exe C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache\DuplicateCleaner5_Pro_Cache-VideoFrameMetrics-F6.data下面的示例的參數,用于開放訪問和指定端口。上面的命令即可完成需求。
sqlite_web /path/to/your/database.db -H 0.0.0.0 -p 9090
修改數據庫
數據庫的基本語法和mysql相同,數據庫命令如果不會或者是有其他想法,建議咨詢AI數據庫命令
如果不確定進行修改數據庫的命令是否正確,先用where指定一個文件進行修改
<1>選擇要修改的表,從上面可以看到有picinfo表
前兩個選項是展示一些數據,Query提供picinfo表的結構和字段,下方的界面用于輸入數據庫命令
<2>自帶一個查看命令,點擊Execute即可執行,剩下兩個選項是將sql命令查到的數據導出為文件
<3>由圖可知,存在19367條數據,字段也好理解。
修改路徑重點是修改file的字段
<4>修改數據庫的示例
如果怕修改錯了,sqlite-web執行前,把數據庫文件備份
整體建議修改數據前,先使用where條件指定一個文件修改,查看修改結果后再確定命令是否有問題,是否需求整體執行
執行后,頁面顯示下面內容即為成功,意思是成功修改了多少條數據。
如果是0,代表命令有問題,沒有成功
如果數量和你之前查詢的數量不一致,證明命令還是有問題
Rows modified: 12788
SUBSTR用法
假設原路徑為I:\目錄\download\字母123.mp4:第1字符:I
第2字符::
第3字符:\(路徑分隔符)
?拼接結果差異?'J:' || SUBSTR(file, 3):
J: + \目錄\download\字母123.mp4 → J:\目錄\download\字母123.mp4'J:' || SUBSTR(file, 2):
J: + :\目錄\download\字母123.mp4 → J::\目錄\download\字母123.mp4
產生了雙冒號,因為包含了原路徑的第2字符
處理 thumbs 路徑,去除多余的字符\查看路徑包含多少個字段
SELECT LENGTH('G:\thumbs\\\') AS prefix_length;
12將指定路徑中的(G:\thumbs\\\),保留從第13字符開始的內容,前面的替換成G:\thumbs\
先使用where條件指定一個文件修改UPDATE picinfo
SET file = 'G:\thumbs\' || SUBSTR(file, 13)
WHERE file LIKE 'G:\thumbs\\\11991.mp4%';查看修改結果
SELECT * FROM "picinfo" WHERE file LIKE '%11991.mp4%';沒有問題后整體修改
UPDATE picinfo
SET file = 'G:\thumbs\' || SUBSTR(file, 13)
WHERE file LIKE 'G:\thumbs\\\%';確認最終修改結果
SELECT * FROM "picinfo" WHERE file LIKE 'G:\thumbs%';
把目標路徑 I:\目錄\download\字母 的盤符進行修改成J:UPDATE picinfo
SET file = 'J:' || SUBSTR(file, 3)
WHERE file LIKE 'I:\目錄\download\字母%';or
REPLACE把前面的替換成后面的UPDATE picinfo
SET file = REPLACE(file, 'I:', 'J:')
WHERE file LIKE '%I:\目錄\download\字母%';or也可用下面的方式去修改盤符,下面演示的是路徑替換,自動算出了需要替換的路徑中要保留的字符數UPDATE picinfo
SET file = 'J:\thumbs\' || SUBSTR(file, LENGTH('I:\目錄\thumbs\') + 1)
WHERE file LIKE 'I:\目錄\thumbs\%';
路徑替換
REPLACE把前面的替換成后面的,之前用這個方法替換了盤符UPDATE picinfo
SET file = REPLACE(file, 'I:\目錄\thumbs\', 'G:\thumbs\')
WHERE file = 'I:\目錄\thumbs\g874i.mp4';UPDATE picinfo
SET file = REPLACE(file, 'I:\目錄\Te\', 'G:\Telegram\Video\')
WHERE file LIKE 'I:\目錄\Te\%';UPDATE picinfo
SET file = REPLACE(file, 'I:\目錄\thumbs', 'G:\thumbs')
WHERE file LIKE 'I:\目錄\thumbs\%';在路徑中替換盤符并增加一個目錄
UPDATE picinfo
SET file = REPLACE(file, 'I:\目錄\download\', 'J:\目錄\download\漢字\')
WHERE file LIKE 'I:\目錄\download\云頂天宮%';
常見報錯UNIQUE constraint failed: picinfo.file該錯誤表明在執行路徑更新時違反了 picinfo.file 字段的唯一性約束,即目標路徑已存在于數據庫中例如:
SELECT * FROM "picinfo"
WHERE file LIKE '%video\1001464933947_132747.mp4%'結果由于多次掃描和盤符變更,導致一個文件記錄了多次或者只是同名文件,數據不是一條。
D:\video\1001464933947_132747.mp4
K:\video\1001464933947_132747.mp4當進行更新的時候,將J:盤符替換滿足條件的兩條數據。數據庫會先修改一條數據為J:\video\1001464933947_132747.mp4,接著替換第二條,發現這個路徑已存在,就會報這個沖突錯誤,由于檢測出命令存在的問題,這條命令不會執行成功。
UPDATE picinfo
SET file = 'J:' || SUBSTR(file, 3)
WHERE file LIKE '%video\1001464933947_132747.mp4%'以下是解決方案:
如果目標路徑真的存在無需修改
如果目標路徑不存在,修改一條數據為目標路徑即可檢查目標路徑是否已存在
SELECT * FROM picinfo WHERE file = 'J:\video\1001464933947_132747.mp4';UPDATE picinfo
SET file = 'J:' || SUBSTR(file, 3)
WHERE file LIKE '%K:\video\1001464933947_132747.mp4%'or
僅當目標路徑不存在時更新
UPDATE picinfo
SET file = 'J:' || SUBSTR(file, LENGTH('K:') + 1)
WHERE file = 'K:\video\1001464933947_132747.mp4'
AND NOT EXISTS (SELECT 1 FROM picinfo WHERE file = 'J:\video\1001464933947_132747.mp4'
);SELECT * FROM picinfo WHERE file like '%1001464933947_132747.mp4%'
GPU加速
FFmpeg的核心功能(如解碼、編碼、轉碼等)過去主要在CPU上運行,而隨著顯卡的不斷發展,于是開始支持利用顯卡硬件加速器(如NVIDIA CUDA、Intel Quick Sync Video等)對視頻進行解碼,從而顯著提高解碼效率和性能。
與CPU的軟件解碼相比,GPU能通過其并行處理能力和更高的帶寬,能夠更高效地處理解碼任務,降低CPU負載,更適合處理高分辨率視頻(如4K/8K H.265)或需要實時解碼的場景,適合高負載場景,但需硬件支持,且需優化內存管理以減少數據拷貝損耗
?CPU適用于低分辨率或簡單處理任務,但大規模數據處理時可能存在瓶頸
因此使用ffmpeg要使用GPU加速,需要ffmpeg的版本支持GPU,運行的平臺要有硬件設備-顯卡,并且有對應顯卡的驅動。
使用GPU加速的優點在于:Duplicate cleaner pro用GPU加速,抽樣幀或哈希方式,單個視頻在30秒-1分鐘完成工作;使用CPU單個視頻在1分鐘-3分鐘完成工作。視頻越小速度越快,CPU或GPU性能越好效率越高。建議GPU在4G以上,2G勉強能用。
前面已經說過了,經過測試和命令查看軟件自帶的ffmpeg是支持CUDA或者GPU的,因此不用再次安裝新版本的ffmpeg了。
查看硬件加速的相關信息
ffmpeg -hwaccels
......省略了
Hardware acceleration methods:
cuda
dxva2
d3d11va編碼器支持信息查看
ffmpeg.exe -encoders |findstr h264
......省略了V....D h264_amf AMD AMF H.264 Encoder (codec h264)V....D h264_mf H264 via MediaFoundation (codec h264)V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)ffmpeg.exe -encoders |findstr nvenc
......省略了V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)解碼器支持信息查看
ffmpeg.exe -decoders |findstr h264VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)ffmpeg.exe -decoders |findstr hevcVFS..D hevc HEVC (High Efficiency Video Coding)V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
安裝驅動
注意安裝驅動的時候要看自己電腦是什么顯卡,然后看顯卡支持什么版本的驅動
獲取驅動和硬件信息
1、打開顯卡控制面板
2、打開幫助-系統信息
3、NVCUDA64.DLL查看支持版本
CUDA是英偉達NVIDIA的顯卡驅動,編碼的時候使用h264_nvenc
https://developer.nvidia.com/cuda-toolkit-archiveROCm是AMD顯卡驅動,編碼的時候使用h264_amf
https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html#tabs-ddafbba141-item-c6b9ce2aab-tab
4、下載和安裝合適的版本
安裝CUDA
下面點擊安裝也不用說了,基本上是中文能看懂(文字是跟隨系統設置),點擊同意和勾選即可,沒什么截圖,因為很久以前安的都快忘了
建議找別人的教程和這個對應著看
-
安裝cuda時,第一次會讓設置臨時解壓目錄,第二次會讓設置安裝目錄; 臨時解壓路徑,建議默認即可,也可以自定義;安裝目錄,建議默認即可;
-
第一次安裝的時候選擇自定義(高級),盡量把能安裝的安裝上,避免以后再安裝;
-
如果之前沒有安裝vs,需要把CUDA展開,把里面的Visual Studio Integration取消勾選,否則會安裝不成功;如果你過去安裝過,到了自定義那一步,發現你的驅動版本比它提供的高,就取消那項的勾選;如果出錯
-
在許可協議,選項那一步,會展示安裝位置,記住安裝路徑
此圖實際不是我的,用于演示在哪里出這個提示,別的地方截的
注意:
使用軟件提供的默認路徑可以解決大部分問題,但為了節省空間盡量不安裝到C盤。
只要注意臨時解壓目錄千萬不要和cuda的安裝路徑設置成一樣的。因為安裝結束后,臨時解壓文件夾會自動刪除,如果一樣會刪除安裝目錄
配置環境變量(如果是自定義安裝)
為什么很多教程或說法都不一樣?多種因素疊加導致,環境不一樣,安裝目錄不一樣,版本不一樣,對應版本的安裝方法有變化,所以導致很多人配置和說法看著都不一樣
可以配置用戶變量也可以配置系統變量;
建議追哪個教程就使用哪個教程的配置,根據自己實際的安裝目錄進行配置,可以正常使用就是成功了
本教程適配12.5版本,配置系統變量方式
<1>安裝CUDA后已經生成兩條系統變量,多了CUDA_PATH和CUDA_PATH_V12_5兩個環境變量。
<2>繼續添加系統變量
還要系統變量位置繼續添加以下內容:
CUDA_SDK_PATH =你的目錄(默認路徑,可根據自己路徑調整)
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\binCUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
<3>編輯系統變量Path,添加CUDA
過去的版本是配置4條變量
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\lib\x64;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin;
11.幾的版本取消了CUDA Samples的目錄,不需要下面的兩個變量了
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.0\common\lib\x64;
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.0\bin\win64;
由于我的安裝目錄是D:\CUDA,最終目的是要系統能找到CUDA的一些命令,配置bin和libnvvp即可,所以我這里配置了D:\CUDA\bin D:\CUDA\libnvvp
<4>查看配置結果
有類似如下內容即為成功
C:\Users\admin> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Apr_17_19:36:51_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.5, V12.5.40
Build cuda_12.5.r12.5/compiler.34177558_0C:\Users\admin> set cuda
CUDA_BIN_PATH=D:\CUDA\bin
CUDA_LIB_PATH=D:\CUDA\lib\x64
CUDA_PATH=D:\CUDA
CUDA_PATH_V12_5=D:\CUDA
CUDA_SDK_BIN_PATH=%CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH=%CUDA_SDK_PATH%\common\lib\x64
CUDA_SKD_PATH=D:\CUDA到達你的安裝目錄,運行下方的軟件
D:\CUDA\extras\demo_suite
bandwidthTest.exe,輸出result=pass表示安裝成功
deviceQuery.exe,同樣輸出result=pass表示安裝成功
<5>cuDNN安裝(如果未安裝)
實際上不安裝cuDNN,nvcc -V命令也可以正常使用,因為它是查看CUDA這個顯卡驅動信息的,CUDA安裝成功即可使用
cuDNN是基于CUDA的庫,專為深度學習優化,通常用戶會順便與CUDA一起安裝,也可不安裝,不影響GPU使用
cuDNN不需要點擊安裝,將壓縮包解壓后得到三個文件夾bin、include、lib,將這三個文件里的內容依次復制到CUDA安裝目錄相同名稱的文件夾里即可https://developer.nvidia.com/rdp/cudnn-archive
解壓下載好的 cuDNN 文件 至 CUDA 安裝目錄,進行解壓,對同名文件選擇覆蓋
創建程序
我們知道Duplicate cleaner pro在運行的時候會使用ffmpeg,但是我們很難逆向還原成源碼,既違法道德和法律,技術又很難達到。于是想到了一個簡單的方法,配置一個劫持腳本,劫持軟件發送給ffmpeg.exe的參數,修改后再傳給ffmpeg.exe
打包好的文件已上傳,可直接使用。
將這些exe直接上傳到Duplicate cleaner pro安裝目錄即可,運行解壓縮視頻過程時,會在此目錄生成日志ffmpeg_log.txt
大致分成幾個過程:
<1>獲取參數和命令
首先在軟件運行的時候查看,運行的命令
直接篩選 CommandLine 包含 "ffmpeg" 的進程?
Get-WmiObject Win32_Process -Filter "Name = 'ffmpeg.exe'" | Select-Object Name, CommandLine | Format-Table -AutoSize -Wrap
or
Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like "*ffmpeg*" } | Select-Object Name, ProcessId, CommandLine | Format-Table -AutoSize -WrapWhere-Object { $_.CommandLine -like "*ffmpeg*" } 篩選所有 CommandLine 包含 ffmpeg 的進程
Select-Object Name, ProcessId, CommandLine 顯示進程名、進程ID和完整命令行。
Format-Table -AutoSize -Wrap 確保長命令行自動換行顯示。
Name CommandLine
---- -----------
ffmpeg.exe "D:\duplicatecleaner\ffmpeg.exe" -loglevel quiet -hide_banner -i "J:\目錄\download\漢字\慶余年1.mp4" -y -filter_complex "select='isnan(prev_selected_t)+gte(t-prev_selected_t\,63.5066666666667)',yadif,scale=600:-1,tile=3x3" -vframes 1 "C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache\VideoFrames\725e1354655234dfww5r53s29b811f3ffa2856b376.jpg"
<2>選擇命令參數
-loglevel quiet -hide_banner 用于靜默模式,運行不產生輸出
-filter_complex 通過指定濾鏡圖(filtergraph)實現多流處理,支持視頻拼接、混合、旋轉等復雜操作
vframes 指定要輸出的視頻幀數 , 通過該參數可以控制視頻處理的長度,在輸出多少幀后停止處理視頻流isnan(prev_selected_t) 確保視頻的第一幀被選中
gte(t-prev_selected_t\,63.5066666666667) 控制每隔63.506秒選擇一幀
?yadif濾鏡? 反交錯處理濾鏡,默認參數下會:自動檢測輸入視頻的場序(top-field-first或bottom-field-first);對所有幀進行去隔行處理,消除交錯視頻的"拉絲"效果;輸出逐行掃描的視頻幀
?scale濾鏡? scale=600:-1 將視頻寬度固定為600像素,高度設為-1,表示按原始寬高比自動計算,最終輸出分辨率可能是600×338(假設原始為16:9比例)
?tile濾鏡? tile=3x3參數實現:將輸入幀排列成3行3列的網格;默認按時間順序從左到右、從上到下排列;最終輸出圖像包含9個子畫面
要將命令修改成什么,既可以使用GPU,又能適配大部分視頻呢?為什么不能適配所有視頻呢?
官方沒有做GPU的配置,因為使用cpu命令已經滿足了幾乎所有視頻的轉碼和截圖與適配大部分人的設備,人們不一定有顯卡,顯卡不一定好,廠商未必一致,還有顯卡驅動版本等問題,所以官方沒有考慮掃描視頻使用GPU的參數。這就導致了GPU的參數需要自己劫持后修改,而且不一定能適配所有視頻,例如有的視頻帶著旋轉參數,GPU命令不支持,使用這個參數時就會報錯。通常GPU使用的參數:
-hwaccel 指定加速API(如CUDA、DXVA2)
-c:v 匹配硬件解碼器(如 h264_cuvid、hevc_qsv)
-hwaccel_output_format cuda 強制解碼后的輸出格式為CUDA內存,幀數據保留在GPU顯存中,避免CPU-GPU間傳輸開銷。如果不帶這個參數,解碼后的幀數據默認會轉換為系統內存格式。
?帶-hwaccel_output_format cuda的參數組合?:
截圖功能受限,因為大多數截圖操作需要CPU可訪問的幀數據
需要顯式添加-vf hwdownload,format=nv12將幀下載到系統內存才能截圖。直接截圖可能導致錯誤或黑屏;旋轉濾鏡(如transpose)支持有限,因為大多數濾鏡需要CPU可訪問的幀數據,若需使用旋轉濾鏡,也必須先用hwdownload將幀下載到系統內存
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -i input.mp4 -vf "hwdownload,format=nv12,transpose=1" output.mp4?不帶-hwaccel_output_format cuda的參數組合?:
更適合截圖操作,因為幀數據會自動轉換為系統內存格式,可直接使用-vframes 1或-ss參數捕獲幀;更直接支持旋轉濾鏡,因為幀數據已在系統內存中,可直接應用transpose等旋轉濾鏡
ffmpeg -hwaccel cuda -c:v h264_cuvid -i input.mp4 -vf "transpose=1" output.mp4優缺點:
帶-hwaccel_output_format cuda的組合性能更高,適合純GPU處理流水線
若僅進行簡單轉碼且無需濾鏡,帶-hwaccel_output_format cuda的組合更高效
不帶該參數的組合因涉及內存傳輸,會有額外開銷,若處理鏈中包含需要CPU訪問的操作(如截圖、復雜濾鏡),建議不使用-hwaccel_output_format cuda方案:
一個是速度快,一個是支持功能多。由于使用GPU加速就是為了速度所以我這里選擇了速度快的方案,并且配合下載到系統內存的參數,讓它支持更多操作。如果CUDA命令報錯就回退到CPU命令繼續執行。-hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid %*
[0:v]hwdownload,format=nv12 從第一個輸入文件的視頻流([0:v])下載硬件加速幀到系統內存,指定輸出幀的像素格式為NV12,確保后續處理兼容性(如截圖、濾鏡操作)最終要修改成命令是:
"D:\duplicatecleaner\ffmpeg.exe" -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -loglevel quiet -hide_banner -i "J:\目錄\download\漢字\慶余年1.mp4" -y -filter_complex "[0:v]hwdownload,format=nv12,select='isnan(prev_selected_t)+gte(t-prev_selected_t\,63.5066666666667)',yadif,scale=600:-1,tile=3x3" -vframes 1 "C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache\VideoFrames\725e1354655234dfww5r53s29b811f3ffa2856b376.jpg"如果是為了寫腳本或者使用方便,需要天然的支持更多功能,也可以選擇-hwaccel cuda -c:v h264_cuvid %*,這個報錯更少
<3>修改原來的ffmpeg.exe為其他名稱
找到安裝目錄,找到ffmpeg.exe,右鍵重命名為ffmpeg_orig.exe
<4>要確認怎么將bat轉換成exe
首先bat轉exe不是只是修改文件后綴就行了,它需要專門的軟件進行轉換
下面是一些軟件的實際測試:
Quick Batch File Compiler
1. 安全機制沖突
Quick Batch File Compiler 默認啟用嚴格的安全機制:
沙箱模式:阻止文件系統訪問(包括日志寫入)
內存保護:限制子進程創建(如 start /B)
資源限制:阻止訪問系統工具(tasklist, taskkill)2. 路徑處理缺陷
轉換后的 EXE 運行時:
當前工作目錄變為臨時目錄(非腳本原位置)
相對路徑(如 "%log_file%")失效
環境變量(%date%, %time%)無法解析3. 異步操作不兼容
Quick BFC 對以下特性支持有限:
后臺進程 (start /B)
進程監控 (tasklist)
強制終止 (taskkill)4. 日志重定向問題
轉換后:
>> "!log_file!" 重定向被攔截
控制臺輸出被靜默丟棄
錯誤流 (2>&1) 無法捕獲
IExpress
IExpress 轉換的 EXE 不會出現與 BatToExe 或 Quick BFC 相同高級語法應用的問題,但根本無法傳遞參數
即使把生成過程中,啟動的命令更換成下面的方法,也不能成功傳遞參數?,網上也沒找到解決辦法。在其他軟件中轉換后沒有不能傳遞參數的問題。
cmd.exe /c test.bat %1
或
cmd.exe /c test.bat %*
特性 | BatToExe/QuickBFC | IExpress |
---|---|---|
執行原理 | 編譯為二進制代碼 | 自解壓包 + cmd.exe 原生執行 |
嵌套 if/goto | ? 兼容性差 | ? 完美支持 |
日志生成 | ? 常失敗 | ? 100% 正常 |
異步操作 | ? 受限嚴重 | ? 完全支持 |
路徑處理 | ? 工作目錄問題 | ?? 臨時目錄需特殊處理 |
依賴文件 | ? 需手動包含 | ? 自動打包所有文件 |
安全防護 | ? 代碼混淆 | ? 腳本可被提取 |
Bat to Exe Converter
1、處理多層嵌套 if 塊存在缺陷當外層if塊內嵌套另一個if塊時,會無法執行,尤其是有goto和函數的情況
if !has_cuda! equ 1 ("%orig_exe%" -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -loglevel !cuda_cmd! >> "%log_file%" 2>&1set exec_status=!errorlevel!if !exec_status! equ 0 (goto :final_check)echo [%date% %time%] WARN: CUDA failed , falling back to CPU >> "%log_file%"
)當使用延遲擴展變量(!var!)在嵌套塊中,會無法執行
echo [%date% %time%] [ERROR] (!code!) does not exist
正確的應該是
echo [%date% %time%] [ERROR] !code! does not existBatToExe 在轉換過程中無法正確處理這種復雜嵌套結構,導致生成的 EXE 文件無法執行嵌套部分的代碼,是工具本身的限制。2、goto 標簽問題:
標簽跳轉在轉換后可能失效
特別是當標簽位于 if 塊內部時
因此如果使用這個軟件,要避免goto和函數,避免if多重嵌套。
相比于其他軟件,它轉換后的代碼既支持傳參,又可使用windows系統自帶的命令,于是使用這個軟件來進行編寫bat和轉換
<5>編寫bat腳本
建議bat腳本中不使用中文,避免亂碼;
if判斷或者循環內部不寫注釋,避免轉換出現問題;
如果是使用記事本編寫,記得另存為ansi編碼
由于要避免函數和嵌套與復雜寫法,所以把異步的部分拆分了出去,寫2個腳本,一個主程序,一個超時監控程序。
原來的程序運行只有1個ffmpeg.exe的進程。由于是劫持腳本,這樣搞后,一個腳本運行時會產生3個進程(一個是劫持程序本身的進程ffmpeg.exe,一個使用cmd命令進程cmd /c ffmpeg.exe,一個劫持后轉發參數給原來的程序運行的進程ffmpeg_orig.exe), 連超時監控程序,共計6個進程,運行時共計占用230M內存左右,其他進程沒有占用cpu,只有工作的ffmpeg_orig.exe的進程占用cpu,比使用CPU命令時占用的cpu少很多,只是進程看著多。
基本思路:
CUDA命令正常完成:不執行CPU命令
CUDA命令執行錯誤:立即切換CPU命令
CUDA命令卡住超時:強制切換CPU命令
超時檢測進程自動清理(GPU,4分鐘內完全可完成單個文件的轉碼,如果超時證明程序卡住)
無殘留進程或文件
臨時文件自動刪除
代碼在下方可根據具體情況修改
ffmpeg.bat
@echo off
::moxiao_Gx
setlocal enabledelayedexpansion:: Set the directory where the script is located as the working directory
set "script_dir=%~dp0"
set "log_file=%script_dir%ffmpeg_log.txt"
set "orig_exe=%script_dir%ffmpeg_orig.exe"
set "has_cuda=0":: Enhance logging functionality
echo =========================================== >> "%log_file%"
echo [%date% %time%] INFO: script start >> "%log_file%"
echo =========================================== >> "%log_file%":: Verify that the file exists and is executable
if not exist "%orig_exe%" (echo ========================================================== >> "%log_file%"echo [%date% %time%] [ERROR] ffmpeg_orig.exe does not exist >> "%log_file%"echo ========================================================== >> "%log_file%"exit /b 1
):: CUDA detection
where nvidia-smi >nul 2>&1
if !errorlevel! equ 0 set "has_cuda=1":: initialize variable
set "input_cmd=%*"
set "new_filter="
set "original_filter="
set "filter_processed=0"
set "in_quote=0":: Improved extraction of raw filter parameters (handling quoted cases)
for %%a in (%input_cmd%) do (if "%%a"=="-filter_complex" (set "next_is_filter=1") else if defined next_is_filter (if "!original_filter!"=="" (set "original_filter=%%a") else (set "original_filter=!original_filter! %%a")if "%%a"==""*"" set /a "in_quote=!in_quote!^^1"if !in_quote! equ 0 set "next_is_filter=")
)::Remove quotation marks
set "original_filter=!original_filter:"=!"
echo "original_filter %original_filter%" >> "%log_file%":: Dynamically build new filter parameters (preserve complete structure)
if defined original_filter (:: Remove duplicate select sectionsset "temp2=!original_filter:select=!"if not "!temp2!"=="!original_filter!" (set "new_filter=[0:v]hwdownload,format=nv12,!original_filter!") else (set "new_filter=[0:v]hwdownload,format=nv12,!original_filter!"):: Fix escape characters and quotation marks:: set "new_filter=!new_filter:\=!"set "new_filter=!new_filter:""=!"
)echo "new_filter %new_filter%" >> "%log_file%":: Skip the original ffmpeg when refactoring CPU commands
set "cpu_cmd="
set "skip_first=0"
for %%a in (%input_cmd%) do (if "%%~a"=="%script_dir%ffmpeg.exe" (set "skip_first=1") else if !skip_first! equ 1 (set "skip_first=0") else (set "cpu_cmd=!cpu_cmd! %%a")
):: Skip original filter parameters when refactoring CUDA commands
set "new_cmd="
set "in_param_section=0"
set "skip_original_filter=0"for %%a in (%input_cmd%) do (if "%%a"=="%script_dir%ffmpeg.exe" (set "skip_next=1") else if !skip_next! equ 1 (set "skip_next=0") else if "%%a"=="-filter_complex" (if !filter_processed! equ 0 (set "new_cmd=!new_cmd! -filter_complex "!new_filter!""set "filter_processed=1"set "in_param_section=1"set "skip_original_filter=1")) else if !in_param_section! equ 1 (if "%%a"=="-filter_complex" (set "in_param_section=0") else if !skip_original_filter! equ 1 (:: Skip the original filter parametersset "skip_original_filter=0") else (set "new_cmd=!new_cmd! %%a")) else (set "new_cmd=!new_cmd! %%a")
)echo "new_cmd %new_cmd%" >> "%log_file%":: Build two command schemes
set "cuda_cmd=%new_cmd%"
set "cpu_cmd=%cpu_cmd%"
set exec_status=0
echo "cpu_cmd %cpu_cmd%" >> "%log_file%"
echo "has_cuda %has_cuda%" >> "%log_file%":: Execute logic with synchronous timeout detection and automatic rollback
if !has_cuda! equ 1 (echo ============================================================== >> "%log_file%"echo [%date% %time%] INFO: Using CUDA acceleration plan1 CUDA >> "%log_file%" echo "%orig_exe%" -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -loglevel !cuda_cmd! >> "%log_file%"echo ============================================================== >> "%log_file%"start "CUDA_Watchdog" /B cmd /c watchdog_ffmpeg.exe"%orig_exe%" -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -loglevel !cuda_cmd! >> "%log_file%" 2>&1set exec_status=!errorlevel!)
::moxiao_Gx
set STATE_FILE=%temp%\ffmpeg_state.lock
:: STATE_FILE
if exist "%STATE_FILE%" (echo [%date% %time%] WARN: CUDA timed out after 240s seconds >> "%log_file%"set /p exec_status=<"%STATE_FILE%"del %STATE_FILE%
):: CPU fallback execution branch
if !exec_status! neq 0 (echo [%date% %time%] WARN: CUDA failed !exec_status!, falling back to CPU >> "%log_file%"echo [%date% %time%] INFO: Starting CPU execution >> "%log_file%"echo "%orig_exe%" -loglevel !cpu_cmd! >> "%log_file%"echo ================================================== >> "%log_file%"taskkill /f /t /im watchdog_ffmpeg.exe >nul 2>&1del %STATE_FILE%"%orig_exe%" -loglevel !cpu_cmd! >> "%log_file%" 2>&1set exec_status=!errorlevel!
):: error handling
if !exec_status! equ 0 (taskkill /f /t /im watchdog_ffmpeg.exe >nul 2>&1del %STATE_FILE%echo ============================================================ >> "%log_file%"echo [%date% %time%] [INFO] Execution succeeded >> "%log_file%"echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> "%log_file%") else (taskkill /f /t /im watchdog_ffmpeg.exe >nul 2>&1del %STATE_FILE%echo ============================================================ >> "%log_file%"echo [%date% %time%] ERROR: Execution failed !exec_status! >> "%log_file%"echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> "%log_file%"exit /b !exec_status!
)endlocal
watchdog_ffmpeg.bat
@echo off
setlocal enabledelayedexpansion
::moxiao_Gxset cuda_timeout=240
set "script_dir=%~dp0"
set "log_file=%script_dir%ffmpeg_log.txt"
set STATE_FILE=%temp%\ffmpeg_state.lockdel %STATE_FILE%timeout /t %cuda_timeout% /nobreak >nultasklist | findstr "ffmpeg_orig.exe" >nul
if %errorlevel% equ 0 (taskkill /f /im ffmpeg_orig.exe >nul 2>&1echo TIMEOUT_GPU > "%temp%\ffmpeg_state.lock"exit /b 1
) else (exit /b 0
)endlocal
<6>將bat轉換成exe
1、將對應文件轉換成下面的名字或者修改腳本后再修改程序名稱
ffmpeg.exe
watchdog_ffmpeg.exe
2、放到Duplicate cleaner pro安裝目錄,原來的ffmpeg.exe重命名成ffmpeg_orig.exe
運行時會生成日志ffmpeg_log.txt
這個截圖是之前寫中文注釋的時候截的圖,發現后來亂碼了,全改成英文
選擇對應的系統,窗口建議隱形
實際效果
2G顯卡
12小時53分41.43秒,掃描了1046個視頻文件,切換cpu運行的是121個,其中16個文件GPU運行卡住超時240s,切換CPU命令
50/h 到 80/h ,速度提示了60%,意味著能節省過去大概3分之一的時間,過去72小時的量節省約27小時
卡住和緩慢主要是由于顯卡內存不足導致,如果是使用4G以上顯卡提升應該會更明顯
問題解答
1、為什么軟件的日志和這個程序生成的日志中有視頻文件報錯了?
C:\Users\admin\Documents\Duplicate Cleaner log file.txt
這個文件中包含著Duplicate cleaner pro執行掃描和去重時,記錄的日志。只記錄異常,錯誤,刪除等詳細日志,正常完成的任務只記錄整體統計情況,而不記錄每個正常文件的運行信息。這個軟件在運行的時候,是不會在界面上顯示哪個文件掃描或對比等工作出現異常的,并不是所有視頻或文件都一定會成功,而是會記錄到這個日志中,通過自帶的報錯提示,標記報錯原因,因此Duplicate cleaner pro工作的成功率實際也不是100%,只是界面上沒報錯。因為總會有些視頻本身出問題,不是兼容問題,就是下載了一部分的看似完整,實際殘缺的文件(表現是通常看不到時長或者無封面或者無其他元數據這類文件),這種的無論用哪個命令都會報錯,而不是命令問題。
2、是不是ffmpeg導致文件損壞的?
ffmpeg命令是通常不會導致作為輸入的原文件損壞的,除非是你輸入和輸出的路徑弄成同一個,文件名稱也是同一個。ffmpeg -i input.mp4 -c:v libx264 input.mp4
因為異常中斷處理,編解碼參數沖突,特殊字符路徑問題等原因,而出問題的是: 要么是命令執行失敗,要么是輸出文件出現問題,而不會影響輸入文件。因此這個程序和軟件的原程序是不會導致原文件異常的。注意一下存儲設備或者保存時出現了問題。
3、日志某個視頻為什么重復出現,然后報錯?
Duplicate cleaner pro每次執行掃描和工作,異常的文件會在執行失敗后進行跳過,而不會記錄到數據庫中。因此每次重新打開Duplicate cleaner pro,在數據庫中的數據和獲取指定要掃描的路徑中的文件的信息會進行對比,已在數據庫中且無變更的文件會對比后略過,數據對不上的(更新了文件的,路徑變更的)和無記錄的(過去報錯跳過或新文件)會再次進行掃描和計算。因此,如果你的異常文件不處理,1月2日掃描有報錯,1月3日掃描還是會有報錯。
如果你掃描完了2萬多個文件,你的異常文件沒有處理,沒有任何變動,當再次跑數據的時候,由于大致2萬個文件成功的都記錄在數據庫,對比后會將數據對上的快速略過,不會執行ffmpeg或其他算法,把剩下需要掃描的排在后面,而這些都是之前失敗的文件,會再次掃描和計算,但是因為大多數是文件本身問題,因此大部分都會失敗,這時候ffmpeg_log.txt日志中基本全是運行報錯,這個現象是正常的,并不是軟件在某一時刻出現了異常導致的。
缺點:
在文件名是特殊字符,包含* !& ?| 時,參數分割會出錯導致文件跳過。
I:\目錄\download\923842930&023d-sfjom.mp4
不過已經滿足了大部分正常的視頻文件了,文件名亂七八糟帶各種字符尤其是&還是比較少的,只能建議修改文件名。因為這種文件名不符合通常的命名格式,相比于修改代碼,修改文件名相對簡單。
之后的版本處理。
DLL及其他軟件文件誤刪除恢復
這個主要在對這個軟件安裝目錄中的文件,進行調整或者誤刪的時候的使用
1、如果文件誤刪除到回收站了還可以還原,如果回收站也清理了,只能想辦法恢復了
2、發現問題第一時間,建議停止任何對硬盤的寫入。使用360以及其他的數據恢復軟件進行恢復
3、如果恢復軟件也找不到刪除的文件,去這個軟件的設置中,找到更新按鈕-檢查更新,進行更新,更新后缺失的軟件會恢復,已經緩存的數據和配置也不會丟失
4、如果是軟件在之前已經是最新版本了,點擊更新無用,只能重新安裝。在安裝之前進行備份。
<1>找到數據緩存目錄,進行備份
C:\Users\admin\AppData\Roaming\DigitalVolcano\DuplicateCleaner\Cache
建議從前面的目錄開始備份
C:\Users\admin\AppData\Roaming\DigitalVolcano\
如果你的緩存目錄不是這個,運行軟件后,使用powershell查看進程,觀察輸出的目錄的在哪里
如果你的緩存目錄不是這個,選擇一個視頻或目錄進行掃描,運行軟件后,使用powershell查看進程,觀察輸出的目錄的在哪里。
或者直接使用任務管理器,找到duplicate cleaner進行查看,查看詳細命令Get-WmiObject Win32_Process -Filter "Name = 'ffmpeg.exe'" | Select-Object Name, CommandLine | Format-Table -AutoSize -WrapGet-WmiObject Win32_Process | Where-Object { $_.CommandLine -like "*ffmpeg*" } | Select-Object Name, ProcessId, CommandLine | Format-Table -AutoSize -Wrap
<2>備份你的軟件安裝目錄
如果不知道你的軟件安裝在什么地方
打開任務管理器,找到duplicate cleaner,右鍵打開文件所在位置
<3>官網進行下載或者使用你過去的安裝包
https://www.duplicatecleaner.com/
關閉軟件后,點擊安裝文件,選擇uninstall之類的進行卸載,卸載時會自動刪除安裝目錄和緩存目錄。通常來說某些軟件在已經安裝后,再次點擊安裝包會提示進行卸載或者修復,但是這個軟件其他的選項是灰色的無法選擇,只能先卸載后再次進行安裝。
<4>不要運行軟件。將備份的內容全部復制到原來的位置,改回原來的目錄名。其中安裝目錄將過去的文件復制到新的安裝目錄里,放心的將同名的跳過,軟件的配置是在緩存目錄里。
<5>打開軟件。與之前使用的界面和配置等都一致。