비디오에서 키 프레임을 추출하기 위해 ffmpeg를 사용하고 있습니다. 이것은 명령입니다 :
ffmpeg -i test2.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 160x90 -f image2 thumbnails-%02d.jpeg
비디오에서 추출 된 각 키 프레임의 인덱스를 어떻게 얻을 수 있습니까? 예를 들어 첫 번째 I- 프레임의 경우 인덱스는 0이고 두 번째 I- 프레임의 경우 24입니다.
비디오에서 키 프레임을 추출하기 위해 ffmpeg를 사용하고 있습니다. 이것은 명령입니다 :
ffmpeg -i test2.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 160x90 -f image2 thumbnails-%02d.jpeg
비디오에서 추출 된 각 키 프레임의 인덱스를 어떻게 얻을 수 있습니까? 예를 들어 첫 번째 I- 프레임의 경우 인덱스는 0이고 두 번째 I- 프레임의 경우 24입니다.
답변:
@dstob에서 언급했듯이 ffprobeI- 프레임과 관련 정보를 얻는 데 사용할 수 있습니다 . 다운로드 페이지에ffprobe 일부 정적 빌드가 포함되어 있으며 소스에서도 빌드 할 수 있습니다.
이것은 Linux / Unix를 사용한다고 가정합니다.
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
이 grep명령은 줄을 필터링 I하고 -n옵션을 사용하여 색인을 계산합니다 . 이 cut명령은 출력의 첫 번째 열 (인덱스) 만 선택합니다. 이 인덱스는 0이 아닌 1을 기준으로합니다.
실제로이 색인을 목록으로 파이프 할 수 있습니다.
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1 > frame_indices.txt
그런 다음 모든 썸네일 목록도 만드십시오.
ls -1 thumbnails*.jpeg > thumbnails.txt
그런 다음이 두 가지를 함께 붙여 넣습니다.
paste thumbnails.txt frame_indices.txt > combined.txt
이제 목록에 썸네일 이름과 색인이 포함됩니다. 이를 기반으로 이름을 변경하십시오.
while read -r thumbnail index; do
newIndex=$(echo $index - 1 | bc) # subtract 1 from the index
mv -- "$thumbnail" "thumbnail-$newIndex.jpeg" # rename file
done < combined.txt
이름을 바꿀 것입니다 위의 thumbnail-01.jpeg에 thumbnail-0.jpeg. 출력 인덱스에는 제로 패딩이 없습니다. 5 자리 숫자로 0을 채우려면 다음을 사용하십시오 printf.
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
Windows에서는 정확히 똑같이 ffprobe하지만 출력을 다르게 구문 분석합니다. 그래도 이름 바꾸기를 수행하는 방법을 모르겠습니다.
[FRAME]줄과 한 [/FRAME]줄 이 있기 때문에 3의 요인에 의해 벗어났다고 생각합니다 pict_type.
-of csv옵션을 사용하면 프레임 당 한 줄만 있습니다 ffprobe. 당신이 묘사하는 것은 기본 출력 형식입니다.
원래 언급 한대로 FFMPEG를 사용하려는 경우 다음을 사용하여 jpg를 만들뿐만 아니라 전체 또는 부분 목록을 나열 할 수 있습니다.
ffmpeg.exe \
-i "C:\Users\UserName\Desktop\jpegs and list\VideoName.mp4" \
-t 15 \
-vf select="eq(pict_type\,PICT_TYPE_I)" \
-vsync 2 \
-s 160x90 \
-f image2 thumbnails-%02d.jpeg \
-loglevel debug 2>&1| for /f "tokens=4,8,9 delims=. " %d in ('findstr "pict_type:I"') do echo %d %e.%f>>"keyframe_list.txt"
-t 15시간 제한없이 제거 하거나 적합한 것으로 변경하십시오. -s 160x90 -f image2 thumbnail-%02d.jpeg축소판 그림 제거에 맞게 제거 하거나 변경 하십시오 .