개요:
주로 MKV 라이브러리를 MP4로 리먹싱하려고 합니다. 비디오 파일에서 자막을 추출한 스크립트가 있습니다.
특정 폴더의 .mkv 파일을 다시 다중화하는 또 다른 스크립트가 있습니다. 나에게 필요한 것은 스크립트가오직.srt 파일이 있음을 감지하는 remux 폴더.
모든 .srt 파일은 ***.eng.srt로 끝납니다.
현재 remux 스크립트는 다음과 같습니다.
#!/bin/bash
IFS=$'\n'
clear
for filename in *.mkv
do
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i $filename -c:v copy -c:a copy -c:s mov_text $newfilename
done
감사해요! 어떤 도움이라도 대단히 감사하겠습니다.
답변1
나는 당신이 이것을 찾고 있다고 생각합니다 :
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
IFS='\n'
거기에서 유용한 작업을 수행하지 않기 때문에 제거했습니다 . for
변수를 인용하는 한 이름에 공백이 포함되어 있어도 루프는 매우 안전합니다.
[ -e foo ]
의 존재 여부를 테스트 합니다 foo
. 반대로 [ ! -e foo ]
가 없으면 true입니다 foo
. 이 경우 은 foo
glob( *.srt
)이므로 일치하는 파일이 있으면 테스트가 false가 됩니다. 위 스크립트에서 파일이 발견 &&
되지 않으면 srt
오류 메시지가 인쇄되고 스크립트가 종료된다는 의미입니다.