Categories
FFmpeg

FFmpeg으로 비디오 위에 비디오를 오버레이 (overlay) 하기

FFmpeg 으로 비디오 위에 다른 비디오를 오버레이 (overlay) 해 보자.

오버레이 효과를 위해서 overlay 필터를 사용한다.

1. 첫번째 예제

다음 명령을 살펴보자.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=0:y=0[v]” output.mp4

이 명령은 over.mp4 의 비디오 스트림을 main.mp4 의 비디오 스트림 위에 오버레이 한다.

overlay 필터의 x 옵션은 메인 (main) 비디오 안에서 오버레이 비디오의 가로 위치를 지정한다.

overlay 필터의 y 옵션은 메인 비디오 안에서 오버레이 비디오의 세로 위치를 지정한다.

over.mp4 비디오는 main.mp4 비디오의 (0, 0) 위치에 오버레이 된다.

오버레이 했을 때 위에 있는 비디오를 오버레이 비디오 라고 부르고 아래에 있는 비디오를 메인 비디오 라고 부른다.

오버레이 비디오의 위치가 (x, y) 라는 말은 오버레이 비디오의 좌측 상단 꼭지점이 메인 비디오의 (x, y) 위치에 놓인다는 것을 의미한다.

2. shortest 옵션

메인 비디오와 오버레이 비디오의 재생 시간이 다를 때 shortest 옵션을 사용한다.

shortest 옵션을 1 로 지정하면 재생 시간이 짧은 비디오가 끝날 때 오버레이 작업이 끝난다. 완성된 출력 스트림의 재생 시간은 짧은 비디오의 재생 시간과 같게 된다.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=0:y=0:shortest=1[v]” output.mp4

shortest 옵션의 기본값은 0 이다.

3. 임의의 위치에 오버레이하기

오버레이 비디오를 메인 비디오의 우측 상단에 오버레이 해보자.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=W-w:y=0[v]” output.mp4

x 옵션의 값을 W-w 로 지정했다. W 는 메인 비디오의 가로 크기이고 w 는 오버레이 비디오의 가로 크기이다.

메인 비디오의 가로 크기는 1920 픽셀이고 오버레이 비디오의 가로 크기는 400 픽셀이라고 가정해 보자. 이 경우에 오버레이 비디오의 가로 위치는 1520 (1920 – 400) 이 된다.

오버레이 비디오의 위치는 (1520, 0) 이 된다.

오버레이 비디오를 메인 비디오의 우측 하단에 오버레이 해보자.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=W-w:y=H-h[v]” output.mp4

y 옵션의 값을 H-h 로 지정했다. H 는 메인 비디오의 세로 크기이고 h 는 오버레이 비디오의 세로 크기이다.

메인 비디오의 세로 크기는 1080 픽셀이고 오버레이 비디오의 세로 크기는 300 픽셀이라고 가정해 보자. 이 경우에 오버레이 비디오의 세로 위치는 780 (1080 – 300) 이 된다.

오버레이 비디오의 위치는 (1520, 780) 이 된다.

Categories
PHP

PHP에서 HTML 폼을 다루는 방식: GET 메소드와 POST 메소드

폼 데이터를 처리하는 방식에는 GET 방식과 POST 방식이 있다. 2가지 방식이 PHP 에서 어떻게 구현되는지 알아보자.

1. GET 방식

GET 방식으로 동작하는 HTML 폼을 작성한다.

<form action=”echo.php” method=”GET”>

method 속성을 GET 으로 지정했다.

이름과 전화번호를 입력할 수 있는 <input> 태그를 추가한다.

이름: <input type=”text” name=”name”><br>

전화번호: <input type=”text” name=”phone”><br>

폼을 전송하는 버튼을 추가한다.

<input type=”submit”>

다음은 완성된 HTML 파일의 전체 내용이다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GET 방식</title>
</head>
<body>
  <form action="echo.php" method="GET">
    이름: <input type="text" name="name"><br>
    전화번호: <input type="text" name="phone"><br>
    <input type="submit">
  </form>
</body>
</html>

HTML 폼으로부터 데이터를 받아 처리하는 echo.php 파일을 작성한다.

GET 방식의 폼 데이터는 전역 변수 $_GET 에 저장되어 있다.

이름을 $name 변수에 저장한다.

$name = $_GET[“name”];

대괄호 안에 있는 “name” 은 <input> 태그에 있는 name 속성의 값이다.

전화번호를 $phone 변수에 저장한다.

$phone = $_GET[“phone”];

이름과 전화번호를 출력한다.

echo “이름: ” . $name . “<br>” . “전화번호: ” . $phone . “<br>”;

