使用 ffmpeg 批次壓縮 .avi 文件,其名稱包含先前的日期

使用 ffmpeg 批次壓縮 .avi 文件,其名稱包含先前的日期

我正在嘗試管理閉路電視錄像,並且正在嘗試使用 ffmpeg 批量壓縮它們

到目前為止我設法想出這個命令

ffmpeg -i "0515 210004.mp4" -b 200000  output.avi

但我需要一次完成所有這些排除目前日期

所以如果今天是 16.05,在我的資料夾中我有

"0515 210004.mp4"
"0515 220004.mp4"
"0515 230004.mp4"
"0516 000004.mp4"
"0516 010004.mp4"

等等

我只需要轉換那些包含 0515 的文件,並且每天該數字都會增加,因此在 17.05 上我將需要它來轉換所有包含 0516 的文件。

有時也有文件_1其中,例如“0515 180004_1.mp4”

(最後的004是總是那裡)

我還需要它以完全相同的名稱輸出它。

我看到這樣的東西

for %%A IN (*.mp4) DO ffmpeg -i "contains "%date% - 1day"" -b 200000 "oldfilename.avi"

我知道這行不通,但讓我們稱之為我的偽代碼

您對我如何完成任務有什麼想法嗎?

哦,我使用的是 Windows 7 x64

另外,如果您對 ffmpeg 有任何建議,我們將非常樂意調整我的程式碼

答案1

我很欣賞你的問題,因為你說“你對我如何完成任務有什麼想法嗎?”而且你沒有要求編寫程式碼。我猜你想學習。所以這個答案。

  • 重點放在哪個是鑰匙,這是獨一無二的,允許您僅選擇必須操作的項目。在這種情況下,你剛剛說了名稱的前四個字符目前目錄中的檔案。好的。
    更好,因為如果是 Jen 的第 1 個,它們的長度相同。或 12 月 31 日(即使您沒有被迫使用它。

現在您可以逐步編寫批次腳本:

  1. 為昨天和明天建立字串[d1,d2,d3...]

    $date = Get-Date; $date=$date.AddDays(-1); $date.ToString('yyyy-MM-dd')
    

    請注意,您必須修改上面的格式和變數名稱,明天也需要。

  2. 選擇與昨天的字串相符的所有檔案。 (對於和昨天變數)

  3. 對於每個[2]其中,在具有新名稱的變數中,用明天的子字串替換(讓腳本執行此操作)昨天的子字串[1].mp4即使.avi...也不要忘記改變
  4. 輸出您建立的字串。
  5. 之後,您確定了您的程序,請使用 ffmpeg 修改輸出行。

現在您只需搜尋每個步驟並將相關命令組合在一起...

PS> 第二次,您可以透過檢查輸出檔案是否存在(如果存在,則不會覆蓋)、處理的檔案數量、腳本退出的好壞來增強腳本...第二次。

答案2

結束了這個

如果有人有程式碼優化建議,將非常高興將其納入

取得 MMdd 中昨天的日期 -> 選擇以此開頭的所有檔案 -> 使用 ffmpeg 壓縮它們 -> 根據月份移動到另一個資料夾 -> 刪除來源文件

$a = (get-date).AddDays(-1).ToString("MMMM")
$d = (get-date).AddDays(-1).ToString("MMdd")
$inProcessPath = "sourcepath"
$oldVideos = Get-ChildItem -Include @("$d *") -Path $inProcessPath -Recurse;

Set-Location -Path 'D:\ffmpeg\bin';

foreach ($oldVideo in $oldVideos) {
    $newVideo = [io.path]::ChangeExtension($oldVideo.FullName, '.avi')


    $ArgumentList = '-i "{0}" -b 200000 "{1}"' -f $oldVideo, $newVideo;


    Start-Process -FilePath "D:\ffmpeg\bin\ffmpeg.exe" -ArgumentList $ArgumentList -Wait -NoNewWindow;
}

Robocopy D:\Main\AdWords\ffmpeg\bin\ntv "D:\path\$a" "$d *.avi" /mov
get-childitem "sourcepath" -include "$d *.mp4" -recurse | foreach ($_) {remove-item $_.fullname}

相關內容