Output h264 videos

Add any particular hints or tricks you have found to help with your ZoneMinder experience.
Post Reply
coke
Posts: 518
Joined: Wed Jan 30, 2008 5:53 pm
Location: St. Louis, MO, USA

Output h264 videos

Post by coke »

Has anyone had success with outputting h264 videos instead of the usual formats? I'm under the impression that this might be a better option for dumping off old events onto backup storage, especially where modetect isn't being used.

My ffmpeg's compiled with support for libx264, ffmpeg -formats lists a decoder and encoder for ffmpeg, my ffmpeg options in ZM are "-sameq -f 5", but attempting to generate the video fails with the following, pardon the verbosity.


Code: Select all

cat /var/www//events/1/10/01/18/16/20/00/ffmpeg.log
FFmpeg version SVN-r20915, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  built on Dec 24 2009 11:54:49 with gcc 4.4.1
  configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-shared --enable-postproc --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-x11grab --enable-bzlib --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-libspeex --enable-x11grab --enable-runtime-cpudetect --enable-encoder=aac --enable-encoder=ac3 --enable-encoder=adpcm_adx --enable-encoder=adpcm_g726 --enable-encoder=adpcm_ima_qt --enable-encoder=adpcm_ima_wav --enable-encoder=adpcm_ms --enable-encoder=adpcm_swf --enable-encoder=adpcm_yamaha --enable-encoder=alac --enable-encoder=asv1 --enable-encoder=asv2 --enable-encoder=bmp --enable-encoder=dnxhd --enable-encoder=dvbsub --enable-encoder=dvdsub --enable-encoder=dvvideo --enable-encoder=ffv1 --enable-encoder=ffvhuff --enable-encoder=flac --enable-encoder=flashsv --enable-encoder=flv --enable-encoder=gif --enable-encoder=h261 --enable-encoder=h263 --enable-encoder=h263p --enable-encoder=huffyuv --enable-encoder=jpegls --enable-encoder=libdirac --enable-encoder=libfaac --enable-encoder=libgsm --enable-encoder=libgsm_ms --enable-encoder=libmp3lame --enable-encoder=libopencore_amrnb --enable-encoder=libschroedinger --enable-encoder=libtheora --enable-encoder=libvorbis --enable-encoder=libx264 --enable-encoder=libxvid --enable-encoder=ljpeg --enable-encoder=mjpeg --enable-encoder=mp2 --enable-encoder=mpeg1video --enable-encoder=mpeg2video --enable-encoder=mpeg4 --enable-encoder=msmpeg4v1 --enable-encoder=msmpeg4v2 --enable-encoder=msmpeg4v3 --enable-encoder=nellymoser --enable-encoder=pam --enable-encoder=pbm --enable-encoder=pcm_alaw --enable-encoder=pcm_f32be --enable-encoder=pcm_f32le --enable-encoder=pcm_f64be --enable-encoder=pcm_f64le --enable-encoder=pcm_mulaw --enable-encoder=pcm_s16be --enable-encoder=pcm_s16le --enable-encoder=pcm_s24be --enable-encoder=pcm_s24daud --enable-encoder=pcm_s24le --enable-encoder=pcm_s32be --enable-encoder=pcm_s32le --enable-encoder=pcm_s8 --enable-encoder=pcm_u16be --enable-encoder=pcm_u16le --enable-encoder=pcm_u24be --enable-encoder=pcm_u24le --enable-encoder=pcm_u32be --enable-encoder=pcm_u32le --enable-encoder=pcm_u8 --enable-encoder=pcm_zork --enable-encoder=pcx --enable-encoder=pgm --enable-encoder=pgmyuv --enable-encoder=png --enable-encoder=ppm --enable-encoder=qtrle --enable-encoder=rawvideo --enable-encoder=roq --enable-encoder=roq_dpcm --enable-encoder=rv10 --enable-encoder=rv20 --enable-encoder=sgi --enable-encoder=snow --enable-encoder=sonic --enable-encoder=sonic_ls --enable-encoder=svq1 --enable-encoder=targa --enable-encoder=tiff --enable-encoder=v210 --enable-encoder=vorbis --enable-encoder=wmav1 --enable-encoder=wmav2 --enable-encoder=wmv1 --enable-encoder=wmv2 --enable-encoder=xsub --enable-encoder=zlib --enable-encoder=zmbv --enable-decoder=aac --enable-decoder=aasc --enable-decoder=ac3 --enable-decoder=adpcm_4xm --enable-decoder=adpcm_adx --enable-decoder=adpcm_ct --enable-decoder=adpcm_ea --enable-decoder=adpcm_ea_maxis_xa --enable-decoder=adpcm_ea_r1 --enable-decoder=adpcm_ea_r2 --enable-decoder=adpcm_ea_r3 --enable-decoder=adpcm_ea_xas --enable-decoder=adpcm_g726 --enable-decoder=adpcm_ima_amv --enable-decoder=adpcm_ima_dk3 --enable-decoder=adpcm_ima_dk4 --enable-decoder=adpcm_ima_ea_eacs --enable-decoder=adpcm_ima_ea_sead --enable-decoder=adpcm_ima_iss --enable-decoder=adpcm_ima_qt --enable-decoder=adpcm_ima_smjpeg --enable-decoder=adpcm_ima_wav --enable-decoder=adpcm_ima_ws --enable-decoder=adpcm_ms --enable-decoder=adpcm_sbpro_2 --enable-decoder=adpcm_sbpro_3 --enable-decoder=adpcm_sbpro_4 --enable-decoder=adpcm_swf --enable-decoder=adpcm_thp --enable-decoder=adpcm_xa --enable-decoder=adpcm_yamaha --enable-decoder=alac --enable-decoder=als --enable-decoder=amv --enable-decoder=ape --enable-decoder=asv1 --enable-decoder=asv2 --enable-decoder=atrac1 --enable-decoder=atrac3 --enable-decoder=avs --enable-decoder=bethsoftvid --enable-decoder=bfi --enable-decoder=bmp --enable-decoder=c93 --enable-decoder=cavs --enable-decoder=cinepak --enable-decoder=cljr --enable-decoder=cook --enable-decoder=cscd --enable-decoder=cyuv --enable-decoder=dca --enable-decoder=dnxhd --enable-decoder=dpx --enable-decoder=dsicinaudio --enable-decoder=dsicinvideo --enable-decoder=dvbsub --enable-decoder=dvdsub --enable-decoder=dvvideo --enable-decoder=dxa --enable-decoder=eac3 --enable-decoder=eacmv --enable-decoder=eamad --enable-decoder=eatgq --enable-decoder=eatgv --enable-decoder=eatqi --enable-decoder=eightbps --enable-decoder=eightsvx_exp --enable-decoder=eightsvx_fib --enable-decoder=escape124 --enable-decoder=ffv1 --enable-decoder=ffvhuff --enable-decoder=flac --enable-decoder=flashsv --enable-decoder=flic --enable-decoder=flv --enable-decoder=fourxm --enable-decoder=fraps --enable-decoder=frwu --enable-decoder=gif --enable-decoder=h261 --enable-decoder=h263 --enable-decoder=h263i --enable-decoder=h264 --enable-decoder=h264_vdpau --enable-decoder=huffyuv --enable-decoder=idcin --enable-decoder=imc --enable-decoder=indeo2 --enable-decoder=indeo3 --enable-decoder=interplay_dpcm --enable-decoder=interplay_video --enable-decoder=jpegls --enable-decoder=kmvc --enable-decoder=libdirac --enable-decoder=libfaad --enable-decoder=libgsm --enable-decoder=libgsm_ms --enable-decoder=libopencore_amrnb --enable-decoder=libopencore_amrwb --enable-decoder=libopenjpeg --enable-decoder=libschroedinger --enable-decoder=libspeex --enable-decoder=loco --enable-decoder=mace3 --enable-decoder=mace6 --enable-decoder=mdec --enable-decoder=mimic --enable-decoder=mjpeg --enable-decoder=mjpegb --enable-decoder=mlp --enable-decoder=mmvideo --enable-decoder=motionpixels --enable-decoder=mp1 --enable-decoder=mp2 --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3on4 --enable-decoder=mpc7 --enable-decoder=mpc8 --enable-decoder=mpeg1_vdpau --enable-decoder=mpeg1video --enable-decoder=mpeg2video --enable-decoder=mpeg4 --enable-decoder=mpeg4_vdpau --enable-decoder=mpeg_vdpau --enable-decoder=mpeg_xvmc --enable-decoder=mpegvideo --enable-decoder=msmpeg4v1 --enable-decoder=msmpeg4v2 --enable-decoder=msmpeg4v3 --enable-decoder=msrle --enable-decoder=msvideo1 --enable-decoder=mszh --enable-decoder=nellymoser --enable-decoder=nuv --enable-decoder=pam --enable-decoder=pbm --enable-decoder=pcm_alaw --enable-decoder=pcm_bluray --enable-decoder=pcm_dvd --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_mulaw --enable-decoder=pcm_s16be --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24daud --enable-decoder=pcm_s24le --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s8 --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_zork --enable-decoder=pcx --enable-decoder=pgmyuv --enable-decoder=pgssub --enable-decoder=png --enable-decoder=ppm --enable-decoder=ptx --enable-decoder=qcelp --enable-decoder=qdm2 --enable-decoder=qdraw --enable-decoder=qpeg --enable-decoder=qtrle --enable-decoder=ra_144 --enable-decoder=ra_288 --enable-decoder=rawvideo --enable-decoder=rl2 --enable-decoder=roq --enable-decoder=roq_dpcm --enable-decoder=rpza --enable-decoder=rv10 --enable-decoder=rv20 --enable-decoder=rv30 --enable-decoder=rv40 --enable-decoder=sgi --enable-decoder=shorten --enable-decoder=smackaud --enable-decoder=smacker --enable-decoder=smc --enable-decoder=snow --enable-decoder=sol_dpcm --enable-decoder=sonic --enable-decoder=sp5x --enable-decoder=sunrast --enable-decoder=svq1 --enable-decoder=svq3 --enable-decoder=targa --enable-decoder=theora --enable-decoder=thp --enable-decoder=tiertexseqvideo --enable-decoder=tiff --enable-decoder=tmv --enable-decoder=truehd --enable-decoder=truemotion1 --enable-decoder=truespeech --enable-decoder=tscc --enable-decoder=tta --enable-decoder=twinvq --enable-decoder=txd --enable-decoder=ulti --enable-decoder=v210 --enable-decoder=v210x --enable-decoder=vb --enable-decoder=vc1 --enable-decoder=vc1_vdpau --enable-decoder=vcr1 --enable-decoder=vmdaudio --enable-decoder=vmdvideo --enable-decoder=vmnc --enable-decoder=vorbis --enable-decoder=vp3 --enable-decoder=vp5 --enable-decoder=vp6 --enable-decoder=vp6a --enable-decoder=vp6f --enable-decoder=vqa --enable-decoder=wavpack --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmv1 --enable-decoder=wmv2 --enable-decoder=wmv3 --enable-decoder=wmv3_vdpau --enable-decoder=wnv1 --enable-decoder=ws_snd1 --enable-decoder=xan_dpcm --enable-decoder=xan_wc3 --enable-decoder=xl --enable-decoder=xsub --enable-decoder=zlib --enable-decoder=zmbv
  libavutil     50. 7. 0 / 50. 7. 0
  libavcodec    52.45. 0 / 52.45. 0
  libavformat   52.44. 0 / 52.44. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.12. 0 /  1.12. 0
  libswscale     0. 7. 2 /  0. 7. 2
  libpostproc   51. 2. 0 / 51. 2. 0
