使用 ffmpeg 批量压缩名称中包含先前日期的 .avi 文件

使用 ffmpeg 批量压缩名称中包含先前日期的 .avi 文件

我正在尝试管理 CCTV 录像,并尝试使用 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

我很感谢你的提问,因为你说过“你对我如何完成我的任务有什么想法吗?”而且你没有要求写代码。我猜你想学习。所以这个答案。

  • 重点是钥匙,这是独一无二的,并且允许您仅选择必须操作的项目。在这种情况下,您刚才说的是名称的前四个字符当前目录中的文件。很好。
    如果是 1 月 1 日或 12 月 31 日(即使您没有被迫使用它),那么它们的长度相同,这甚至更好。

现在您可以逐步编写批处理脚本:

  1. 为昨天和明天构建琴弦[d1d2d3...]

    $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}

相关内容