비디오를 새 폴더 구조로 변환 할 때 "그러한 파일이나 디렉토리가 없습니다"


0

비디오를 mov에서 mp4 (및 다른 비틀기)로 변환하는 동안 큰 비디오 아카이브 (하위 폴더에 앉아있는)를 병렬 폴더 구조로 복사하려고합니다. 이것은 명령입니다 :

for f in Users/me/VIDEOARCHIVE/*/*.mov; do ffmpeg -i "$f" "Users/me/CONVERTED/${f%.mov}.mp4"; done

그러나 출력 파일에 "그런 파일이나 디렉토리가 없습니다"라는 메시지가 나타납니다. 이 사이트에는 비슷한 질문이 많이 있지만 그 중 어느 것도 내 시나리오에 도움이되지 않았습니다.
또한 빈 폴더 구조를 미리 만들어서 .mp4 파일 만 만들면되지만 여전히 같은 오류가 발생합니다.

(빈) 폴더 구조가 미리 만들어져 있으면 작동합니다. 그러나 누락 된 폴더가 있으면 "그러한 파일이나 디렉토리가 없습니다".

파일을 폴더에 넣을 수 있도록 필요한 경우 상위 폴더를 작성하도록 지시하는 방법이 있습니까?


3
set -x미리 또는 echo "Users/me/CONVERTED/${f%.mov}.mp4"루프 내부에서 디버깅을 시도 했습니까 ? 이것은 당신에게 힌트를 줄 것입니다.
Kamil Maciorowski

ffmpeg는 긴 파일 이름이나 경로 또는 공백이있는 파일에 문제가있을 수 있습니다. 더 짧은 것을 시도하십시오.
DrMoishe Pippik

@KamilMaciorowski 감사합니다. 병렬 폴더 구조를 잘못된 위치에 배치했습니다 ... 내 나쁜 : P 그러나 ffmpeg폴더가 필요한 경우 왜 폴더를 만들지 않는지 여전히 궁금 합니다.
jan

ffmpeg출력 할 때 디렉토리를 만들지 않는 것 같습니다 . 당신에 do당신의 전에 루프를 ffmpeg호출하고, 출력 파일을 포함 할 디렉토리의 경로 얻기 mkdir -p를. 선택적으로 작성하기 전에 존재 여부를 확인하십시오.
ivanivan

답변:


3

파일을 폴더에 넣을 수 있도록 필요한 경우 상위 폴더를 작성하도록 지시하는 방법이 있습니까?

ffmpeg? 아니요. 자체 폴더를 만들지 않습니다. 실제로이 작업을 수행하는 프로그램은 거의 없습니다.

몇 가지 제안 :

  • 미리 폴더를 작성해야합니다.
  • $f전체 파일 경로가 이미 포함되어 있으므로 파일의 기본 이름을 사용해야합니다 .
  • **/*모든 디렉토리를 탐색하려면 비디오 아카이브 ( )에 재귀 글 로빙을 사용해야합니다 .

그것을 정리하면 :

# enable recursive globbing
shopt -s globstar
# create the directory if necessary
dir="/Users/me/CONVERTED/"
mkdir -p "$dir"
# iterate over all files
for f in /Users/me/VIDEOARCHIVE/**/*.mov; do
    # get the file's basename
    fname="$(basename "$f")"
    # run the command, replacing the file extension
    ffmpeg -i "$f" "$dir/${fname%.mov}.mp4"
done

어, 죄송합니다. ffmpeg가 출력 폴더를 만들 수 있다고해도 코드가 잘못되었다는 사실을 알지 못하고 사용자 루프에서 가져 왔습니다. 그 문제를 해결하겠습니다.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.