[image2 @ 0x8643390]max_analyze_duration reached

Seems stream 0 codec frame rate differs from container frame rate: 4.91 (491/100) -> 58.92 (707/12)
Input #0, image2, from '%03d-capture.jpg':
  Duration: 00:09:59.79, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: mjpeg, yuvj420p, 640x480 [PAR 1:1 DAR 4:3], 4.91 fps, 58.92 tbr, 4.91 tbn, 4.91 tbc
[libx264 @ 0x8668ad0]broken ffmpeg default settings detected
[libx264 @ 0x8668ad0]use an encoding preset (vpre)
Output #0, h264, to 'Event-1053962-r1-s1.h264':
    Stream #0.0: Video: libx264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 5 tbc
Stream mapping:
  Stream #0.0 -> #0.0
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
coke
Posts: 518
Joined: Wed Jan 30, 2008 5:53 pm
Location: St. Louis, MO, USA

Output h264 sorta solved

Post by coke »

Found the magic button, needed to add "-vpre libx264-lossless_slow" to the path in zm's options.

Obviously one would want to either edit said preset, or use a different one. I found mine in /usr/local/share/ffmpeg/ but your mileage may vary.

Yeah, definitely need to edit. Using those settings on the same event produced a 112mb file, using my normal .mov settings (both 5fps, -sameq) I get a file just under 10mb, which isn't of significantly worse quality. I'll find a middle ground somewhere in the too-many-options .preset file.
Tired2
Posts: 3
Joined: Fri Aug 06, 2010 6:30 pm

Post by Tired2 »

Any updates? I am interested in this as well...
Pada
Posts: 69
Joined: Fri Jul 30, 2010 12:29 am

Post by Pada »

I wrote a guide for installing ZM on Ubuntu 10 with x264 this morning and I have managed to output a video in x264 format.
What I haven't managed yet is to do a live stream in x264 format.

The ffmpeg output options that I've used was "-vpre medium -vpre main -r 25 -b 150000 -crf 17 -f asf". You might have to use a different preset than the medium.
You should also play with the framerate, bitrate, CRF value and output format. I actually wanted to output to maktroska (mkv), but I just didn't have time to test all the possiblities.

I would really love to see how the user contribution of warmcat would change things: http://www.zoneminder.com/forums/viewtopic.php?t=16514
Currently the stupid videos are stored as jpeg images when you're using record/motion detection, which could render a couple of thousand jpegs in a single folder + the size for that is massive.

I have also tried to do live x264 streaming, but my attempts on modifying zm_ffmpeg.cpp failed and my knowledge of codecs/x264 is just too limited.
Post Reply