gif to mp4 두번째 이야기 > 자유게시판

자유게시판

gif to mp4 두번째 이야기 정보

gif to mp4 두번째 이야기

본문

docker를 하실수 있는분은 테스트해 보실수 있고

 

nodejs에서 코딩 하실 수 있는 분은 수정을 부탁드립니다.

 

https://github.com/sgbj/versed  에 있는 것을 사용해서 gif 를 mp4로 변경하는 것에 도전해 보고 있습니다.

 


git clone https://github.com/sgbj/versed
cd versed
code .  <=== visual studio code
docker build -t versed .
docker run -d -p 3000:3000 versed
 

 

브라우저로 localhost:3000에 접속하면 다음과 같이 화면이 나옵니다.

 

800588803_1596752589.6674.png

 

원하는 이미지 파일(test.jpg)을 넣고, 변경을 원하는 타입(png)를 넣고, convert를 누르면 됩니다. 

 

동작 설명

 

Docker에  libreoffice 와 fffmpeg(버전은 3.2)이 설치 됩니다.

 

ffmpeg에서 mimetype이 audio와 video가 아니면 모두 libreoffice로 넘어 가는 것 같습니다.

(pdf로 변경도 가능한 것 같네요..)

 

즉 소스가 audio/video만 변경이 되는 것을 ffmpeg에서는 gif to mp4로 변경만 하면 될 것 같습니다.

 


// if (context.input.type != 'audio' && context.input.type != 'video') {
    // return next();
// }
if (context.input.format != 'mp4') {
    return next();
}
 
const source = tmp.tmpNameSync({ postfix: path.extname(context.input.filename) });
const destination = tmp.tmpNameSync({ postfix: '.' + context.input.format });
fs.writeFileSync(source, context.input.buffer);
 
var process = childProcess.exec("ffmpeg -i "+source+" -movflags faststart -pix_fmt yuv420p -vf \"scale=trunc(iw/2)*2:trunc(ih/2)*2\" -r 12 " + destination,function (err,stdout,stderr) {
    // Handle result
});
 
// const process = childProcess.spawn('ffmpeg', [
    // '-f',
    // context.type,
    // '-i',
    // source,
    // '-strict',
    // '-2',
    // destination,
    // '-y'
// ]);

 

와 같이 변경한 후에.

 


docker ps
docker stop [CONTAINER ID]  <==== 앞의 6자리정도만
docker build -t versed .
docker run -d -p 3000:3000 versed

 

을 다시 실행 시킵니다.  그러면 gif 파일을 넣고 타입을 mp4로 하면 변경된 파일이 나올 겁니다.

 

동작은 되는데 아래와 같은 에러가 납니다.

 

800588803_1596753352.326.png

 

node module "fs.unlinkSync" 쪽 에러인 것 같습니다.

 

childProcess.spawn에서는 특수문자 옵션이 안되서 childProcess.exec로 변경했습니다.  여기도 function안에 코드를 집어넣어야 되고..

 

nodejs 고수분들의  나눔이 필요한 시기입니다.

 

입력되는 파일 타입에 따라

 

libreoffice, ffmpeg, webp까지 변경되게 만들었으면 합니다.

(입력이 gif파일이고 타입이 mp4면 ffmpeg으로 webp면 webp-converter가 동작하는 식으로..)

 

그리고 이 이미지가 API방식입니다.  아래와 같이 사용이 가능하다고 합니다.

 



const fs = require('fs');
const request = require('request');

let req = request.post('http://localhost:3000/convert');
let form = req.form();
form.append('file', fs.createReadStream('test.gif'));
form.append('format', 'mp4');
req.pipe(fs.createWriteStream('test.mp4'));

 

 

추천
3

댓글 9개

2017년에 나와서 지금 하기엔 에러가 있나봐요..

잘되면 자체 API 서버로 운영할 수 있겠습니다.
코드를 아시는 분 있다면 에러를 잡을 수 있는 것입니다.  원래는 에러가 안나는데, 짜집기를 하다 보니, 에러가 난것이죠.  ㅠㅠ,  코드는 몇줄 안되는데,  새로운 코드를 보면 헤매게 되네요
최종목적지가 그누보드에 적용가능한거겠죠?
에디터에서 Gif파일을 바로 MP4로 변환해서 업로드까지...
생각만 해도 가슴이 떨립니다.^^
에디터에서 할일이 아니라 그누보드에서 할일입니다.
이번 버전은 VPS에서 돌리든지, 아니면 여러개의 웹 호스팅을 하시는 분은 vps한개에 api 서버로 돌릴수 있는 형태입니다.
전체 1,811 |RSS
자유게시판 내용 검색

회원로그인

진행중 포인트경매

  1. 참여1 회 시작24.03.28 11:15 종료24.04.04 11:15
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT