openwrt에서 웹캠으로 ffmpeg로 동영상 저장을 시도하려는 데 에러가 발생합니다.
현재 모르는 것이 많아서
너무나 초보적인 문제를 올리게 되네요......
웹캠에서 ffmpeg로 동영상 켭쳐를 하려는 데 에러가 나옵니다.
root@OpenWrt:/# ffmpeg -an -f video4linux -s 640x480 -b 800k -r 15 -i /dev/video0 -vcodec mpeg4 -f mpegvideo myvideo.avi
FFmpeg version SVN-r12898, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --enable-cross-compile --cross-prefix=mipsel-openwrt-linux-uclibc- --arch=mipsel --prefix=/usr --enable-shared --enable-static --disable-debug --enable-ffmpeg --enable-ffserver --enable-gpl --enable-libfaad --disable-mmx --disable-mmx2 --enable-pthreads --disable-optimizations --enable-small --disable-stripping --disable-vhook --enable-zlib --enable-postproc --disable-encoders --disable-decoders --enable-decoder=ac3 --enable-decoder=atrac3 --enable-decoder=h264 --enable-decoder=jpegls --enable-decoder=mp3 --enable-decoder=mpeg1video --enable-decoder=mpeg2video --enable-decoder=mpeg4 --enable-decoder=mpeg4aac --enable-decoder=mpegvideo --enable-decoder=png --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=zlib --disable-muxers --enable-muxer=ffm --disable-demuxers --enable-demuxer=ac3 --enable-demuxer=h264 --enable-demuxer=mp3 --enable-demuxer=mpegts --enable-demuxer=mpegvideo --enable-demuxer=rtsp --enable-demuxer=sdp --disable-parsers --enable-parser=ac3 --enable-parser=h264 --enable-parser=mpegaudio --enable-parser=mpegvideo --disable-bsfs --disable-protocols --enable-protocol=rtp --enable-protocol=udp
libavutil version: 49.6.0
libavcodec version: 51.55.0
libavformat version: 52.13.0
libavdevice version: 52.0.0
built on Mar 20 2010 06:59:40, gcc: 4.3.3
Input #0, video4linux, from '/dev/video0':
Duration: N/A, bitrate: 73728 kb/s
Stream #0.0: Video: YUY2 / 0x32595559, yuyv422, 640x480, 73728 kb/s, 15.00 tb(r)
Unable to find a suitable output format for 'myvideo.avi'
에러상으로는 output 포멧을 못 찾아서 발생하는 에러같은 데
무엇이 잘 못되었나요?
파일명을
파일명을 myvideo.mp4나
myvideo.mpeg4로 해보세요
다른 문제인가 봐요.
파일명를 바꾸어도 변함이 없고
output에 -vcodec을 libx264나 다른 코덱으로 바꾸어도 안되고 -f로 format 지정해도 안되네요
리눅스상에서 동작되는 인터넷상의 예제를 그대로 해도 안되는 것을 보니
뭔가 잘못하고 있는것이 있나봐요
x264는 라이브러리가 설치가 안된거 같아요 x264
x264는 라이브러리가 설치가 안된거 같아요 x264 라이브러리 설치하고 해보세요
'-f mpegvideo' 옵션이 문제를 일으키는 것
'-f mpegvideo' 옵션이 문제를 일으키는 것 같습니다.
ffmpeg -formats 명령으로 사용중인 ffmpeg 빌드의 지원포맷을 볼 수 있는데,
아래의 예를 보시면 mpegvideo 포맷은 디먹스만 지원하고 먹스는 지원하지 않는 것으로 나오죠.
출력에 사용할 먹스포맷은 굳이 지정하지 않아도 ffmpeg이 출력파일명을 보고 알아서 유추해냅니다.
myvideo.avi라고 하면 avi 먹스를 해 주고, myvideo.mp4라고 하면 mp4 포맷으로 먹스해줍니다.
요컨데, 사용하신 명령에서 -f mpegvideo 옵션을 빼고 시도해 보세요.
그런데, OpenWRT 실행하시는 환경의 MIPS CPU 성능이 PC처럼 높지는 않을텐데
VGA급 실시간 MPEG4 인코딩이 가능할지가 우려되는군요..
ffmpeg 빌드
제 이전 댓글은 제가 쓰는 x86 리눅스 환경에서 간단히 테스트해보고 올린 것입니다.
-f mpegvideo 옵션만 제거하면 출력파일 이름에 따라서 알아서 동작하더군요.
그런데, 지금 사용하시는 ffmpeg의 빌드옵션을 살펴보니, 인코더와 먹서가 모두 꺼진 상태네요.
아래와 같은 동작을 원하시는 것 같은데요;
[1] video4linux 장치로부터 프레임을 읽어들여
[2] 640x480 MPEG4로 실시간 인코딩하고
[3] .avi 또는 .mp4로 저장
지금 쓰시는 ffmpeg은 [2]와 [3] 모두 지원하지 않는 상태같습니다.
--disable-encoders, --disable-muxers 등 인코더와 먹서를 모두 끄는 빌드옵션만 있고
켜는 옵션은 --enable-muxer=ffm 하나 뿐이군요. 디코딩 전용으로 빌드된 것이죠.
인코더와 먹서가 켜진 ffmpeg 빌드를 찾거나, 직접 켜고 빌드하셔야 할 것 같습니다.
그 문제를 해결하고 나면 CPU 성능이 발목을 잡을 것 같네요..
감사합니다
ffmpeg 패키지가 openwrt로 나온 것은
몇가지 옵션이 없다고는 알고있었으나 그런 문제가 있었네요
빌드를 시도해보고 그래도 작동이 제대로 안되면 다른 방법으로 해야겠네요
환경 조건이 까다로우니 생각보다 보통의 리눅스에서의 기능과 동작에 차이가 크군요
댓글 달기