1080p보다 작은 모든 파일을 나열하는 방법

1080p보다 작은 모든 파일을 나열하는 방법

저는 youtube-dl을 실행하는 일일 크론 스크립트를 사용하여 여러 YouTube 채널을 보관합니다. 그러나 스크립트가 올바르게 작동하는지 확인하기 위해 비디오를 확인하는 동안 보관된 채널 중 하나의 최신 비디오 중 일부가 1080p60 대신 360p로 다운로드된 것을 발견했습니다. 유튜브에서 영상을 확인해 보니 정말 360p 입니다. 며칠 후 비디오 처리가 완료되고 해상도는 1080p60이 됩니다.

Youtube 처리가 완료된 후 삭제하고 다시 다운로드할 수 있도록 해상도가 1080p보다 낮은 폴더에 있는 모든 비디오를 어떻게 나열합니까?

ffmpeg나 다른 도구를 사용하여 작성하는 방법이 있나요?

앞으로 이 문제를 방지하는 방법에 대한 제안도 크게 감사하겠습니다.

답변1

에서 언급했듯이이 답변다음과 같은 명령을 사용하여 비디오 파일의 크기를 얻을 수 있습니다.

ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 input.mp4

이것은 다음과 같은 출력을 제공합니다

1280

그런 다음 동영상으로 무엇을 할지 결정할 수 있습니다.

답변2

exiftool -q -r -if '$MIMEType =~ m{^video/} and
                    $ImageHeight < 1080 and
                    print "$Directory/$FileName\0" and 0' . |
  xargs -r0 echo rm -f

(GNU xargs또는 호환 가정).

echo높이가 1080픽셀 미만인 이미지가 포함된 현재 디렉터리의 모든 비디오는 반복적으로 삭제됩니다(삭제하는 경우). 파일 이름은 UTF-8로 인코딩된 것으로 (올바르게) 가정됩니다( -charset다른 문자 집합에 대한 옵션 참조 ).

로 파이핑하는 대신 xargs rm파일( > list)에 저장할 수 있습니다. 먼저 목록에서 몇 가지 검사를 수행하세요.

xargs -r0a list ls -ldrS

좋아 보인다면:

xargs -r0a list rm

또는 모든 관련 정보를 읽기 쉽고 구문 분석할 수 있는 형식으로 얻을 수 있도록 정보를 JSON 형식으로 저장합니다.

exiftool -q -r -j -if '$MIMEType =~ m{^video/}' \
  -ImageWidth -ImageHeight -VideoFrameRate -MIMEType . > list.json

그런 다음 몇 가지 기준에 따라 목록을 확인하고 제거합니다.

PERL_UNICODE= json_xs < list.json -t none -e '
  for (@{$_}) {
    unlink $_->{SourceFile} if
      $_->{ImageHeight} < 1080 || $_->{VideoFrameRate} < 60
  }'

Videoframerate(FLV 파일의 경우 가 아니라는 사실을 발견했습니다 VideoFrameRate. 이러한 불일치를 알고 싶을 수도 있습니다.)

관련 정보