다음과 같이 점이 있는 경로가 있는 경우:
/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