이름에 이전 날짜가 포함된 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

귀하의 질문에 감사드립니다."내가 어떻게 내 임무를 완수할 수 있을지 어떤 아이디어가 있나요?"그리고 당신은 코드 작성을 요청하지 않았습니다. 배우고 싶은 것 같아요. 그래서 이 답변입니다.

  • 어느 쪽인지에 집중하세요.열쇠, 고유한 기능으로 작업해야 하는 항목만 선택할 수 있습니다. 이 경우에는 방금 다음과 같이 말씀하셨습니다.이름의 처음 네 글자현재 디렉토리에 있는 파일 중 좋은.
    Jen의 1st라면 길이가 같기 때문에 더욱 좋습니다. 또는 12월 31일(부득이하게 사용하지 않더라도 마찬가지입니다.

이제 배치 스크립트를 단계별로 작성할 수 있습니다.

  1. 어제와 내일을 위한 끈을 쌓으세요 [d1,d2,d3...] .

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

    위의 형식과 변수 이름을 수정해야 합니다. 내일도 수정해야 합니다.

  2. 어제의 문자열과 일치하는 모든 파일을 선택하십시오. (For 및 어제 변수)

  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}

관련 정보