Categories
JavaScript

자바스크립트에서 배열 및 배열 요소 다루기

자바스크립트에서 배열을 다루는 방법을 알아보자.

1. 배열의 생성

배열은 2가지 방법으로 만들 수 있다. 하나는 배열 리터럴 (literal) 을 이용한 방법이고 다른 하나는 new 키워드를 이용한 방법이다.

배열 리터럴로 배열을 생성한다.

var numberArray = [10, 20, 30, 40, 50];

new 키워드로 배열을 생성한다.

var numberArray = new Array(10, 20, 30, 40, 50);

2. 배열 요소에 접근하는 방법

배열 요소를 지정할 때는 배열 인덱스를 사용한다. 배열 인덱스는 1이 아니라 0부터 시작한다.

document.write(numberArray[0]);    // 10 을 출력한다.
document.write(numberArray[2]);    // 30 을 출력한다.
document.write(numberArray[4]);    // 50 을 출력한다.

3. 배열의 길이 구하기

배열의 길이는 배열 요소의 개수를 의미한다.

length 프로퍼티로 배열의 길이를 구해 보자.

document.write(numberArray.length);    // 5를 출력한다.

4. 배열 요소 추가하기

배열 요소를 추가할 때는 push() 메소드를 쓴다.

var numberArray = [10, 20, 30];
numberArray.push(40, 50);    // 40 과 50 을 추가한다.
ducument.write(numberArray);    // 10,20,30,40,50 을 출력한다.

5. 배열 요소 삭제하기

배열 요소를 삭제할 때는 pop() 메소드를 쓴다.

var numberArray = [10, 20, 30, 40, 50];
var lastElement = numberArray.pop();    // 마지막 배열 요소를 배열에서 삭제하고 변수에 저장한다.
ducument.write(numberArray);    // 10,20,30,40 을 출력한다.
ducument.write(lastElement);    // 50 을 출력한다.

6. 배열 요소 검색하기

배열 요소를 검색하여 인덱스를 구할 때는 indexOf 메소드를 쓴다.

var numberArray = [10, 20, 30, 40, 50];
ducument.write(numberArray.indexOf(30));    // 2 를 출력한다.
ducument.write(numberArray.indexOf(10));    // 0 을 출력한다.
ducument.write(numberArray.indexOf(80));    // -1 을 출력한다.

indexOf() 메소드는 배열 요소의 검색에 실패할 때 -1 을 리턴한다.

Categories
JavaScript

자바스크립트 스케줄링: setTimeout() 함수와 setInterval() 함수

1. setTimeout() 함수

setTimeout() 함수는 일정한 시간이 경과한 후 함수나 코드를 실행한다. 시간은 밀리 초 단위이다.

테스트를 위한 함수를 작성한다.

function testFunc() {
  alert('testing...');
}

1초 후에 testFunc() 함수가 실행되도록 세팅한다.

setTimeout(testFunc, 1000);

함수에 매개변수가 있는 경우를 살펴 보자.

function add(a, b) {
  sum = a + b;
  alert(a + ' + ' + b + ' = ' + sum);
}

1초 후에 add() 함수가 실행되도록 세팅한다.

setTimeout(add, 1000, 99, 88);

setTimeout() 함수의 세번째 인자와 네번째 인자가 add() 함수에 전달된다.

함수 대신 코드가 실행되도록 해 보자.

setTimeout() 함수의 첫번째 인자로 실행할 코드를 지정한다. 코드의 자료형은 문자열이다.

setTimeout(“alert(‘testing…’)”, 1000);

2. setInterval() 함수

setInterval() 함수는 일정한 시간마다 주기적으로 함수나 코드를 실행한다. 시간은 밀리 초 단위이다.

testFunc() 함수가 3초에 한번씩 반복해서 실행되도록 해 보자.

setInterval(testFunc, 3000);

3. clearTimeout() 함수와 clearInterval() 함수

clearTimeout() 함수는 setTimeout() 함수의 작동을 중단시킨다.

clearInterval() 함수는 setInterval() 함수의 작동을 중단시킨다.

setInterval() 함수의 작동을 중단시켜 보자.

