2015-12-03 149 views
5

我拼命搜索一種方便的方法來檢查特定目錄中的.mp4文件與其中的文件夾的完整性。 .mp4文件和文件夾的名稱都包含空格,特殊字符和數字。使用ffmpeg快速檢查目錄內的視頻文件的完整性

我已經找到了適當的ffmpeg的命令來快速識別損壞.mp4檔案,從here採取: ffmpeg -v error -i filename.mp4 -map 0:1 -f null - 2>error.log

如果創建error.log中包含一些條目,那麼該文件明顯損壞。相反的是一個空的error.log。

下一步是將此命令應用於文件夾及其子文件夾中的每個.mp4文件。一些指南,如herehere,描述瞭如何遞歸地應用ffmpeg命令,但是我的編碼技巧有限,所以我找不到合併這些命令的方法以獲得以下內容:

使用前面提到的ffmpeg命令(遞歸地)測試文件夾內的所有.mp4文件,該文件應該創建.log文件,只有當視頻文件包含錯誤(讀有一些內容)並且它應該繼承破損文件的名稱知道哪個文件已損壞。

使用Ubuntu Gnome 15.10。

+1

你需要批處理腳本(Windows)還是shell腳本(Unix)? –

+0

一個shell腳本,因爲我使用Ubuntu Gnome 15.10。提前謝謝了。 – DMT

回答

4

試試這個命令:

find . -name "*.mp4" -exec ffmpeg -v error -i "{}" -map 0:1 -f null - 2>error.log \; 

find命令查找當前目錄遞歸地對應於給定模式中的所有文件:"*.mp4"。在-exec之後出現您要爲所有文件運行的命令。 "{}"替換當前文件的名稱,其中引號允許文件名中包含空格。該命令必須以\;結束。

編輯:

上面的代碼完全只生成一個日誌文件。要爲.mp4文件創建單獨的.log文件,各自有各自的名字,你可以使用{}符號更多的時間:

find . -name "*.mp4" -exec sh -c "ffmpeg -v error -i {} -map 0:1 -f null - 2>{}.log" \; 
+0

Andrea,感謝您的快速響應!您的命令只能部分工作:雖然它將文件夾中的所有文件及其子文件夾都考慮在內,但只會爲所有文件創建一個error.log。壞消息是,我無法單獨從這個.log文件的內容中識別出損壞的視頻文件,因爲它僅顯示文件的破碎字節,而不是文件名本身。因此,我正在搜索一個命令,它將爲每個損壞的視頻文件創建一個單獨的.log文件,該文件與損壞的視頻文件具有相同的名稱。 – DMT

+0

@dmt看到更新的答案,我希望這有助於! –

+0

這次您更新的命令創建了一個名爲{} .log的單個.log文件。出了些問題。 – DMT

3

我最近遇到了同樣的問題,但我覺得有一個簡單的黑客找出哪些文件被破壞:

find -name "*.mp4" -exec sh -c "echo '{}' >> errors.log; ffmpeg -v error -i '{}' -map 0:1 -f null - 2>> errors.log" \; 

這樣的錯誤,按照文件名(和路徑)。

+1

爲了更好的格式化源文件 'find。 -name「* .mp4」-exec sh -c「echo'{} \ t \ c'>> errors.log; ffmpeg -v error -i'{}'-map 0:1 -f null - 2 >> errors.log; echo''>> errors.log「\;' – awiebe