FFMPEG: 간격 후 프레임을 가져오는 애니메이션 GIF 미리보기로 비디오를 변환합니다.

FFMPEG: 간격 후 프레임을 가져오는 애니메이션 GIF 미리보기로 비디오를 변환합니다.

내 애플리케이션에 대한 gif 미리보기를 생성하고 FFMPEG를 사용하여 내 서버에서 만들고 싶습니다.

가능하다면 임시 디렉토리(또는 각 프레임과 관련된 임시 파일)를 사용하지 않고 각 비디오에 대해 10프레임을 얻는 gif를 생성해야 합니다.

이 답변에 관해서superuser.com, 각 프레임을 사용하여 gif를 생성해야 하지만 이는 필요하지 않습니다.

이상한 것 같지만 내가 필요한 효과는 많은 포르노 웹사이트에서 볼 수 있는 것입니다. (이것들 중 무엇인지 기억이 나지 않습니다.)

답변1

내가 당신을 올바르게 이해했다면,FFmpeg Wiki의 "비디오의 X초마다 썸네일 이미지 만들기"라는 제목의 이 기사FFmpeg가 원하는 작업을 수행할 수 없음을 보여줍니다(일부 자동화된 계산 없이).

위키에서는 이것이 최선의 샷이라고 말합니다 . 원본 비디오의 프레임 -vf "fps=fps=XYZ"마다 하나의 썸네일/프레임을 생성합니다 . XYZ비디오당 10장의 사진을 원하고 사진의 길이가 모두 다른 경우 먼저 총 프레임 수를 읽은 다음 스크립트를 사용하여 필요한 fps를 계산할 수 있습니다.

XYZ=wanted_frames_times_actual_fps/total_frames_of_vid

wanted_frames_times_actual_fps예를 들어 ( 10*25PAL) 또는 10*30(NTSC)는 total_frames_of_vid=(hh*3600+mm*60+ss)*25+ff시간 hh, mm분, ss초, ff프레임(마지막으로 계산된 초 이후)을 의미합니다.계산 예: 초당 25프레임 의 타임코드 01:35:45:24(또는 FFmpeg의 용어로는 FFmpeg가 프레임을 사용하지 않고 밀리초를 사용하므로)는 총 143649 프레임과 유사합니다.01:35:45.960

이 솔루션은 잘 작동할 수 있습니다. 비디오의 총 시간(예: ffprobe를 통해)과 해당 fps(적절한 타임코드를 얻을 수 없는 경우)를 가져온 다음 해당 정보를 이라는 변수로 저장하기만 하면 됩니다 $total_frames_of_vid.


나는 Wiki의 "Also see"섹션에서 이에 대한 또 다른 접근 방식을 찾았습니다. "FFmpeg를 사용하는 비디오의 의미 있는 썸네일"이라는 슈퍼유저 질문다음을 사용하는 것이 좋습니다.

ffmpeg -hide_banner -i <YOUR_VIDEO> -vf "select=gt(scene\,0.8)" -frames:v 10 -vsync vfr -vf "fps=fps=1/200" -y out%03d.png

(코드를 약간 수정했습니다. 이미지 코덱을 PNG로 변경하고 -frames:v및 값을 변경했습니다 fps. 또한 출력 이미지 이름에 세 자리 숫자가 포함되도록 변경했습니다.)

그런 다음 GIF로 다시 코딩하세요.

이 솔루션에는 모든 옵션의 값이 있으므로 약간의 계산이나 수작업도 필요합니다(특히 fps비디오 길이에 따라 변경해야 합니다. 즉, 35분짜리 비디오로 슈퍼유저의 원본 코드를 시도했지만 그 중 5프레임만 얻었습니다) .

관련 정보