setInterval() 함수를 실행할 때 해당 함수의 ID 를 변수에 저장한다.

var intervalId = setInterval(testFunc, 3000);

30초 후에 setInterval() 함수가 중단되도록 세팅한다.

setTimeout(“clearInterval(intervalId)”, 30000);

clearInverval() 함수의 인자로 intervalId 변수가 사용되었다.

Categories
FFmpeg

FFmpeg으로 동영상의 일부를 추출하기

FFmpeg 으로 동영상의 일부를 추출하는 방법을 알아보자.

1. 추출 구간 지정 방법

아래 명령을 살펴 보자.

ffmpeg -ss 00:01:23 -i input.mp4 -t 30 part.mp4

-ss 옵션은 추출이 시작되는 지점을 지정한다. 1분 23초 지점에서 추출이 시작된다.

-t 옵션은 추출되는 동영상의 길이를 초 단위로 지정한다. 30을 지정했으므로 추출되는 동영상의 길이는 30초가 된다.

위 명령은 1분 23초 지점부터 30초 동안 지속되는 부분을 추출한다. 1분 23초 지점부터 1분 53초 지점까지 추출하는 셈이다.

-t 옵션 대신 -to 옵션을 써도 된다.

ffmpeg -ss 00:01:23 -to 00:01:53 -i input.mp4 part.mp4

-to 옵션은 추출이 종료되는 지점을 지정한다. 1분 53초 지점에서 추출이 종료된다.

2. 입력 탐색과 출력 탐색

-ss 옵션이 -i 옵션보다 먼저 나올 경우에는 입력 탐색이 수행된다.

ffmpeg -ss 00:01:23 -i input.mp4 -t 30 part.mp4

입력 탐색의 장점은 속도가 빠르다는 것이다. 대신 출력 품질이 떨어질 수 있다.

-ss 옵션이 -i 옵션보다 나중에 나올 경우에는 출력 탐색이 수행된다.

ffmpeg -i input.mp4 -ss 00:01:23 -t 30 part.mp4

출력 탐색의 단점은 속도가 느리다는 것이다. 대신 출력 품질이 우수하다는 장점이 있다.

Categories
FFmpeg

FFmpeg으로 동영상에서 이미지 추출하기

FFmpeg 으로 동영상에서 이미지를 추출하는 방법을 알아보자.

1. 1개의 이미지 추출

아래 명령은 지정된 위치에서 1개의 이미지를 추출한다.

ffmpeg -ss 01:23:45 -i input.mp4 -vframes 1 output.png

-ss 옵션은 시간을 지정한다. 1시간 23분 45초 지점을 지정했다.

-vframes 는 출력할 프레임의 수를 지정한다. 1을 지정했으므로 1개의 프레임이 출력된다.

출력 결과는 output.png 라는 이미지 파일로 저장된다.

2. 매초 1장씩 이미지 추출

이미지를 1초에 1장씩 추출하는 방법을 알아보자.

ffmpeg -i input.mp4 -vf fps=1 output_%d.png

fps 필터의 지정값이 1이므로 1초마다 1프레임 씩 출력된다.

결과는 여러 개의 이미지 파일에 저장된다. 파일 이름은 output_1.png, output_2.png, output_3.png 등과 같이 순차적으로 정해진다.

파일 이름에서 숫자 부분의 형식을 바꿔 보자.

ffmpeg -i input.mp4 -vf fps=1 output_%04d.png

숫자 부분의 자리수는 4개가 된다. 4자리가 안되는 숫자의 앞부분은 0으로 채워진다.

파일 이름은 output_0001.png, output_0002.png, output_0003.png 등과 같이 순차적으로 정해진다.

3. 임의의 주기에 따라 이미지 추출

임의의 시간을 주기로 하여 이미지를 추출해 보자.

아래 명령은 10초에 1장씩 이미지를 추출한다.

ffmpeg -i input.mp4 -vf fps=1/10 output_%d.png

아래 명령은 0.1초에 1장씩 이미지를 추출한다. 1초에 10장의 이미지를 추출하는 셈이다.

ffmpeg -i input.mp4 -vf fps=10 output_%d.png