첫째나 둘째가 유치원 혹은 어린이집에서 수업을 듣고 사용한 DVD를 가져오는데,

집에 DVD 플레이어가 없어, 보여주기 난감할때가 있습니다.

 

집에서는 영상을 주로 스마트 TV나, 셋탑박스 NAS등을 이용해서 파일로 재생하기 때문인데요.

이럴때 PC에 DVD내용을 MP4로 옮겨서 usb에 등에 편하게 옮기는 방법입니다.

 

바로 handbrake 라는 툴을 이용하면 간단하게 사용이 가능합니다.

handbrake는 영상 변환 툴로써 파일 변환이 기본 목적이지만 DVD를 옮길때도 유용합니다.

 

 

준비물 : DVD드라이브가 있는 PC나 맥, 복사할 DVD

 

아래 사이트에 접속하면, 다음과 같은 화면이 나타납니다.

https://handbrake.fr/news.php

 

 

https://handbrake.fr/downloads.php

에 접속하시면 gui 버전을 받을 수 있습니다. macOS, Windows, Linux 모두 받을 수 있습니다.

 

https://handbrake.fr/downloads2.php

에 접속하시면 cli 커맨드 라인으로 입력할 수 있는 버전도 받을 수 있습니다. 커맨드 라인으로

대량 배치처리할때 편합니다.

 

gui 버전 기준으로 설명합니다.

 

1.다운로드 페이지에서 윈도우용을 설치합니다. (설치과정은 생략합니다.)

 

 

 

2. 먼저, DVD를 PC DVD 드라이브에 넣습니다.

 

3. handbrake 프로그램을 실행하면 소스 선택 화면이 나타납니다.

E:를 선택합니다.

 

4. 스캔화면이 나타납니다.

5. HandBrake 프로그램을 켠 후 다른 DVD를 가져올때도 좌측 상단에 OpenSouce메뉴를 통해서 설정이 가능합니다.

 

 

6. 트랙을 복사하기 전에 먼저 해둘 일이 있습니다. 바로 출력 설정인데요. Tools > Preferences 메뉴로 들어갑니다.

7. 왼쪽 탭에서 Output Files 탭을 선택하고, Default Path에 저장될 디렉토리를 지정해줍니다.

그리고 MP4 File Extension에서는 Always use MP4를 선택했습니다.(이건 옵션입니다.)

 

8. 의도인지 모르겠지만, 하단에 Save As에 첫번째 저장될 트랙의 이름도 지정하도록 하고 되어있습니다.

아래와 같이 저장될 이름을 기입합니다.

Summary  탭에서 MP4나 MKV로 선택할 수 있습니다.

 

9. 이제 복사할 트랙들을은 작업목록에 올려야합니다. Add to Queue메뉴에서 Add All을 선택합니다.

모든 트랙을 복사할 예정입니다.

 

혹시 6, 7번에서 저장될 디렉토리를 설정하지 않았다면 아래와 같은 경고 메시지가 나타납니다.

 

10. 상단에 queue에 변환할 목록들이 추가된 것을 확인할 수 있습니다.

 

11. 작업 목록 화면에서 Start Queue를 클릭하면 mp4로 변환이 됩니다.



HTML5에서 로컬 DB로 사용가능하며,(웹브라우저일 경우 제약이 각각 있습니다... ) 

CouchDB와 편리하게 서버동기화가 가능하도록 마련되어있습니다...


웹이라는 제약은 물론 있지만, cordova를 통해 앱으로 만들 경우 Plugin으로 그 제약을 풀 수 있다는 장점이 있죠...

(인터페이스는 동일)



기존 HTML5의 로컬DB스펙인 WEBSQL은 예전에 SQLITE기반이었던거 같은데... 

아마도 특정 벤더에 종속되는 것을 막기 위해서 그런지.... 

표준화되면서 폐기되버렸네요... ㅡㅡ;

대신 키/밸류 기반의 IndexedDB라는걸 각 브라우저 벤더사에서 각각 제공해주는 듯합니다.


PouchDB는 이러한 춘추전국시대 같은 다양한 환경에서 최적에 상황에 맞도록 셋팅가능하게 합니다.. 아래링크 참조합니다.

https://pouchdb.com/adapters.html



PouchDB를 위한 12가지 프로팁 (읽어볼만하며, PouchDB의 특징도 알 수 있습니다.)

https://pouchdb.com/2014/06/17/12-pro-tips-for-better-code-with-pouchdb.html



