FFmpeg를 사용하여 디렉터리의 모든 파일에서 초당 한 프레임을 추출하려고 합니다.
개별 파일에 대해 이 명령을 사용하지만 대신 디렉터리를 입력하는 방법을 알 수 없습니다.
ffmpeg -i "C:\input\clip1.mp4" -vf fps=1 -qscale:v 2 "C:\output\clip1\clip1A"%d.jpg
이상적으로는 프레임을 아래와 같이 자체 폴더에 저장하고 싶지만생각하다그 부분은 제가 직접 해결할 수 있어요. 모두 동일한 접두사와 일련 번호를 사용하여 동일한 폴더에 출력되면 괜찮습니다.
C:\output\clip1\clip1-001.jpg
,clip1-002.jpg
C:\output\clip2\clip2-001.jpg
,clip2-002.jpg
나는 지금 여러 시간 동안 노력해 왔지만 여전히 완전히 길을 잃었습니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
완료! 이 코드는 프레임이 나온 비디오와 동일한 이름의 폴더에 프레임을 출력합니다. 프레임에는 비디오 이름이 접두사로 붙고 001부터 시작하는 일련 번호가 접미사로 붙습니다. 따라서 내 파일의 경우 "/clip1/clip1-001.jpg" 등이 표시됩니다.
저처럼 무엇을 하고 있는지 전혀 모르시는 경우를 대비해 아래 코드를 메모장에 붙여넣고 "extractframesorwhatever.bat"로 저장한 후 클립이 있는 디렉터리에서 실행하세요.
for %%F in (*.mp4) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.jpg
)
폴더를 다른 곳에 출력하려면 다음을 변경하십시오.
If not Exist "%%~nF" MkDir "%%~nF"
다음과 같이 :
If not Exist "C:\wherever\%%~nF" MkDir "C:\wherever\%%~nF"
그렇게 하면 (내 예에서는) 출력을 변경해야 합니다.
%%~nF\%%~nF-%%3d.jpg
에게
C:\wherever\%%~nF\%%~nF-%%3d.jpg
또는 하나의 폴더에 모든 프레임을 넣으려는 경우. 출력의 첫 번째 %%~nF를 원하는 디렉터리로 바꿉니다. 내 예를 사용하면 C:\wherever\%%~nF\%%~nF-%%3d.jpg에서 C:\wherever\frames\%%~nF-%%3d.jpg로 이동합니다. 또한 두 번째 줄을 편집하여 새 위치를 가리키도록 하고 불필요한 디렉터리가 많이 생성되지 않도록 하거나 두 번째 줄을 완전히 제거할 수도 있습니다. 두 번째 줄을 제거하는 경우 먼저 해당 "프레임" 폴더를 직접 만들어야 합니다.
편집 - 파일을 처리하기 전에 파일 이름에서 모든 공백을 제거해야 할 수도 있습니다. "대량 이름 바꾸기 유틸리티"를 사용하면 많은 시간을 절약할 수 있습니다.
답변2
나는 프레임을 추출하는 데 이 방법을 좋아하는데, 매우 편리합니다. 하지만 제공한 코드를 사용하면 다음과 같습니다.
for %%F in (*.mp4) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.jpg
)
두 개의 출력 폴더가 있습니다.
파일 이름(이미지를 넣을 위치)과 테스트 폴더(이미지를 넣을 위치) 중 하나입니다.
나는 이것이 코드가 작동하는 방식이라는 것을 알고 있지만 아마도 지난 4년 동안의 변화로 인해 현재 이 코드가 작동하는 방식이 바뀌었을 것입니다. 하지만 사실 전체적으로 보면 그렇게 불편한 정도는 아닙니다.
또한 더 높은 품질의 GIF를 만들고 싶은 분들을 위해 .jpg를 .png로 변경하면 됩니다.
또한 (.mp4)를 (.mkv)가 작동하는 것으로 알고 있습니다.
나는 다음과 같은 다른 모든 비디오 형식도 작동할 것이라고 가정합니다..avi), (.mpeg), (.ts), (.flv) 등 -이것은 테스트되지 않았습니다.
그러나 나는 이 코드를 이해하지 못한다는 점에서 OP와 동일하므로 온라인에서 찾은 내용을 복사/붙여넣고 일부만 가지고 놀기 때문에 .bat 파일을 준비하는 것이 편리합니다.
생성되는 "테스트" 폴더를 수정하는 방법과 대신 파일 이름으로 이미 생성된 폴더로 스크린샷을 이동하는 방법을 알고 싶습니다.
다른 비디오 형식과 작동하도록 코드를 변경한 방법을 보여주기 위해 몇 가지 예를 포함하겠습니다.
내가 아는 첫 번째 예는 .mp4 대신 .mkv 파일을 사용하여 스크린샷을 .png로 만드는 것입니다.
for %%F in (*.mkv) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.png
)
마지막 예는 스크린샷을 .png로 만드는 .ts 파일에 대해 작동해야 합니다.
for %%F in (*.ts) do (
If not Exist "%%~nF" MkDir "%%~nF"
ffmpeg -i %%F -r 1 -qscale:v 2 %%~nF\%%~nF-%%3d.png
)