powershell - 使用 ffmpeg 压缩视频,然后移动到相应的文件夹
问题描述
我有一个目录结构,其中包含原始 .avi 视频。我正在尝试创建一个脚本,它将:
- 将目录结构复制到 NAS
- 将原始 .avi 视频压缩为 .mp4 格式
- 将转换后的 .mp4 视频移动到 NAS 上的对应目录(转换后的文件需要驻留在与源目录同名的目录中)
- 删除原始原始 .avi 视频
下面是我用来压缩视频的 ffmpeg 命令。
ffmpeg -i <origVid>.avi -c:v h264 -crf 17 <convertedVid>.mp4
我发现了几个 PowerShell 片段。下面的代码将复制目录结构:
$sourceDir = "D:\Videos"
$targetDir = "H:\Converted"
Copy-Item $sourceDir $targetDir -Filter {PSIsContainer} -Recurse -Force
以下代码段将压缩单个文件夹中的视频
$origVids = Get-ChildItem .\*.avi -Recurse
foreach ($origVid in $origVids) {
$convertedVid = [io.path]::ChangeExtension($origVid, '.mp4')
.\ffmpeg.exe -i $origVid -c:v h264 -crf 17 $convertedVid
}
我可以将所有内容移至 NAS,并在那里执行转换并删除源计算机目录中的文件;但是,这有点低效,并且会消耗大量带宽。我想压缩视频,然后将较小的转换文件移动到相应目录中的 NAS。不幸的是,对于我的生活,我无法弄清楚如何将转换后的视频移动到 NAS 上的相应目录。任何帮助将不胜感激!
我应该补充一点,我希望这个脚本递归运行。
示例文件目录结构:
longdirectorynameinhashformat1
video1a.avi
video2a.avi
video3a.avi
longdirectorynameinhashformat2
video1b.avi
video2b.avi
video3b.avi
我的逻辑如下使用上述文件夹结构,但不确定是否可以在 powershell 或 MS-DOS 批处理中写入:
- 在 NAS 上创建“longdirectoryinhashformat1”
- 将所有 .avi 文件压缩到同一目录中
- 将所有压缩 (.mp4) 文件移动到 NAS 上的同名目录中
- 删除原目录及内容
- 在 NAS 上创建“longdirectoryinhashformat2”
- ...冲洗并重复,直到源计算机上没有任何东西。
注意:这将在每晚的 cron 作业(或 Windows 等效项)中运行。
解决方案
当然,ffmpeg 不受 PowerShell 的控制。至于你的子弹——
1.将目录结构复制到 NAS 只需使用 Copy-Item 或 robocopy
2.将原始 .avi 视频压缩为 .mp4 格式
随意压缩
3.将转换后的.mp4视频移动到NAS对应目录下(转换后的文件需要驻留在与源目录同名的目录下)
使用 Move-Item 或 robocopy
4.删除原始原始.avi视频
使用删除项目
推荐阅读
- powershell - 如何将函数调用拆分为多行?
- node.js - composer-rest-server - 未找到:@kyleshockey/js-yaml@^1.0.1
- apache-spark - 如何将 spark sql 行对象序列化为字节数组?
- sql - BigQuery:如何获取列中特定字段的值?
- python - 循环遍历应用函数的数据框的每一列并将结果保存为新列
- php - PHP mvc如何进行文件上传
- c++ - 使用基类模板检测 is_base_of
- php - 在 Mac 上找不到 XAMPP 对象
- python - 如何在 Python Lambda 中调用另一个文件中的函数?
- javascript - 清理比较