Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

기차사진첩

<curl> 숫자로 나열되어 있는 이전의 m3u8 segments 저장하기 본문

컴퓨터

<curl> 숫자로 나열되어 있는 이전의 m3u8 segments 저장하기

RailK 2023. 12. 31. 03:18

 curl 명령어는 'client url'의 약자로 Linux, Mac뿐만 아니라 Windows에서도 사용이 가능하다. 이 명령어를 활용하여 숫자로 나열되어 있는 이전의 m3u8 segments를 저장할 수 있다. 이를테면 어느 m3u8 stream의 한 segment 주소가 "https://example.com/media_904.ts" 등과 같이 시작 segment 번호부터 시작하여 오름차순으로 나열되는 형태일 때, m3u8 stream을 재생하기 전의 과거 segment도 공급자 서버에 남아있다면 주소의 숫자를 수정하여 재생할 수 있다.

 

 어느 m3u8 stream을 저장하려고 하는데, 이 stream의 시작 segment 번호는 1001, 종료 segment 번호는 3000이라고 가정해 보자. 그러나 사용자는 1001번 segment부터 저장하지 못하고 2001번 segment부터 재생 및 녹화가 가능한 상황이었다. 이 stream 전부를 저장하려면 1001번부터 2000번까지 1,000개의 segment들을 다운로드받은 후 2001번 segment부터 녹화된 파일과 더불어 ffmpeg를 통해 로드한 이후 병합하여야 하는 과정이 필요하다. 그러나 1,000개의 숫자를 일일이 바꿔줘 가며 이를 하나씩 다운로드받으며 저장하는 것은 대단히 번거롭고 성가신 과정이 될 것이다. 이럴 때에는 아래 명령어 딱 한 줄을 통해 1001번부터 2000번까지 segment 파일들의 저장이 가능하다. 필자는 먼저 저장될 segment들을 C:\Users\사용자 이름\Desktop\segments 라는 폴더 안에 넣어두도록 하였다.

for /L %i in (1001, 1, 2000) do (
    curl -o "C:\Users\사용자 이름\Desktop\segments\media_%i.ts" ^
    "https://example.com/media_%i.ts"
)

 

 여기서 '%i'는 segment 번호를 변수로 지정하는 것을, 괄호에는 시작 번호와 간격, 종료 번호를 의미한다. 이렇게 저장된 segment들은 <ffmpeg> m3u8 stream 저장하기 글의 '2. 이미 저장된 segment들을 로드 후 저장' 항목을 참조하면 쉽게 병합할 수 있다.

 

 필자는 위에서 설명한 모든 과정을 배치파일을 생성함으로써 필요할 때마다 배치파일 명령문을 수정한 후 더블 클릭 한 번으로 간소화시키려고 무척 노력하였으나, 배치파일의 실행이 계속해서 되지 않는 문제점에 직면하였다. 이러한 문제를 해결하기 위해서는 배치파일로 저장 시에 변수로 지정된 '%i'를 '%%i'로 변경하여야 한다는 것을 알 수 있었다. 이는 배치파일 내 'for' 루프의 내부 변수와 외부 변수를 명확히 구분하기 위해서라고 한다. 즉 '%%i'를 'for' 루프 내에서의 변수로, '%i'를 루프 외부에서 사용되는 변수로 간주된다고 한다.

 

 이 글은 'ChatGPT'의 도움 없이는 완성할 수 없었다. 필자가 요구하는 조건을 'ChatGPT'에 입력하면 단 몇 초만에 명령문을 읊어주었고 그 결과는 대단히 정확하였다. 심지어 어떤 현상이나 원리를 설명함에 있어서 초등학생 내지 전공자의 수준으로 각기 다양하게 설명이 가능했다는 점은 상당히 흥미로운 부분이다.