gif 파일을 mp4로 변환 (ffmpeg 필요함)

게시판 보기 페이지에서
gif 파일을 mp4 파일로 변환하여 출력하는 코드입니다.
서버에 ffmpeg 가 설치되어 있어야 gif 파일을 mp4로 변환할수 있습니다. ( 웹호스팅 환경에서 사용불가 )
그누보드버전은 5.4.2.8 버전 이상에서만 이 코드가 동작합니다.
SIR 사이트에는 이 코드가 적용되어 있습니다.
사용방법은 파일을 그대로 덮어쓰기하면 됩니다.
------ 수정 히스토리 --------
2020년 12월 4일, 에디터로 쓴글 삭제시 mp4 파일이 삭제되는 않는 문제 수정
버전 정보
테스트한 버전
5.4.2.8
호환 가능 버전
5.4.2.8 버전 이상
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 26개
[code]
@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)));
[/code]
을
[code]
@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)));
[/code]
을 하면 될것 같습니다. ffmpeg 실행이 Docker안에서 바로 됩니다.
도커 이미지가 자동다운로드 안되면
docker pull jrottenberg/ffmpeg:4.3-centos 식으로 미리 다운로드 하시면 됩니다.
위의 것은 alpine리눅스이고 지금 예제는 centos입니다.
편하신 리눅스 패키지로 변경하시면 됩니다. 알파인 리눅스를 많이 사용하는 이유는 이미지 크기가 작다고 합니다.
그누보드 도커 잡을 때 꼭 넣어야겠네요.
1. 호스트에서 ffmpeg 패키지 설치 후 도커에 있는 그누보드에서 원본파일 그대로 실행했을 시
[code]
sh: ffmpeg: not found
[/code]
Nginx에서는 mp4 파일을 받아오려고 하지만, php에서는 명령어 실행이 안됨
2. 호스트의 ffmpeg 패키지 삭제 후 말씀하신대로 Docker 이미지 받아서 그대로 실행했을 때
[code]
sh: docker: not found
[/code]
마찬가지로 docker라는 명령어를 발견할 수 없다고 합니다.
3. docker-compose로 ffmpeg 이미지를 데몬으로 실행
그냥 실행되고 있으니
[code]
@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)));
[/code]
이렇게 했더니
[code]
sh: docker: not found
[/code]
마찬가지로 이렇게 나옵니다.
php-fpm:alpine 이미지 문제인지, 잘 모르겠네요.
정확한 path를 넣어 줘 보세요
docker 간에 서로를 찾아야 하는데... volume을 공유해도 안되고..
depend를 걸어도 안되고... 같은 네트워크에 있어도 안되고 어렵네요.
완전 혜자네요.
업데이트 하세요...
데이트 하는 마음이 생기실겁니다.
카페24는 된다고 하더라구요.
하지만... 웹호스팅 인생이라서...
수동으로 ffmpeg 명령어를 내리거나, 도커 이미지를 활용했을땐 잘 되거든요.
왜 안될까요?
그누보드 최신버전 순정 테마, 순정 게시판, 갤러리에 첨부파일과 스마트에디터를 통해서 업로드 모두 해보았습니다.
https://stackoverflow.com/questions/24999673/how-to-enable-shell-exec-and-exec-on-php
아마 php의 disable_functions에 exec가 들어가있는 것 같습니다.
순정에 적용해보니 문제점(?)이 2가지 있는데요.
1. 게시글 내에서는 MP4로 잘 재생이 됩니다.
그런데 썸네일에는 여전히 움짤gif가 표시되어 MP4로 출력하는 의미가 없는 것 같습니다.
gif 움짤이 업로드 되었을땐 썸네일이 mp4로 변환된 파일이 자동재생되면 좋을 것 같습니다.
현재 SIR 사진 게시판처럼 썸네일에도 mp4 재생되게 하는 방법이 있을까요?
thumbnail.lib.php를 만져보았지만 잘 안되되더라구요 ㅜ ㅜ
2. 첨부파일로 움짤gif를 넣으니 클릭이 가능해서 클릭하면 원본 gif가 나오더라구요. 클릭이 안되게하는 것이 좋을 것 같습니다.
에디터로 올리면 클릭이 안되고 첨부파일로 올리면 클릭이 되는데, 어떻게 작업하면 움짤을 첨부파일로 올렸을때 클릭이 안되게 할 수 있을까요?
아직 나리야 게시판 플러그인이 그누 최신버전 업데이트 이후 반영이 안되어서 기다리고 있어요.
그 문제를 수정해서 다시 올려놓았으니, 다시 받아서 수정해 주세요.
안녕하세요 ffmpeg 명령어 설치 했고 파일을 /extend 에 올려놓고선
gif 파일을 첨부 해보니깐 이미지 자체가 출력이 안되고
파일 다운로드로 나오는건 어떤문제 인가요? 제가 초보라 답답하네요
스킨은 처음 다운 받은 basic 이며 gnuboard5.5.8.3.3 버젼입니다