
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
귀하의 질문에 감사드립니다."내가 어떻게 내 임무를 완수할 수 있을지 어떤 아이디어가 있나요?"그리고 당신은 코드 작성을 요청하지 않았습니다. 배우고 싶은 것 같아요. 그래서 이 답변입니다.
- 어느 쪽인지에 집중하세요.열쇠, 고유한 기능으로 작업해야 하는 항목만 선택할 수 있습니다. 이 경우에는 방금 다음과 같이 말씀하셨습니다.이름의 처음 네 글자현재 디렉토리에 있는 파일 중 좋은.
Jen의 1st라면 길이가 같기 때문에 더욱 좋습니다. 또는 12월 31일(부득이하게 사용하지 않더라도 마찬가지입니다.
이제 배치 스크립트를 단계별로 작성할 수 있습니다.
어제와 내일을 위한 끈을 쌓으세요 [d1,d2,d3...] .
$date = Get-Date; $date=$date.AddDays(-1); $date.ToString('yyyy-MM-dd')
위의 형식과 변수 이름을 수정해야 합니다. 내일도 수정해야 합니다.
어제의 문자열과 일치하는 모든 파일을 선택하십시오. (For 및 어제 변수)
- 각각 [2] 그 중 새로운 이름을 가진 변수에서 어제의 하위 문자열을 내일의 하위 문자열로 대체합니다(스크립트가 수행하도록 함) .1] .
.mp4
에서도 변경하는 것을 잊지 마십시오.avi
... - 작성한 문자열을 출력합니다.
- 그 후 프로그램에 대해 확신이 들면 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}