비디오 파일에서 이미지를 추출하는 방법은 무엇입니까?

비디오 파일에서 이미지를 추출하는 방법은 무엇입니까?

내 말은, 비디오에서 이미지 파일(예: 스크린샷)을 생성하는 방법입니다.

답변1

사용해 보세요ffmpeg

ffmpeg -i inputfile.avi -r 1 -f image2 image-%3d.jpeg

문서를 읽을 수 있습니다.여기

  • -i inputfile.avi비디오 입력 파일은 inputfile.avi입니다.
  • -r 1영상에서 초당 1개의 이미지를 추출합니다. 해당 숫자를 초당 얻고 싶은 이미지 수로 바꾸세요.
  • -f image2이미지 출력 형식을 강제로 적용하면 프로그램이 파일 확장자에서 출력 이미지 형식을 선택하려고 시도하므로 이 옵션을 무시할 수 있습니다.
  • image-%3d.jpeg출력 이미지의 이름 %3d는 생성된 출력 이미지에 소수점 3자리의 일련 번호가 있음을 의미합니다. 숫자를 0으로 채우려면 %03d를 사용하면 됩니다.

답변2

방금 Windows 32용 VLC 최신 버전인 2.1.2 Rincewind를 다운로드했는데 매우 잘 작동합니다.

속도:

1 - 도구 > 기본 설정을 클릭하고 모두 라디오 버튼을 클릭합니다.

2 - 아래로 스크롤하고 동영상 옆에 있는 + 기호를 클릭하여 확장합니다.

3 - 아래로 스크롤하여 "장면 필터"를 클릭하고 "디렉터리 경로 접두어" 정보(프레임을 저장할 위치)를 입력합니다. 저장을 클릭하지 마세요.

4 - 위로 스크롤하여 "필터" 아래의 "동영상" 단어를 클릭합니다.

5 - 장면 비디오 필터 확인란을 클릭하고 저장을 클릭합니다.

6 - 비디오를 열고 실행하면 .png가 저장됩니다.

7 - 프레임 저장을 중지하려면 5단계로 돌아가서 장면 비디오 필터를 선택 취소하세요. 설정을 어디서 찾을 수 있는지 알고 나면 정말 쉽습니다.

답변3

VLC에서는 비디오를 마우스 오른쪽 버튼으로 클릭하고 스냅샷을 찍을 수 있습니다.

답변4

도움이 되었기를 바랍니다

#!/bin/bash
source_dir="."
output_dir="."
input_file_types=(avi wmv flv mkv mpg mp4)
output_file_type="jpg"

convert() {
        echo "" | ffmpeg -ss $ss -y -i "$in_file" -an -f image2 -vframes 1 "$output_dir/$out_file"
}

for input_file_types in "${input_file_types[@]}"
do

        find "$source_dir" -name "*.$input_file_types" -print0 | while IFS= read -r -d $'\0' in_file
        do
                echo "Processing…"
                echo ">Input  "$in_file
                # Replace the file type
                out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_types/\1$output_file_type/g")
            echo ">Output "$out_file

# get video duration
#    fulltime=`ffmpeg -i "$in_file" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//`;
#    hour=`echo $fulltime | cut -d ':' -f 1`;
#    minute=`echo $fulltime | cut -d ':' -f 2`;
#    second=`echo $fulltime | cut -d ':' -f 3 | cut -d '.' -f 1`;

#    seconds=`expr 3600 \* $hour + 60 \* $minute + $second`;
#    ss=`expr $seconds / 2`; # from the middle of video



    ss=`expr 10`; # from the 10sec of video



    # Convert the file
                convert "$in_file" "$out_file"

                if [ $? != 0 ]
                then
                    echo "$in_file had problems" >> ffmpeg-errors.log
                fi

                echo ">Finished "$out_file "\n\n"
        done
done

관련 정보