내 말은, 비디오에서 이미지 파일(예: 스크린샷)을 생성하는 방법입니다.
답변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