ffmpeg는 bash에서 실행할 때 점이 포함된 출력의 경로를 자릅니다.

ffmpeg는 bash에서 실행할 때 점이 포함된 출력의 경로를 자릅니다.

다음과 같이 점이 있는 경로가 있는 경우:

/home/user/Documents/hello/test.testing_23-24.123/test.testing_23-24.124

ffmpeg파일 경로를 인수로 전달하면 파일을 찾을 수 있지만 파일을 출력할 때 파일 경로에서 처음 발견된 점으로 경로 이름이 잘립니다.

예를 들어 다음과 같은 결과를 얻었습니다.

#!/bin/sh
src_folder=`pwd`

for filename in "${src_folder}"/*.MP4
  do
    ffmpeg -threads 0 -probesize 100M -analyzeduration 100M -i "${filename}" \
      -c:v libx265 -preset medium -pass 1 -tune grain -x265-params "crf=28:pmode=yes" \
      -c:a libmp3lame -q:a 9 -strict experimental "${filename%%.*}"_1stpass.mkv
  done

출력 상태:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/user/Documents/hello/test.testing_23-24.123/test.testing_23-24.124/GOPR2103.MP4':

[..]

Output #0, matroska, to '/home/user/Documents/hello/test_hevc.mkv':

출력 파일의 폴더 경로는 다음과 같습니다.

 /home/user/Documents/hello/test.testing_23-24.123/test.testing_23-24.124

ffmpeg출력 경로에서 첫 번째 지점을 만난 후 잘립니다. 이는 출력 파일 이름에만 발생합니다. 또한 잘린 경로를 파일 이름으로 사용합니다.

누구든지 이 문제를 해결하는 방법에 대한 올바른 방향을 알려줄 수 있습니까?

추신: 점이 있는 폴더를 사용하지 않는 것이 나쁜 해결 방법이라는 것을 알고 있습니다.]

답변1

~처럼지안 댓글로 지적해, 당신은 (의도치 않게?) 첫 번째 점/마침표를 찾을 때까지 파일 경로 끝에서 가능한 한 많은 문자를 제거하도록 쉘에 지시 %%합니다 .*. "확장자"(예 MP4: )의 파일 이름을 제거하려고 할 수 있습니다. 이 경우 단일 을 사용해야 합니다 %. 이는 다음과 같습니다.가장 짧은문자 수.

MP4 파일을 선택한다는 것을 알고 있으므로 확장을 더욱 단순화 %하고 해당 4자를 제거하도록 직접 요청할 수 있습니다.

pwd또한 현재 디렉터리에서 파일 이름을 수집하는 것만 필요한 경우 확장할 필요가 거의 없습니다.

다음과 같은 것을 사용하십시오.

for filename in ./*.MP4
  do
    ffmpeg -threads 0 -probesize 100M -analyzeduration 100M \
      -i "${filename}" \
      -c:v libx265 -preset medium -pass 1 -tune grain -x265-params \
      "crf=28:pmode=yes" -c:a libmp3lame -q:a 9 -strict experimental \
      "${filename%.MP4}"_1stpass.mkv
  done

관련 정보