![1080p보다 작은 모든 파일을 나열하는 방법](https://linux55.com/image/152872/1080p%EB%B3%B4%EB%8B%A4%20%EC%9E%91%EC%9D%80%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%82%98%EC%97%B4%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
저는 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
. 이러한 불일치를 알고 싶을 수도 있습니다.)