- API 레퍼런스는 여기서 확인이 가능합니다.

https://pouchdb.com/api.html


- ES7일 경우 async , await가 사용가능하나,, ES5는 Promise패턴을 이용해야합니다.


-  Mango Query(cf.Mongo DB) 가 가능한 헬퍼 패키지가 있어 사용할 수 있습니다. 

Vue 인스턴스 생성시 최초에, 객체를 주입하고, 이후 각 콤포넌트에서 this.$bucket 으로 접근하는 방식..

https://www.npmjs.com/package/vue-pouch-db


- ibm watson 데이터랩에서 제공하는 Vuejs / PouchDB 튜터리얼 문서입니다.

https://github.com/ibm-watson-data-lab/shopping-list-vuejs-pouchdb/blob/master/tutorial.md


- MongoDB같은 json 문서 DB입니다.. RDB랑 같이 생각해선 곤란....하구요. MongoDB같은 접근법이 필요합니다.


- 테이블 개념이 없네요.. 이것 때문에 좀 헷갈렸는데. DB가 여러개. 문서속에 하위노드나, attach, 연결정보를 추가하도록 합니다.



Vuejs에서 사용시 아래와 같이 사용했습니다.


- 초기 접근

노드 입력시 guid가 필요해서 vuex에  공용 guid생성 함수를 만들어서 사용했습니다.


최초, 로딩되도록 아래 같이 호출합니다.

created () {
this.load()
},


로드 메소드는 아래와 같이 구성했고..

methods: {
load () {

var vm = this;
this.$bucket.db('vmbook').allDocs({include_docs: true})
.then(function (res) {
vm.groups = res.rows
}).catch(function (err) {
alert(err);
});
},


저장 버튼 눌렀을때 메소드 구현은 아래와 같이 했습니다.

save () {
var vm = this;
this.$bucket.db('vmbook').put({
_id: this.$store.state.global.uuid(),
title: this.regform.group_name, items: []})
.then(function(res) {
vm.load()
vm.show = false
}) .catch(function(err) {
alert(err)
//vm.show = false
})
}
},


삽질이 있었지만.. 잘됩니다.



웹쪽 기술동향을 알 수 있다는 점에서는 흥미롭네요.

    private Bitmap RotateBitmap(Bitmap bitmap, float angle)
    {
        int w, h, x, y;
        var dW = (double)bitmap.Width;
        var dH = (double)bitmap.Height;

        double degrees = Math.Abs(angle);
        if (degrees <= 90)
        {
            double radians = 0.0174532925 * degrees;
            double dSin = Math.Sin(radians);
            double dCos = Math.Cos(radians);
            w = (int)(dH * dSin + dW * dCos);
            h = (int)(dW * dSin + dH * dCos);
            x = (w - bitmap.Width) / 2;
            y = (h - bitmap.Height) / 2;
        }
        else
        {
            degrees -= 90;
            double radians = 0.0174532925 * degrees;
            double dSin = Math.Sin(radians);
            double dCos = Math.Cos(radians);
            w = (int)(dW * dSin + dH * dCos);
            h = (int)(dH * dSin + dW * dCos);
            x = (w - bitmap.Width) / 2;
            y = (h - bitmap.Height) / 2;
        }

        var rotateAtX = bitmap.Width / 2f;
        var rotateAtY = bitmap.Height / 2f;

        var bmpRet = new Bitmap(w, h);
        bmpRet.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution);
        using (var graphics = Graphics.FromImage(bmpRet))
        {
            graphics.Clear(Color.White);
            graphics.TranslateTransform(rotateAtX + x, rotateAtY + y);
            graphics.RotateTransform(angle);
            graphics.TranslateTransform(-rotateAtX - x, -rotateAtY - y);
            graphics.DrawImage(bitmap, new PointF(0 + x, 0 + y));
        }
        return bmpRet;
    }

https://stackoverflow.com/questions/5172906/rotating-graphics


'C#' 카테고리의 다른 글

log4net.config 예제  (0) 2019.08.03
GDI+ Bitmap Rotaion  (0) 2019.02.19
WPF RichText에서 HTML 표시하기  (0) 2019.02.09
Visual Studio Debug.WriteLine 표시가 안될때 대처 방안  (0) 2018.11.15
WPF, Template Select 하기  (0) 2018.05.29
WPF MVVM 샘플코드  (0) 2018.05.28

+ Recent posts