gif 파일을 mp4로 변환 (ffmpeg 필요함) 정보
gif 파일을 mp4로 변환 (ffmpeg 필요함)첨부파일
테스트한 버전5.4.2.8
호환 가능 버전5.4.2.8 버전 이상
본문
게시판 보기 페이지에서
gif 파일을 mp4 파일로 변환하여 출력하는 코드입니다.
서버에 ffmpeg 가 설치되어 있어야 gif 파일을 mp4로 변환할수 있습니다. ( 웹호스팅 환경에서 사용불가 )
그누보드버전은 5.4.2.8 버전 이상에서만 이 코드가 동작합니다.
SIR 사이트에는 이 코드가 적용되어 있습니다.
사용방법은 파일을 그대로 덮어쓰기하면 됩니다.
------ 수정 히스토리 --------
2020년 12월 4일, 에디터로 쓴글 삭제시 mp4 파일이 삭제되는 않는 문제 수정
추천
11
11
댓글 전체
대박!! 공식 플러그인이 나왔군요!!!
역시 @thisgun 님입니다. 맛있는 커피라도 사드리고 싶네요
도커를 사용하시는 분은 ffmpeg설치보다는 https://hub.docker.com/r/jrottenberg/ffmpeg/ 이것을 사용하세요.
을
을 하면 될것 같습니다. ffmpeg 실행이 Docker안에서 바로 됩니다.
도커 이미지가 자동다운로드 안되면
docker pull jrottenberg/ffmpeg:4.3-centos 식으로 미리 다운로드 하시면 됩니다.
위의 것은 alpine리눅스이고 지금 예제는 centos입니다.
편하신 리눅스 패키지로 변경하시면 됩니다. 알파인 리눅스를 많이 사용하는 이유는 이미지 크기가 작다고 합니다.
@exec('ffmpeg -i '.escapeshellcmd(preg_replace('/[^0-9A-Za-z_\-\.\\\\\/]/i', '', $filename)).' -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -pix_fmt yuv420p -movflags +faststart '.escapeshellcmd(preg_replace('/[^0-9A-Za-z_\-\.\\\\\/]/i', '', $mp4_file)));
을
@exec('docker run -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg:4.3-alpine -i '.escapeshellcmd(preg_replace('/[^0-9A-Za-z_\-\.\\\\\/]/i', '', $filename)).' -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -pix_fmt yuv420p -movflags +faststart '.escapeshellcmd(preg_replace('/[^0-9A-Za-z_\-\.\\\\\/]/i', '', $mp4_file)));
을 하면 될것 같습니다. ffmpeg 실행이 Docker안에서 바로 됩니다.
도커 이미지가 자동다운로드 안되면
docker pull jrottenberg/ffmpeg:4.3-centos 식으로 미리 다운로드 하시면 됩니다.
위의 것은 alpine리눅스이고 지금 예제는 centos입니다.
편하신 리눅스 패키지로 변경하시면 됩니다. 알파인 리눅스를 많이 사용하는 이유는 이미지 크기가 작다고 합니다.
최고네요!!!
그누보드 도커 잡을 때 꼭 넣어야겠네요.
그누보드 도커 잡을 때 꼭 넣어야겠네요.
도커에서 해보려고 했는데...
1. 호스트에서 ffmpeg 패키지 설치 후 도커에 있는 그누보드에서 원본파일 그대로 실행했을 시
Nginx에서는 mp4 파일을 받아오려고 하지만, php에서는 명령어 실행이 안됨
2. 호스트의 ffmpeg 패키지 삭제 후 말씀하신대로 Docker 이미지 받아서 그대로 실행했을 때
마찬가지로 docker라는 명령어를 발견할 수 없다고 합니다.
3. docker-compose로 ffmpeg 이미지를 데몬으로 실행
그냥 실행되고 있으니
이렇게 했더니
마찬가지로 이렇게 나옵니다.
php-fpm:alpine 이미지 문제인지, 잘 모르겠네요.
1. 호스트에서 ffmpeg 패키지 설치 후 도커에 있는 그누보드에서 원본파일 그대로 실행했을 시
sh: ffmpeg: not found
Nginx에서는 mp4 파일을 받아오려고 하지만, php에서는 명령어 실행이 안됨
2. 호스트의 ffmpeg 패키지 삭제 후 말씀하신대로 Docker 이미지 받아서 그대로 실행했을 때
sh: docker: not found
마찬가지로 docker라는 명령어를 발견할 수 없다고 합니다.
3. docker-compose로 ffmpeg 이미지를 데몬으로 실행
그냥 실행되고 있으니
@exec('docker exec ffmpeg -i '.escapeshellcmd(preg_replace('/[^0-9A-Za-z_\-\.\\\\\/]/i', '', $filename)).' -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -pix_fmt yuv420p -movflags +faststart '.escapeshellcmd(preg_replace('/[^0-9A-Za-z_\-\.\\\\\/]/i', '', $mp4_file)));
이렇게 했더니
sh: docker: not found
마찬가지로 이렇게 나옵니다.
php-fpm:alpine 이미지 문제인지, 잘 모르겠네요.
@exec에서 docker, ffmpeg이 실행이 안된다고 하면 당연히 path에서 못불러 오겠죠.
정확한 path를 넣어 줘 보세요
정확한 path를 넣어 줘 보세요
정확한 path를 어떻게 찾아야할까요?
docker 간에 서로를 찾아야 하는데... volume을 공유해도 안되고..
depend를 걸어도 안되고... 같은 네트워크에 있어도 안되고 어렵네요.
docker 간에 서로를 찾아야 하는데... volume을 공유해도 안되고..
depend를 걸어도 안되고... 같은 네트워크에 있어도 안되고 어렵네요.
ffmpeg 는 cafe24의 경우 설치 요청을 하면 사용자 홈디렉토리에 설치해 줍니다.
웹호스팅도 설치 가능한가요?
완전 혜자네요.
완전 혜자네요.
이걸 5.3.3.3 버전에서 사용할 방법은 없을까요?
업데이트 하세요...
데이트 하는 마음이 생기실겁니다.
와 너무 좋아요~
감사합니다 호스팅환경이라 적용은 불가능하네요 ㅠㅠ 나중에 적용 시도 해봐야겠습니다
호스팅에 ffmpeg 설치해달라고 요청하면 되지 않을까요?
카페24는 된다고 하더라구요.
카페24는 된다고 하더라구요.
서버호스팅일경우 가능합니다 제 경우는 그냥 일반 웹호스팅이라.. 안돼요 ㅠㅠㅎㅎ
그렇군요 ㅠㅠ
와... 정말 멋진 플러그인이네요.
하지만... 웹호스팅 인생이라서...
하지만... 웹호스팅 인생이라서...
음.. 포스터 gif 파일은 생성되는데 mp4 파일이 생성이 안되네요.
수동으로 ffmpeg 명령어를 내리거나, 도커 이미지를 활용했을땐 잘 되거든요.
왜 안될까요?
그누보드 최신버전 순정 테마, 순정 게시판, 갤러리에 첨부파일과 스마트에디터를 통해서 업로드 모두 해보았습니다.
수동으로 ffmpeg 명령어를 내리거나, 도커 이미지를 활용했을땐 잘 되거든요.
왜 안될까요?
그누보드 최신버전 순정 테마, 순정 게시판, 갤러리에 첨부파일과 스마트에디터를 통해서 업로드 모두 해보았습니다.
php exec 명령어가 실행할수 있는 환경이어야 합니다.
https://stackoverflow.com/questions/24999673/how-to-enable-shell-exec-and-exec-on-php
https://stackoverflow.com/questions/24999673/how-to-enable-shell-exec-and-exec-on-php
도커의 php 환경이 문제였나봅니다. 실제서버에 돌려보니 잘 돌아갑니다.
아마 php의 disable_functions에 exec가 들어가있는 것 같습니다.
순정에 적용해보니 문제점(?)이 2가지 있는데요.
1. 게시글 내에서는 MP4로 잘 재생이 됩니다.
그런데 썸네일에는 여전히 움짤gif가 표시되어 MP4로 출력하는 의미가 없는 것 같습니다.
gif 움짤이 업로드 되었을땐 썸네일이 mp4로 변환된 파일이 자동재생되면 좋을 것 같습니다.
현재 SIR 사진 게시판처럼 썸네일에도 mp4 재생되게 하는 방법이 있을까요?
thumbnail.lib.php를 만져보았지만 잘 안되되더라구요 ㅜ ㅜ
2. 첨부파일로 움짤gif를 넣으니 클릭이 가능해서 클릭하면 원본 gif가 나오더라구요. 클릭이 안되게하는 것이 좋을 것 같습니다.
에디터로 올리면 클릭이 안되고 첨부파일로 올리면 클릭이 되는데, 어떻게 작업하면 움짤을 첨부파일로 올렸을때 클릭이 안되게 할 수 있을까요?
아마 php의 disable_functions에 exec가 들어가있는 것 같습니다.
순정에 적용해보니 문제점(?)이 2가지 있는데요.
1. 게시글 내에서는 MP4로 잘 재생이 됩니다.
그런데 썸네일에는 여전히 움짤gif가 표시되어 MP4로 출력하는 의미가 없는 것 같습니다.
gif 움짤이 업로드 되었을땐 썸네일이 mp4로 변환된 파일이 자동재생되면 좋을 것 같습니다.
현재 SIR 사진 게시판처럼 썸네일에도 mp4 재생되게 하는 방법이 있을까요?
thumbnail.lib.php를 만져보았지만 잘 안되되더라구요 ㅜ ㅜ
2. 첨부파일로 움짤gif를 넣으니 클릭이 가능해서 클릭하면 원본 gif가 나오더라구요. 클릭이 안되게하는 것이 좋을 것 같습니다.
에디터로 올리면 클릭이 안되고 첨부파일로 올리면 클릭이 되는데, 어떻게 작업하면 움짤을 첨부파일로 올렸을때 클릭이 안되게 할 수 있을까요?
나리야에서 사용 가능한지 궁금합니다.~!~~~
나리야에서도 가능할 것 같은데요.
아직 나리야 게시판 플러그인이 그누 최신버전 업데이트 이후 반영이 안되어서 기다리고 있어요.
아직 나리야 게시판 플러그인이 그누 최신버전 업데이트 이후 반영이 안되어서 기다리고 있어요.
플러그인 적용했는데 에디터로 올린경우 글 삭제시 원본 gif만 삭제되고 변환된 mp4 는 그대로 남아있네요. 이것도 같이 삭제할수 없나요?
네 알려 주셔서 감사합니다.
그 문제를 수정해서 다시 올려놓았으니, 다시 받아서 수정해 주세요.
그 문제를 수정해서 다시 올려놓았으니, 다시 받아서 수정해 주세요.
?