Windows:使用 FFmpeg 批次遞歸媒體檔案持續時間的目錄

Windows:使用 FFmpeg 批次遞歸媒體檔案持續時間的目錄

我在各個資料夾中有各種媒體檔案(例如.wav、.mp4)。我想使用批次檔來產生其持續時間的列表,如下所示:

D:\Some Folder 1\Movie File.mp4 | 2:15:23
E:\Some Folder 2\Audio File.mp3 | 0:08:17

如有必要,我會在單獨的磁碟機上手動重新執行批次檔。理想情況下,清單中應包含類似 | 的內容。符號,我知道它不會是 Windows 檔案名稱的一部分,以便在解析 Excel 中的清單時方便將檔案路徑和名稱與持續時間分開。

我有一個 MediaInfo 命令,它提供單一資料夾中指定檔案類型的列表,如下所示:

mediainfo --output=General;%FileName%.%FileExtension%^|%Duration/String3%\r\n *.mp3 *.wav

我的問題是(1)資料夾中可能的文件類型集是開放式的;我不能確信 .mp3 和 .wav(在該示例中)將捕獲所有它們; (2) 我沒有找到詳細的 MediaInfo 文檔,以滿足當前的需求,並有信心能夠修改命令以滿足未來的需求(參見例如,卡利甚安); (3) 我不是批遞歸嚮導-也就是說,儘管嘗試了多種將該指令包裝在 for 迴圈中的方法,如中所述1 2StackExchange 討論以及一個舊的 Doom9 論壇推薦usebackq,我沒有讓它跨多個資料夾工作; (4) 無論如何,我最好學習如何在 ffmpeg/ffprobe 中執行此操作,作為學習這些工具的長期努力的一部分。

在 ffprobe 中,我發現這適用於單一文件:

ffprobe -i "input.mp4" -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

作為一個不太優雅但可能更具適應性的替代方案批次檔-- 儘管尚不清楚如何在同一輸出行上取得檔案名稱和持續時間。但是,與 MediaInfo 一樣,我無法使用上面引用的方法將其擴展到多個檔案(例如,用“*.*”替換“input.mp4”)或使其遞歸。例如,我嘗試了這個改編傑克艾倫的建議:

for /R %f in (*.*) do ffprobe -i *.* -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

但這並沒有產生任何文件資訊。

我的問題:如何在批次檔中使用 ffmpeg/ffprobe 來產生媒體檔案列表,其中包含完整路徑和持續時間,從多個資料夾遞歸繪製?

答案1

從批次檔中嘗試此操作:

for /R %%i in (*) do ffprobe -i "%%~fi" -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

從命令提示字元嘗試此操作:

for /R %i in (*) do ffprobe -i "%~fi" -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

答案2

這裡有同樣的需要,因為我很掙扎,所以我對答案非常感興趣,經過一番嘗試,這是一個不優雅的解決方案,但它對我有用

for /R %f in (*) do (echo "%~ff" >>"filename.txt" & ffprobe -i "%~ff" -show_entries format=duration -v Quiet -of csv="p=0" -六進位>>「檔名.txt」)

相關內容