여러 이미지 시퀀스를 비디오 파일로 변환하는 Bash 스크립트

InverseTelecine

현재 작업 디렉토리의 하위 디렉토리 내에서 여러 일련의 이미지 시퀀스를 가져 와서 ffmpeg를 통해 전송하여 디렉토리 이름을 딴 현재 작업 디렉토리에 비디오 파일을 만드는 스크립트를 만들려고합니다. 시퀀스의 시작 번호와 마찬가지로 이미지 시퀀스 이름이 다양하다는 사실로 인해 복잡하지만 실제 문제는 bash 스크립팅을 처음 사용한다는 것입니다. 다음은 파일의 예입니다.

directoryFirstRender01
     renderOne0032.png
     renderOne0033.png
     renderOne0034.png
directoryFourthRender01
     renderFour4253.png
     renderFour4254.png
     renderFour4255.png
directoryFifthRender01
     renderFiveTwo1367.png
     renderFiveTwo1368.png
     renderFiveTwo1369.png

다음은 내가 알고있는 몇 가지 문제와 내가 알지 못하는 더 많은 문제가있는 스크립트의 대략적인 개요입니다. 내가 얼마나 많은 문제가 있는지 모르는 이유는 파일 이름을 가져오고 구문 분석하는 데 어려움을 겪었 기 때문에 작동하지 않으면 나머지를 테스트 할 수 없기 때문입니다.

#!/bin/bash

for DIR in (ls -d */); do
    1STFILE=(ls $dir/ | sort -n | head -1)
    STARTNO=${1STFILE:(-8):4}
    IMGSEQ=${1STFILE%????.*}
    EXTEN=${1STFILE*.}
    ffmpeg -start_number $STARTNO -i $IMGSEQ%04d.$EXTEN $DIR.mkv
done

내가 알고있는 현재 주요 문제는 다음과 같습니다.

  1. 디렉토리에서 첫 번째 파일의 파일 이름을 얻는 방법을 모르겠습니다. ls dir/ | sort -n | head -1터미널에서는 작동하지만 스크립트에서는 작동하지 않습니다.
  2. 첫 번째 파일의 첫 번째 숫자를 얻기위한 부분 문자열 추출은 4 자리의 이미지 시퀀스에서만 작동합니다. 받아 들일 수 있도록하는 방법이 있나요 renderSix00001.png-renderSix99999.pngrenderSeven001.png-renderSeven999.png도는? 그것은 또한 점점 라인에 문제가있어 $IMGSEQ, 그리고 %04dffmpeg라는 라인은 어떻게 든 변화 될 필요가있다.
  3. 괄호없이 ffmpeg 입력 파일 이름에서 $IMGSEQ변수 믹싱에 문제가있을 것이라고 생각 %04d하지만 아직까지는 그렇게하지 않았습니다. 내가 거기에 사용 무엇을 할 구문 $IMGSEQ(%04d).$EXTEN또는 $IMGSEQ {%04d}.$EXTEN어쩌면? (이렇게 많은 사람들이 스크립팅의 깊은 끝에서 점프하는 것이 짜증나는 이유입니다)
  4. (사소한 문제 : 1. lsin을 사용 하는 for DIR in (ls -d */)것이 눈살을 찌푸리는 것을 알고 있지만 현재 작업 디렉토리에서 파일을 필터링하고 디렉토리에서 작업하는 다른 방법을 모릅니다.)

스크립트가 완전히 엉망인 것 같습니다. 전체 작업을 수행하기위한 전반적인 지침은 매우 환영 할 것입니다. 그러나 파일 이름을 가져오고 구문 분석하는 데 도움을받을 수 있다면 전체 작업을 안내 할 인내심이없는 사람이 있으면 나머지는 직접 수정할 수 있습니다. 감사합니다.

업데이트 1 : (론의 제안을 적용한 후)

다시 감사합니다 Ron! 이것은 거의 최종 스크립트입니다.

#!/bin/bash

