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에 접속하면 다음과 같이 화면이 나옵니다.
원하는 이미지 파일(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로 하면 변경된 파일이 나올 겁니다.
동작은 되는데 아래와 같은 에러가 납니다.
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개
잘되면 자체 API 서버로 운영할 수 있겠습니다.
에디터에서 Gif파일을 바로 MP4로 변환해서 업로드까지...
생각만 해도 가슴이 떨립니다.^^
이번 버전은 VPS에서 돌리든지, 아니면 여러개의 웹 호스팅을 하시는 분은 vps한개에 api 서버로 돌릴수 있는 형태입니다.
마젠토님, 우성짱님
열정에 경의를 드립니다~
^^
저도 본받고 시퍼요