다음은 완성된 echo.php 파일의 전체 내용이다.

<?php
$name = $_GET["name"];
$phone = $_GET["phone"];

echo "이름: " . $name . "<br>" . "전화번호: " . $phone . "<br>";
?>

2. POST 방식

POST 방식으로 동작하는 HTML 폼을 작성한다.

<form action=”echo.php” method=”POST”>

method 속성을 POST 로 지정했다.

나머지 내용은 GET 방식의 HTML 폼과 같다.

다음은 완성된 HTML 파일의 전체 내용이다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>POST 방식</title>
</head>
<body>
  <form action="echo.php" method="POST">
    이름: <input type="text" name="name"><br>
    전화번호: <input type="text" name="phone"><br>
    <input type="submit">
  </form>
</body>
</html>

HTML 폼으로부터 데이터를 받아 처리하는 echo.php 파일을 작성한다.

POST 방식의 폼 데이터는 전역 변수 $_POST 에 저장되어 있다.

이름을 $name 변수에 저장한다.

$name = $_POST[“name”];

전화번호를 $phone 변수에 저장한다.

$phone = $_POST[“phone”];

다음은 완성된 echo.php 파일의 전체 내용이다.

<?php
$name = $_POST["name"];
$phone = $_POST["phone"];

echo "이름: " . $name . "<br>" . "전화번호: " . $phone . "<br>";
?>

Categories
Linux

배쉬 (bash) 쉘의 변수 확장 (parameter expansion) 사용법

배쉬 (bash) 의 변수 확장 (parameter expansion) 에 대해 알아보자.

1. 치환 확장

변수에 저장된 값을 치환하여 출력해 보자.

example="www.google.google.com"

echo ${example/google/xtmci}    # www.xtmci.google.com 을 출력.

echo ${example//google/xtmci}    # www.xtmci.xtmci.com 을 출력.

# 새로운 값을 지정하지 않으면 기존의 값이 삭제된다.

echo ${example/google/}    # www..google.com 을 출력.

echo ${example//google/}    # www...com 을 출력.

2. 부문자열 (substring) 추출

변수에서 문자열의 일부를 추출하여 출력해 보자.

example="www.xtmci.com"

echo ${example:4:5}    # xtmci 를 출력.

echo ${example:4}    # xtmci.com 을 출력.

# 문자 위치가 음수일 때는 마이너스 기호 앞에 공백이 필요하다.

echo ${example: -7:3}    # mci 를 출력.

echo ${example: -7}    # mci.com 을 출력.

echo ${example:4:-6}    # xtm 을 출력.

3. 부문자열 (substring) 삭제

변수에서 문자열의 일부를 삭제하여 출력해 보자.

문자열의 앞부분에서 지정한 패턴을 삭제한다.

example="www.xtmci.xtmci.com"

echo ${example#www}    # .xtmci.xtmci.com 을 출력.

echo ${example#*xtmci}    # .xtmci.com 을 출력.

echo ${example##*xtmci}    # .com 을 출력.

문자열의 뒷부분에서 지정한 패턴을 삭제한다.

example="www.xtmci.xtmci.com"

echo ${example%com}    # www.xtmci.xtmci. 을 출력.

echo ${example%xtmci*}    # www.xtmci. 을 출력.

echo ${example%%xtmci*}    # www. 을 출력.

4. 문자열의 길이 출력

변수에 저장된 문자열의 길이를 출력해 보자.

example="www.xtmci.com"

echo ${#example}    # 13 을 출력.

변수가 배열인 경우에는 배열 요소의 개수가 출력된다.

example=(xtmci google www com)

echo ${#example[@]}    # 4 를 출력. 배열 요소의 개수이다.

echo ${#example[0]}    # 5 를 출력. 문자열 xtmci 의 길이이다.

echo ${#example[3]}    # 3 을 출력. 문자열 com 의 길이이다.

Categories
Vim

우분투 20.04에서 vim 텍스트 에디터 설치하기

우분투에 vim 텍스트 에디터를 설치하는 방법을 알아보자.

우분투를 설치할 때 자동으로 설치되는 vim 은 미니멀 (minimal) 버전이다. 풀 (full) 버전을 사용하려면 별도의 설치 과정을 거쳐야 한다.

우분투의 패키지 데이터베이스를 업데이트한다.

sudo apt update

vim 패키지를 설치한다.

sudo apt install vim

설치가 끝난 후에 vim 의 버전을 확인해 본다.

vim –version

vim 은 “vi improved” 를 의미한다. 유닉스의 vi 를 개선해서 만들었기 때문에 이런 이름이 붙었다.