for DIR in $(ls -d */)
do
    FIRSTFILE=$(ls $DIR | sort -n | head -1)
    STARTNO=$(echo $FIRSTFILE | grep -Eo "[0-9]+")
    DIGITNO=${#STARTNO} 
    IMGSEQ=${FIRSTFILE%????.*}
    EXTEN=${FIRSTFILE#*.}
    OUTPUT=${DIR%/}
    ffmpeg -start_number $STARTNO -i "$DIR$IMGSEQ"%0"$DIGITNO"d".$EXTEN" $OUTPUT.mkv
done

Ron 덕분에 $STARTNO변수는 이제 여러 자릿수 길이를 허용하므로 $DIGITNO에서 길이 매개 변수 확장 을 사용하여 %04d부품 에서 사용할 번호를 얻 %03d거나 %05d필요에 따라 작동합니다. 주변 변수 와을 "분리하기 위해의 자유로운 사용이 %04d나쁜 형식으로 간주되지 않기를 바랍니다 (그렇다면 올바른 방법은 무엇입니까?). 스크립트에서 유일하게 빠진 부분은 $IMGSEQ여러 자리 길이를 받아들이 는 방법 입니다. 지금은 그것에 대한 아이디어가 없습니다. 아는 사람이 있다면 알아 주면 감사하겠습니다.하지만 마치 한 번의 평생 동안 그 이상을 가지고 있지 않은 것처럼 매개 변수 확장 문서를 살펴보면 찾을 수있을 것입니다. :)

업데이트 2 : (성공!)

알아 냈어! 에 대한 론의 제안에 따라 작업을 (받는 방법 IMGSEQ은 그 여러 자리의 길이를 포함하는 이름을 허용하기 위해) $STARTNO사용 (echo $FIRSTFILE | grep -Eo "[0-9]+")내가 함께했다

IMGSEQ=$(echo ${FIRSTFILE%.*} | grep -iEo "[a-z]+")
  1. ${FIRSTFILE%.*} 첫 번째 파일을 취하고 확장자를 제거합니다.
  2. grep은 패턴 검색입니다.
  3. -i일부는 -iEogrep이 대문자 및 소문자 패턴 일치를 허용하도록하는 것입니다.
  4. -E일부는 "PATTERN을 확장 정규식으로 해석" -iEo하는 것입니다 (에서 인용 man grep). 무엇을 의미 하던지.
  5. -o부분은 -iEo일치하는 패턴 만 인쇄하는 것입니다.
  6. [a-z] 알파벳 문자의 패턴과 일치하는 것입니다.
  7. + grep에게 이전 알파벳 패턴이 "한 번 이상"일치해야한다고 알려줍니다 (모든 문자를 얻으려면 반복해서 수행).

그 한계는이 같은 특수 문자가 포함 된 파일 이름을 처리 할 것입니다 -또는 _,하지만 지금은 그와 함께 살 수 있습니다.

그래서 여기에 준결승 대본이 있습니다!

#!/bin/bash

for DIR in $(ls -d */)
do
    FIRSTFILE=$(ls $DIR | sort -n | head -1)
    STARTNO=$(echo $FIRSTFILE | grep -Eo "[0-9]+")
    DIGITNO=${#STARTNO} 
    IMGSEQ=$(echo ${FIRSTFILE%.*} | grep -iEo "[a-z]+")
    EXTEN=${FIRSTFILE#*.}
    OUTPUT=${DIR%/}
    ffmpeg -n -start_number $STARTNO -i "$DIR$IMGSEQ"%0"$DIGITNO"d".$EXTEN" $OUTPUT.mkv
done

따라서 위의 예제 디렉토리와 같은 이름의 일부 디렉토리가있는 디렉토리에서 실행합니다 (하지만 작동하는지 확인하기 위해 4 개 이상의 0으로 채워진 이미지 시퀀스가있는 디렉토리를 추가 한 경우 제외),이 스크립트는 다음 ffmpeg 행을 차례로 실행합니다.

ffmpeg -n -start_number 0032 -i directoryFirstRender01/renderOne%04d.png directoryFirstRender01.mkv
ffmpeg -n -start_number 4253 -i directoryFourthRender01/renderFour%04d.png directoryFourthRender01.mkv
ffmpeg -n -start_number 01367 -i directoryFifthRender01/renderFiveTwo%05d.png directoryFifthRender01.mkv

완벽 해! Ron을 도와 주셔서 다시 한 번 감사드립니다! 당신의 도움 없이는 끝낼 수 없었을 것입니다.

Ron

디렉토리에서 첫 번째 파일의 파일 이름을 얻는 방법을 모르겠습니다. ls dir / | 정렬 -n | head -1은 터미널에서 작동하지만 스크립트에서는 작동하지 않습니다.

다시 작성하는 것이 좋습니다.

for DIR in (ls -d */); do
    1STFILE=(ls $dir/ | sort -n | head -1)

같이

for DIR in (ls -d */)
do
    1STFILE=$(ls $DIR | sort -n | head -1)

받아 들일 수 있도록하는 방법이 있나요 renderSix00001.png-renderSix99999.pngrenderSeven001.png-renderSeven999.png도는?

위의 내용을 따랐다면 :

STARTNO=$(echo $1STFILE | grep -Eo "[0-9]+")

파일 이름에있는 모든 숫자를 가져와야합니다.

내가 거기에 사용 무엇을 할 구문 $IMGSEQ(%04d).$EXTEN또는 $IMGSEQ {%04d}.$EXTEN어쩌면?

그 안에 넣습니다 "".

ffmpeg -start_number $STARTNO -i "$IMGSEQ%4d.$EXTEN" "$DIR.mkv"

이제 사용 "$IMGSEQ%4d.$EXTEN"하면 문제가 발생할 것입니다 (그게 무엇인지 확인하십시오!). 그러니 만들어"$DIR$IMGSEQ%4d.$EXTEN"

사용 하면 원하는 것이 아닌 "$DIR.mkv"숨겨진 파일 .mkv생성 됩니다. 내가 생각한별로 멋지지 않은 방법 /은 변수 에서 접미사 제거하여 디렉토리 이름 만 저장 하는 것입니다.

OUTPUT=$(echo $DIR | sed 's/\/$//')

다음과 같이 사용하십시오 ffmpeg.

ffmpeg -start_number $STARTNO -i "$DIR$IMGSEQ%4d.$EXTEN" "$OUTPUT.mkv"

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

FFmpeg를 사용하여 비디오를 이미지 시퀀스로 변환하는 파이썬 스크립트

분류에서Dev

ppm 이미지 시퀀스를 avi 비디오로 변환

분류에서Dev

이미지 시퀀스를 스테레오 H.264 비디오로 변환

분류에서Dev

ffmpeg를 사용하여 wav 파일을 변환하는 Powershell 스크립트, 이러한 파일 오류 없음

분류에서Dev

VP9 인코더를 사용하여 FFMpeg 이미지 시퀀스를 비디오로

분류에서Dev

bash 스크립트로 여러 디렉토리가 있는지 확인하십시오.

분류에서Dev

MacOS 용 비디오를 이미지 시퀀스로 변환하기위한 FFMPEG 다중 작업

분류에서Dev

여러 avi를 mp4로 변환하는 Bash 스크립트

분류에서Dev

이미지 시퀀스를 사용하여 tkinter에 비디오를 표시하는 방법

분류에서Dev

여러 이미지의 자바 스크립트로 CSS를 변경하는 방법-디스플레이 : 표시 할 없음 : 인라인

분류에서Dev

이미지 시퀀스를 비디오로 재생

분류에서Dev

텍스트 파일을 입력으로 받고 여러 명령을 통해 텍스트 파일을 파이프하는 Bash 스크립트 작성

분류에서Dev

스크립트로 여러 파일 이름을 변경하고 이전 이름을 사용하십시오.

분류에서Dev

FFMPEG를 사용하여 증가하는 이미지 시퀀스에서 비디오 만들기

분류에서Dev

디렉토리에서 파일 변경을 감지하는 Bash 스크립트

분류에서Dev

일부 변환이 적용된 'cut'/ 'find'의 출력을 'scp'로 리디렉션하는 bash 스크립트

분류에서Dev

wget 스크립트이지만 스크립트의 SHA256이 한 줄과 일치하는 경우에만 bash로 파이프하십시오.

분류에서Dev

여러 터미널 과부를 여는 Bash 스크립트?

분류에서Dev

웹 페이지에서 이미지, 주문형 비디오를로드하는 스크립트

분류에서Dev

Youtube XML 시간이 지정된 텍스트를 srt로 변환하는 파이썬 스크립트 오류

분류에서Dev

Youtube XML 시간이 지정된 텍스트를 srt로 변환하는 파이썬 스크립트 오류

분류에서Dev

awk를 도우미로 사용하여 bash 스크립트에서 파일 이름 낮추기

분류에서Dev

ffmpeg : ffmpeg를 사용하여 이미지 / 오디오를 비디오로 변환

분류에서Dev

여러 파일의 압축을 푸는 Bash 스크립트

분류에서Dev

여러 파일의 압축을 푸는 Bash 스크립트

분류에서Dev

여러 프로세스를 사용하여 파일을 처리하는 Bash 스크립트

분류에서Dev

<비디오> 이미지 피드는 미러 이미지, 이미지를 비 미러 이미지로 변환하는 방법

분류에서Dev

FFmpeg를 사용하여 동일한 이름의 오디오 및 비디오 파일을 다중화하는 스크립트

분류에서Dev

bash 스크립트로 여러 tar 파일을 만들고 날짜를 파일 이름으로 사용하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    FFmpeg를 사용하여 비디오를 이미지 시퀀스로 변환하는 파이썬 스크립트

  2. 2

    ppm 이미지 시퀀스를 avi 비디오로 변환

  3. 3

    이미지 시퀀스를 스테레오 H.264 비디오로 변환

  4. 4

    ffmpeg를 사용하여 wav 파일을 변환하는 Powershell 스크립트, 이러한 파일 오류 없음

  5. 5

    VP9 인코더를 사용하여 FFMpeg 이미지 시퀀스를 비디오로

  6. 6

    bash 스크립트로 여러 디렉토리가 있는지 확인하십시오.

  7. 7

    MacOS 용 비디오를 이미지 시퀀스로 변환하기위한 FFMPEG 다중 작업

  8. 8

    여러 avi를 mp4로 변환하는 Bash 스크립트

  9. 9

    이미지 시퀀스를 사용하여 tkinter에 비디오를 표시하는 방법

  10. 10

    여러 이미지의 자바 스크립트로 CSS를 변경하는 방법-디스플레이 : 표시 할 없음 : 인라인

  11. 11

    이미지 시퀀스를 비디오로 재생

  12. 12

    텍스트 파일을 입력으로 받고 여러 명령을 통해 텍스트 파일을 파이프하는 Bash 스크립트 작성

  13. 13

    스크립트로 여러 파일 이름을 변경하고 이전 이름을 사용하십시오.

  14. 14

    FFMPEG를 사용하여 증가하는 이미지 시퀀스에서 비디오 만들기

  15. 15

    디렉토리에서 파일 변경을 감지하는 Bash 스크립트

  16. 16

    일부 변환이 적용된 'cut'/ 'find'의 출력을 'scp'로 리디렉션하는 bash 스크립트

  17. 17

    wget 스크립트이지만 스크립트의 SHA256이 한 줄과 일치하는 경우에만 bash로 파이프하십시오.

  18. 18

    여러 터미널 과부를 여는 Bash 스크립트?

  19. 19

    웹 페이지에서 이미지, 주문형 비디오를로드하는 스크립트

  20. 20

    Youtube XML 시간이 지정된 텍스트를 srt로 변환하는 파이썬 스크립트 오류

  21. 21

    Youtube XML 시간이 지정된 텍스트를 srt로 변환하는 파이썬 스크립트 오류

  22. 22

    awk를 도우미로 사용하여 bash 스크립트에서 파일 이름 낮추기

  23. 23

    ffmpeg : ffmpeg를 사용하여 이미지 / 오디오를 비디오로 변환

  24. 24

    여러 파일의 압축을 푸는 Bash 스크립트

  25. 25

    여러 파일의 압축을 푸는 Bash 스크립트

  26. 26

    여러 프로세스를 사용하여 파일을 처리하는 Bash 스크립트

  27. 27

    <비디오> 이미지 피드는 미러 이미지, 이미지를 비 미러 이미지로 변환하는 방법

  28. 28

    FFmpeg를 사용하여 동일한 이름의 오디오 및 비디오 파일을 다중화하는 스크립트

  29. 29

    bash 스크립트로 여러 tar 파일을 만들고 날짜를 파일 이름으로 사용하는 방법은 무엇입니까?

뜨겁다태그

보관