재생 목록 파일의 필드를 사용하여 명령에 대한 인수로 사용

재생 목록 파일의 필드를 사용하여 명령에 대한 인수로 사용

재생 목록 파일의 콘텐츠 예:

1. The fire is on - 03:50
2. Abc dge khji kkt mmy kdj - 09:20
3. Blowing in the winds  - 14:16
4. By the rivers of Babylon - 15:46
5. Waka waka it's time for africa - 20:30
6. DGF djf Kmf pffg jdkf dhf - 28:25
7. Fdsa djf | kf |- 34:25
8. Despacito despatico - 41:33
...
...
...

주문하다 -ffmpeg -i "a" -ss "b" -to "c" "output"

이제 목록에서 시작(즉, 시퀀스 번호)부터 텍스트 줄의 끝(파이프도 포함할 수 있음)까지가 명령의 마지막 매개변수("출력" 위치)여야 합니다. 끝의 타임스탬프는 -ss 매개변수여야 하며, 다음 줄의 타임스탬프는 매개변수의 매개변수여야 합니다.-to

이것은 이것과 매우 유사합니다.질문하지만 이 특별한 경우를 수용하기 위해 awk 명령을 수정하는 방법을 잘 모르겠습니다.

답변1

당신이하려는 일은 다음과 같습니다.

$ cat tst.awk
BEGIN {
    fmt = "ffmpeg -i \047a\047 -ss \047%s\047 -to \047%s\047 \047%s\047\n"
}
NR > 1 {
    printf fmt, beg, $NF, title
}
{
    beg = $NF
    title = $0
}
END {
    printf fmt, beg, "forever?", title
}

$ awk -f tst.awk file
ffmpeg -i 'a' -ss '03:50' -to '09:20' '1. The fire is on - 03:50'
ffmpeg -i 'a' -ss '09:20' -to '14:16' '2. Abc dge khji kkt mmy kdj - 09:20'
ffmpeg -i 'a' -ss '14:16' -to '15:46' '3. Blowing in the winds  - 14:16'
ffmpeg -i 'a' -ss '15:46' -to '20:30' '4. By the rivers of Babylon - 15:46'
ffmpeg -i 'a' -ss '20:30' -to '28:25' '5. Waka waka it's time for africa - 20:30'
ffmpeg -i 'a' -ss '28:25' -to '34:25' '6. DGF djf Kmf pffg jdkf dhf - 28:25'
ffmpeg -i 'a' -ss '34:25' -to '41:33' '7. Fdsa djf | kf |- 34:25'
ffmpeg -i 'a' -ss '41:33' -to 'forever?' '8. Despacito despatico - 41:33'

그러나 예상한 결과가 표시되지 않는다면 이는 단지 추측일 뿐입니다.

출력에 큰따옴표 대신 작은따옴표를 사용하지 마십시오. ffmpeg나중에 명령을 실행할 때 쉘이 따옴표 안의 텍스트를 먼저 해석하지 않도록 하기 위해 중요합니다. 바라보다https://mywiki.wooledge.org/Quotes.

답변2

스크립트는 awk다음에서 수정되었습니다.다른 문제:

awk -v input="a" -v to_last="55:55" '
  BEGIN {
    str="ffmpeg -i \"%s\" -ss \"%s\" -to \"%s\" \"%s\"\n"
  }
  NR>1 {
    printf str, input, ss, $NF, output
  }
  {
    ss=$NF                       # last field is the `ss` field
    $NF=""                       # clear last field
    output=$0                    # set the remaining line to output
    sub(/[-| \t]+$/, "", output) # remove blanks, `-` and `|` at the end of output
  }
  END{
    printf str, input, ss, to_last, output
  }
' playlist

...출력(재생 목록에서 행이 제거된 경우):

ffmpeg -i "a" -ss "03:50" -to "09:20" "1. The fire is on"
ffmpeg -i "a" -ss "09:20" -to "14:16" "2. Abc dge khji kkt mmy kdj"
ffmpeg -i "a" -ss "14:16" -to "15:46" "3. Blowing in the winds"
ffmpeg -i "a" -ss "15:46" -to "20:30" "4. By the rivers of Babylon"
ffmpeg -i "a" -ss "20:30" -to "28:25" "5. Waka waka it's time for africa"
ffmpeg -i "a" -ss "28:25" -to "34:25" "6. DGF djf Kmf pffg jdkf dhf"
ffmpeg -i "a" -ss "34:25" -to "41:33" "7. Fdsa djf | kf"
ffmpeg -i "a" -ss "41:33" -to "55:55" "8. Despacito despatico"

관련 정보