코덱별로 영상을 정렬하고 명령어를 실행하는 방법

코덱별로 영상을 정렬하고 명령어를 실행하는 방법

그래서 필터링을 하려고 했는데H265/HEVC이전 코덱이 아닌 비디오만 표시한 다음 내 설정을 사용하여 비디오를 트랜스코딩하는 명령을 실행합니다.

내가 원하는 방식으로 해결 방법이나 방법을 찾을 때마다 작동하지 않습니다. 그것은 일종의 버그이거나 더 이상 사용되지 않으며 지금은 그렇게 되지 않습니다.

하지만 다음과 같아야 합니다.

find /mnt/videos -type f *.mp4 exec $filtercmd; $transcodecmd

이 명령은 파일의 절대 경로를 인쇄하여 두 번째 명령에서 이를 사용하여 트랜스코딩할 수 있도록 해야 합니다.

ffprobe더 깔끔한 접근 방식인 것 같아서 사용하는 것을 선호합니다 . 나는 기본적으로 누군가에게 명령이나 스크립트를 작성해달라고 요청하는 것을 싫어하지만 지식이 없습니다. 이것이 계획대로 글쓰기를 위한 것이라면 훌륭합니다.

미리 감사드립니다!

편집하다:

아마도 해결책을 찾았을 것 같아요.

#!/bin/bash

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green

# Bold
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green


for i in $(find /mnt/movies/ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'); do
    ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "${i}"
    if [[ $1 == 'h264' ]]; then
        echo "Video is a ${BGreen}H264${Color_off} video file"
        python sickbeard_mp4_automator/manual.py -i "$i" -a
    elif [[ $1 == hevc ]]; then
        echo "Video is alread transcoded to ${BRed}HEVC${Color_Off}"
    fi
done

하지만 공간을 탈출하는 것 같습니다. 종료할 수 없는 것 같습니다. 어떻게 생각하나요?

답변1

답을 찾았어요!

#!/bin/bash

IFS=$'\n'

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green

# Bold
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green

for i in $(find /mnt/movies/ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'); do
#    ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i"
    if [ $(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i") = h264 ]; then
        echo -e "Video is a ${BGreen}H264${Color_Off} video file"
        python2 sickbeard_mp4_automator/manual.py -i "$i" -a
    elif [ $(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i") == hevc ]; then
        echo -e "Video is already transcoded to ${BRed}HEVC${Color_Off}"
    elif [ $(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i") == vp8 ]; then
        echo -e "Video is a ${BGreen}WEBM${Color_Off} video file"
        python2 sickbeard_mp4_automator/manual.py -i "$i" -a
    fi
done

H264를 확인하고 파일을 트랜스코딩합니다. 그렇지 않으면 그대로 유지됩니다. 모든 분들의 도움에 감사드립니다. 제가 가끔 어리석을 수도 있다는 것을 깨닫습니다. :)

답변2

다음 명령을 사용할 수 있습니다.

find /your/path -exec bash -c "if file {} | grep "python"; then cat {} ; fi" \;

이 명령은 file발견된 모든 파일에 대해 실행되거나 이 명령의 출력에 "python"이 포함된 경우 실행됩니다 cat.

물론 이 명령을 필요에 맞게 조정해야 합니다.

관련 정보