我有一个目录结构,其中原始.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批处理进行写操作:
注意:这将在每晚的cron作业(或Windows等效文件)中运行。
答案 0 :(得分:1)
当然,ffmpeg不受PowerShell的控制。 至于子弹---
1。将目录结构复制到NAS 只需使用Copy-Item或robocopy
2。将原始的.avi视频压缩为.mp4格式
按您的喜好压缩
3。将转换后的.mp4视频移动到NAS上的相应目录中(转换后的文件必须位于相同的目录中 名称作为源目录)
使用Move-Item或robocopy
4。删除原始的原始.avi视频
使用删除项
答案 1 :(得分:0)
我没有使用PowerShell,而是使用以下批处理脚本,其中“ D:\”是映射的NAS共享,我将存储压缩的视频。虽然,我想知道PowerShell的等效项。
@echo off
Rem Replicate directory structure on NAS (where g: is the drive letter for the NAS share)
for /d %%d in (*.*) do mkdir g:\%%d
Rem FFmpeg processing for all files that end in *.avi. You can change *.avi to whatever extension you need.
call :treeProcess
goto :eof
:treeProcess
for %%f in (*.avi) do ffmpeg -i "%%f" -c:v h264 -crf 17 "g:\%%d\%%~nf".mp4
for /D %%d in (*) do (
cd %%d
call :treeProcess
cd ..
)
exit /b