해당 파일 또는 디렉터리 오류가 없습니다.

해당 파일 또는 디렉터리 오류가 없습니다.

제가 작성하고 있는 쉘 스크립트는 다음과 같습니다.

#FOR YOUTUBE-DL COMMAND
read -r -p "Do you want to download a link? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
    read -e -p "Enter Youtube link: " youtube_link
    youtube-dl $youtube_link -o "/home/tex/catkin_ws/youtube_videos/%(title)s%(ext)s" -f mp4
fi

#FOR FFMPEG COMMAND 
read -e -p "Enter video file dir: " video_dir
video_dir="${video_dir/#\~/$HOME}"
echo $video_dir
read -e -p "Enter fps: " fps
read -e -p "Enter video file image destination: " image_destination
image_destination="${image_destination/#\~/$HOME}"
image_format="image-%04d.jpeg"
image_destination=$(echo ${image_destination}${image_format})   
ffmpeg -i $video_dir -r $fps $image_destination

간단합니다. 몇 가지 명령을 반복해서 작성하는 대신 자동화하고 싶을 뿐입니다...

그런데 이상한 오류가 발생합니다. 이것은 내 첫 번째 쉘 스크립트이므로 내가 뭘 잘못하고 있는지 잘 모르겠습니다.

마지막 줄에 도달하면 :

ffmpeg -i $video_dir -r $fps $image_destination

$video_dirffmpeg 명령에 문제가 있습니다. 첫째, 내가:

echo $video_dir13번째 줄에서 나는 다음을 얻는다:

/home/usr/ws/youtube_videos/AIRSOFT - 4 Player Split Screenmp4

하지만,

ffmpeg가 오류를 반환합니다:

/home/usr/ws/youtube_videos/AIRSOFT: No such file or directory

이는 첫 번째 부분(AIRSOFT)만 읽고 나머지 부분(AIRSOFT - 4....)은 읽지 않는 것과 같습니다.

이유가 있나요..?

답변1

Bash는 파일 이름의 나머지 부분에 공백을 사용하는 것에 대해 모릅니다. Bash가 전체 파일 이름을 사용하도록 지정(이스케이프)해야 합니다.

그래서 당신은 할 수 있습니다

  1. "AIRSOFT - 4 Player Split Screen.mp4"를 "AIRSOFT\ -\ 4\ Player Split\ Screen.mp4"로 변경합니다.
  2. 따옴표를 추가합니다 $video_dir. (?)
  3. bash가 쉽게 구문 분석할 수 있도록 파일 이름을 공백 없이 다른 이름으로 바꾸세요.

귀하의 경우에는 세 번째 옵션이 가장 쉽습니다.

관련 정보