トップ 最新 追記

Masa's blog

検索キーワード:

2012年07月06日 cacaview for w3m [長年日記]

_ cacaview for w3m

cacaview.sh

#! /bin/sh
file=`file $1`
if [ "X`echo ${file}|egrep ' GIF '`" != "X" ]
then
        cat $1 |\
                giftopnm |\
                ppmtobmp >/tmp/cacaview.sh.$$.tmp
elif [ "X`echo ${file}|egrep ' JPEG '`" != "X" ]
then
        cat $1 |\
                jpegtopnm |\
                ppmtobmp >/tmp/cacaview.sh.$$.tmp
elif [ "X`echo ${file}|egrep ' PNG '`" != "X" ]
then
        cat $1 |\
                pngtopnm |\
                ppmtobmp >/tmp/cacaview.sh.$$.tmp
fi
cacaview /tmp/cacaview.sh.$$.tmp
rm -f /tmp/cacaview.sh.$$.tmp

You may think that I had better to use convert to change some image format to BMP, but BMP file which is created by convert is not recognized by cacaview :(

I'm not sure why...

~/.w3m/mailcap

image/*; cacaview.sh %s ;needsterminal

type "I" to see image on link.


2012年07月08日 libcaca require imlib2 [長年日記]

_ libcaca require imlib2

If imlib2 is not in system, cacaview can not load any image except BMP. I built imlib2-1.4.5 first and next I re-built libcaca-1.9.15.beta18, and then I could make cacaview to work fine!


2012年07月20日 Build of minidlna in Slackware-13.37 [長年日記]

_ MiniDLNA is a DLNA server for UNIX :)

_ minidlna-1.1.0(cvs version)

  • cvs -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna login
  • cvs -z3 -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna co -P minidlna
  • cd minidlna
  • ./autogen.sh
  • LIBS="-lavformat -lavcodec -lavutil -lm -lz -lbz2 -lpthread -ldl" ./configure
  • make
  • make install

minidlna-1.1.0 is easier to build than minidlna-1.0.24, but still don't have a function of transcode. So next minidlna-1.0.24 may be better to use :)

_ minidlna_1.0.24 with transcode patch

I had to do DIRTY HACK to build minidlna-1.0.24 B)

#
# minidlna-1.0.24-dirtyhack.diff
#
diff -crN minidlna-1.0.24.ORG/Makefile minidlna-1.0.24/Makefile
*** minidlna-1.0.24.ORG/Makefile	2012-07-21 19:27:34.010000085 +0900
--- minidlna-1.0.24/Makefile	2012-07-21 19:28:11.943000085 +0900
***************
*** 24,29 ****
--- 24,30 ----
  #CFLAGS = -Wall -g -Os -D_GNU_SOURCE
  CFLAGS = -Wall -g -O3 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 \
  	 -I/usr/include/ffmpeg \
+ 	 -I/usr/local/include/libavutil -I/usr/local/include/libavcodec -I/usr/local/include/libavformat \
  	 -I/usr/include/libavutil -I/usr/include/libavcodec -I/usr/include/libavformat \
  	 -I/usr/include/ffmpeg/libavutil -I/usr/include/ffmpeg/libavcodec -I/usr/include/ffmpeg/libavformat
  #STATIC_LINKING: CFLAGS += -DSTATIC
***************
*** 59,65 ****
  ALLOBJS = $(BASEOBJS) $(LNXOBJS)

  ifeq (,$(findstring CYGWIN,$(OS_NAME)))
! LIBS = -lpthread -lexif -ljpeg -lsqlite3 -lavformat -lavutil -lavcodec -lid3tag -lFLAC -logg -lvorbis
  #STATIC_LINKING: LIBS = -lvorbis -logg -lm -lsqlite3 -lpthread -lexif -ljpeg -lFLAC -lm -lid3tag -lz -lavformat -lavutil -lavcodec -lm
  else
  LIBS = -lpthread -lexif -ljpeg -lsqlite3 -lavformat -lid3tag -lFLAC -lvorbis
--- 60,66 ----
  ALLOBJS = $(BASEOBJS) $(LNXOBJS)

  ifeq (,$(findstring CYGWIN,$(OS_NAME)))
! LIBS = -lpthread -lexif -ljpeg -lsqlite3 -lavformat -lavutil -lavcodec -lid3tag -lFLAC -logg -lvorbis -ldl -lbz2 -lavutil
  #STATIC_LINKING: LIBS = -lvorbis -logg -lm -lsqlite3 -lpthread -lexif -ljpeg -lFLAC -lm -lid3tag -lz -lavformat -lavutil -lavcodec -lm
  else
  LIBS = -lpthread -lexif -ljpeg -lsqlite3 -lavformat -lid3tag -lFLAC -lvorbis
***************
*** 103,109 ****
  	$(INSTALL) --mode=0644 minidlna.conf $(ETCINSTALLDIR)

  ifeq (,$(findstring CYGWIN,$(OS_NAME)))
! minidlna:	$(BASEOBJS) $(LNXOBJS) $(LIBS)
  else
  minidlna:	$(BASEOBJS) $(LNXOBJS)
  endif
--- 104,110 ----
  	$(INSTALL) --mode=0644 minidlna.conf $(ETCINSTALLDIR)

  ifeq (,$(findstring CYGWIN,$(OS_NAME)))
! minidlna:	$(BASEOBJS) $(LNXOBJS)
  else
  minidlna:	$(BASEOBJS) $(LNXOBJS)
  endif
diff -crN minidlna-1.0.24.ORG/albumart.c minidlna-1.0.24/albumart.c
*** minidlna-1.0.24.ORG/albumart.c	2012-02-11 08:37:22.000000000 +0900
--- minidlna-1.0.24/albumart.c	2012-07-21 19:28:11.944000085 +0900
***************
*** 20,25 ****
--- 20,26 ----
  #include <string.h>
  #include <unistd.h>
  #include <dirent.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <sys/param.h>
  #include <libgen.h>
diff -crN minidlna-1.0.24.ORG/daemonize.c minidlna-1.0.24/daemonize.c
*** minidlna-1.0.24.ORG/daemonize.c	2012-07-21 19:27:34.011000085 +0900
--- minidlna-1.0.24/daemonize.c	2012-07-21 19:33:12.132000117 +0900
***************
*** 27,32 ****
--- 27,33 ----
   * POSSIBILITY OF SUCH DAMAGE.
   */
  #include <sys/types.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <unistd.h>
  #include <fcntl.h>
diff -crN minidlna-1.0.24.ORG/dirtyhack.h minidlna-1.0.24/dirtyhack.h
*** minidlna-1.0.24.ORG/dirtyhack.h	1970-01-01 09:00:00.000000000 +0900
--- minidlna-1.0.24/dirtyhack.h	2012-07-21 19:39:44.947000091 +0900
***************
*** 0 ****
--- 1,34 ----
+ typedef __time_t time_t;
+ struct timespec
+ {
+       __time_t tv_sec;            /* Seconds.  */
+       long int tv_nsec;           /* Nanoseconds.  */
+ };
+ #define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO
+ #define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO
+ #define AV_PKT_FLAG_KEY PKT_FLAG_KEY
+ struct tm
+ {
+   int tm_sec;                   /* Seconds.     [0-60] (1 leap second) */
+   int tm_min;                   /* Minutes.     [0-59] */
+   int tm_hour;                  /* Hours.       [0-23] */
+   int tm_mday;                  /* Day.         [1-31] */
+   int tm_mon;                   /* Month.       [0-11] */
+   int tm_year;                  /* Year - 1900.  */
+   int tm_wday;                  /* Day of week. [0-6] */
+   int tm_yday;                  /* Days in year.[0-365] */
+   int tm_isdst;                 /* DST.         [-1/0/1]*/
+
+ #ifdef  __USE_BSD
+   long int tm_gmtoff;           /* Seconds east of UTC.  */
+   __const char *tm_zone;        /* Timezone abbreviation.  */
+ #else
+   long int __tm_gmtoff;         /* Seconds east of UTC.  */
+   __const char *__tm_zone;      /* Timezone abbreviation.  */
+ #endif
+ };
+ #define AVMetadataTag AVDictionaryEntry
+ #define AV_METADATA_IGNORE_SUFFIX AV_DICT_IGNORE_SUFFIX
+ #define av_metadata_get av_dict_get
+ #define CLOCK_MONOTONIC                       1
+ #define CLOCK_REALTIME                        0
diff -crN minidlna-1.0.24.ORG/inotify.c minidlna-1.0.24/inotify.c
*** minidlna-1.0.24.ORG/inotify.c	2012-07-21 19:27:34.020000085 +0900
--- minidlna-1.0.24/inotify.c	2012-07-21 19:28:11.952000085 +0900
***************
*** 25,30 ****
--- 25,31 ----
  #include <libgen.h>
  #include <errno.h>
  #include <sys/types.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <sys/time.h>
  #include <sys/resource.h>
diff -crN minidlna-1.0.24.ORG/log.c minidlna-1.0.24/log.c
*** minidlna-1.0.24.ORG/log.c	2012-02-15 03:26:53.000000000 +0900
--- minidlna-1.0.24/log.c	2012-07-21 19:28:11.953000085 +0900
***************
*** 22,27 ****
--- 22,28 ----
  #include <stdio.h>
  #include <stdarg.h>
  #include <string.h>
+ #include "dirtyhack.h"
  #include <time.h>

  #include "log.h"
diff -crN minidlna-1.0.24.ORG/metadata.c minidlna-1.0.24/metadata.c
*** minidlna-1.0.24.ORG/metadata.c	2012-07-21 19:27:34.028000085 +0900
--- minidlna-1.0.24/metadata.c	2012-07-21 19:28:11.956000085 +0900
***************
*** 19,24 ****
--- 19,25 ----
  #include <ctype.h>
  #include <string.h>
  #include <stdlib.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>

  #include <unistd.h>
diff -crN minidlna-1.0.24.ORG/minidlna.c minidlna-1.0.24/minidlna.c
*** minidlna-1.0.24.ORG/minidlna.c	2012-07-21 19:27:34.035000085 +0900
--- minidlna-1.0.24/minidlna.c	2012-07-21 19:29:08.188000085 +0900
***************
*** 55,60 ****
--- 55,61 ----
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
+ #include "dirtyhack.h"
  #include <fcntl.h>
  #include <sys/file.h>
  #include <sys/time.h>
diff -crN minidlna-1.0.24.ORG/minissdp.c minidlna-1.0.24/minissdp.c
*** minidlna-1.0.24.ORG/minissdp.c	2012-02-15 03:26:53.000000000 +0900
--- minidlna-1.0.24/minissdp.c	2012-07-21 19:35:08.004000087 +0900
***************
*** 39,44 ****
--- 39,45 ----
  #include <netinet/in.h>
  #include <arpa/inet.h>
  #include <errno.h>
+ #include "dirtyhack.h"

  #include "config.h"
  #include "upnpdescstrings.h"
diff -crN minidlna-1.0.24.ORG/options.c minidlna-1.0.24/options.c
*** minidlna-1.0.24.ORG/options.c	2012-07-21 19:27:34.037000085 +0900
--- minidlna-1.0.24/options.c	2012-07-21 19:34:41.570000288 +0900
***************
*** 31,36 ****
--- 31,37 ----
  #include <string.h>
  #include <stdlib.h>
  #include <ctype.h>
+ #include "dirtyhack.h"
  #include "options.h"
  #include "upnpglobalvars.h"

diff -crN minidlna-1.0.24.ORG/playlist.c minidlna-1.0.24/playlist.c
*** minidlna-1.0.24.ORG/playlist.c	2012-02-11 08:37:22.000000000 +0900
--- minidlna-1.0.24/playlist.c	2012-07-21 19:28:11.959000085 +0900
***************
*** 18,23 ****
--- 18,24 ----
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <libgen.h>
  #include <limits.h>
diff -crN minidlna-1.0.24.ORG/scanner.c minidlna-1.0.24/scanner.c
*** minidlna-1.0.24.ORG/scanner.c	2012-01-22 09:28:03.000000000 +0900
--- minidlna-1.0.24/scanner.c	2012-07-21 19:28:11.962000085 +0900
***************
*** 23,28 ****
--- 23,29 ----
  #include <locale.h>
  #include <libgen.h>
  #include <inttypes.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <sys/time.h>
  #include <sys/resource.h>
diff -crN minidlna-1.0.24.ORG/sql.c minidlna-1.0.24/sql.c
*** minidlna-1.0.24.ORG/sql.c	2012-02-15 03:44:56.000000000 +0900
--- minidlna-1.0.24/sql.c	2012-07-21 19:41:50.384000068 +0900
***************
*** 18,23 ****
--- 18,24 ----
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
+ #include "dirtyhack.h"

  #include "sql.h"
  #include "upnpglobalvars.h"
diff -crN minidlna-1.0.24.ORG/tagutils/tagutils.c minidlna-1.0.24/tagutils/tagutils.c
*** minidlna-1.0.24.ORG/tagutils/tagutils.c	2010-11-12 08:48:14.000000000 +0900
--- minidlna-1.0.24/tagutils/tagutils.c	2012-07-21 19:28:11.966000085 +0900
***************
*** 27,32 ****
--- 27,33 ----
  #include <stdlib.h>
  #include <stddef.h>
  #include <string.h>
+ #include "../dirtyhack.h"
  #include <fcntl.h>
  #include <unistd.h>
  #include <time.h>
diff -crN minidlna-1.0.24.ORG/upnpdescgen.c minidlna-1.0.24/upnpdescgen.c
*** minidlna-1.0.24.ORG/upnpdescgen.c	2012-01-21 09:34:13.000000000 +0900
--- minidlna-1.0.24/upnpdescgen.c	2012-07-21 19:32:07.045000104 +0900
***************
*** 29,34 ****
--- 29,35 ----
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
+ #include "dirtyhack.h"

  #include "config.h"
  #include "getifaddr.h"
diff -crN minidlna-1.0.24.ORG/upnpevents.c minidlna-1.0.24/upnpevents.c
*** minidlna-1.0.24.ORG/upnpevents.c	2012-02-14 07:48:56.000000000 +0900
--- minidlna-1.0.24/upnpevents.c	2012-07-21 19:41:01.487000033 +0900
***************
*** 57,62 ****
--- 57,63 ----
  #include <sys/param.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
+ #include "dirtyhack.h"
  #include <fcntl.h>
  #include <errno.h>

diff -crN minidlna-1.0.24.ORG/upnpglobalvars.c minidlna-1.0.24/upnpglobalvars.c
*** minidlna-1.0.24.ORG/upnpglobalvars.c	2012-07-21 19:27:34.039000085 +0900
--- minidlna-1.0.24/upnpglobalvars.c	2012-07-21 19:34:13.688999997 +0900
***************
*** 53,58 ****
--- 53,59 ----
  #else
  #include <limits.h>
  #endif // __CYGWIN__
+ #include "dirtyhack.h"

  #include "config.h"
  #include "upnpglobalvars.h"
diff -crN minidlna-1.0.24.ORG/upnphttp.c minidlna-1.0.24/upnphttp.c
*** minidlna-1.0.24.ORG/upnphttp.c	2012-07-21 19:27:34.048000085 +0900
--- minidlna-1.0.24/upnphttp.c	2012-07-21 19:30:12.005000081 +0900
***************
*** 55,60 ****
--- 55,61 ----
  #include <sys/param.h>
  #include <ctype.h>
  #include <sys/types.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <fcntl.h>
  #include <errno.h>
diff -crN minidlna-1.0.24.ORG/upnpsoap.c minidlna-1.0.24/upnpsoap.c
*** minidlna-1.0.24.ORG/upnpsoap.c	2012-07-21 19:27:34.059000085 +0900
--- minidlna-1.0.24/upnpsoap.c	2012-07-21 19:32:38.711999967 +0900
***************
*** 52,57 ****
--- 52,58 ----
  #include <sys/socket.h>
  #include <unistd.h>
  #include <dirent.h>
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <sys/types.h>
  #include <arpa/inet.h>
diff -crN minidlna-1.0.24.ORG/utils.c minidlna-1.0.24/utils.c
*** minidlna-1.0.24.ORG/utils.c	2012-07-21 19:27:34.060000085 +0900
--- minidlna-1.0.24/utils.c	2012-07-21 19:43:05.541000085 +0900
***************
*** 24,29 ****
--- 24,30 ----
  #else
  #include <limits.h>
  #endif // __CYGWIN__
+ #include "dirtyhack.h"
  #include <sys/stat.h>
  #include <unistd.h>
  #include <sys/types.h>
diff -crN minidlna-1.0.24.ORG/uuid.c minidlna-1.0.24/uuid.c
*** minidlna-1.0.24.ORG/uuid.c	2012-07-21 19:27:34.068000085 +0900
--- minidlna-1.0.24/uuid.c	2012-07-21 19:35:38.580000160 +0900
***************
*** 26,31 ****
--- 26,32 ----
  #include <stdio.h>
  #include <stdlib.h>
  #include <time.h>
+ #include "dirtyhack.h"
  #include <fcntl.h>
  #include <unistd.h>
  #include "config.h"
  • make
  • make install install-conf

2012年07月31日 Encoding script for Panasonic Viera with miniDLNA [長年日記]

_ This is a encoding script that make miniDLNA can provide movie files for Panasonic Viera as DLNA client.

_ convert2dlna_mpegts.sh

This script convert any movie into mpegts(H.264, AC-3).

#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
    echo "Usage : $0 -ix input_x_resolution -iy input_y_resolution [-2] [-s start_time] [ -e elaps_time] [-iax input_aspect_x] [-iay input_aspect_y] [-oax output_aspect_x] [-oay output_aspect_y] [-ab audio_bitrate] [-vb video_bitrate] [-fps frame_per_second] [-o output] inputs [-h|--help] "
    echo ""
    echo "  -ix input_x_resolution : input x resolution"
    echo "  -iy input_y_resolution : input y resolution"
    echo "  -2                     : 2-pass encoding(default none)"
    echo "  -s start_time          : start position time"
    echo "  -e elaps_time          : elaps(pass) time"
    echo "  -iax input_aspect_x    : input x aspect (default ix)"
    echo "  -iay input_aspect_y    : input y aspect (default iy)"
    echo "  -oax output_aspect_x   : output x aspect (default 16)"
    echo "  -oay output_aspect_y   : output y aspect (default 9)"
    echo "  -ab audio_bitrate      : audio bitrate(Kbps) (default 600)"
    echo "  -vb video_bitrate      : video bitrate(Kbps) (default 128)"
    echo "  -fps frame_per_second  : frame per second (default 30000/1001)"
    echo "  -o output              : output file (default convert2dlna.m2t)"
    echo "  inputs                 : input file names separated by space"
    exit 0
fi
#
ix=""; export ix
iy=""; export iy
pass="1"
start=""
elaps=""
iax=""; export iax
iay=""; export iay
oax=16; export oax
oay=9; export oay
ab=128
vb=600
fps="30000/1001"
output="convert2dlna.m2t"
#
while [ $# != 0 ]
do
    case $1 in
    -ix )
        shift
        ix="$1"
        ;;
    -iy )
        shift
        iy="$1"
        ;;
    -2 )
        pass="2"
        ;;
    -s )
        shift
        start="-ss $1"
        ;;
    -e )
        shift
        elaps="-endpos $1"
        ;;
    -iax )
        shift
        iax="$1"
        ;;
    -iay )
        shift
        iay="$1"
        ;;
    -oax )
        shift
        oax="$1"
        ;;
    -oay )
        shift
        oay="$1"
        ;;
    -ab )
        shift
        ab="$1"
        ;;
    -vb )
        shift
        vb="$1"
        ;;
    -fps )
        shift
        fps="$1"
        ;;
    -o )
        shift
        output="$1"
        ;;
    * )
        input="${input} $1"
        ;;
    esac
    shift
done
#
if [ "X${ix}" = "X" ]
then
	echo "-ix(input x resolution) is not specified."
	exit 1
fi
#
if [ "X${iy}" = "X" ]
then
	echo "-iy(input y resolution) is not specified."
	exit 1
fi
#
if [ "X${iax}" = "X" ]
then
	iax=${ix}
fi
#
if [ "X${iay}" = "X" ]
then
	iay=${iy}
fi
#
sx_sy_ex_ey=`cat /dev/null |\
awk 'BEGIN{
	ix = ENVIRON["ix"];
	iy = ENVIRON["iy"];
	iax = ENVIRON["iax"];
	iay = ENVIRON["iay"];
	oax = ENVIRON["oax"];
	oay = ENVIRON["oay"];

	if ((ix / iy) == (iax / iay)){
		ilx = ix;
		ily = iy;
	}else if ((ix / iy) < (iax / iay)){
		ily = iy;
		ilx = iy * iax / iay;
	}else{
		ilx = ix;
		ily = ix * iay / iax;
	}

	scalex = ilx;
	scaley = ily;
	if ((ilx / ily) == (oax / oay)){
		expandx = ilx;
		expandy = ily;
	}else if ((ilx / ily) < (oax / oay)){
		expandy = ily;
		expandx = ily * oax / oay;
	}else{
		expandx = ilx;
		expandy = ilx * oay / oax;
	}

	printf("%d %d %d %d\n", scalex, scaley, expandx, expandy);
}'`
#
sx=`echo ${sx_sy_ex_ey}|cut -d ' ' -f1`
sy=`echo ${sx_sy_ex_ey}|cut -d ' ' -f2`
ex=`echo ${sx_sy_ex_ey}|cut -d ' ' -f3`
ey=`echo ${sx_sy_ex_ey}|cut -d ' ' -f4`
#
function menc() {
        pass=$1
        filename=$2

        if [ "X${pass}" = "X0" ]
        then
                vp=""
        else
                vp="pass=${pass}:"
        fi

	mencoder \
		${start} ${elaps} \
		-of lavf -lavfopts format=mpegts \
		-ofps ${fps} \
		-oac lavc -lavcopts acodec=ac3:abitrate=${ab}:aspect=${oax}/${oay} \
		-ovc x264 -x264encopts ${vp}bitrate=${vb} \
		-vf scale=${sx}:${sy},expand=${ex}:${ey},harddup \
		-o ${filename} \
		${input}
}
#
if [ "X${pass}" = "X1" ]
then
        menc 0 ${output}
else
        menc 1 /dev/null
        menc 2 ${output}
fi

_ ffmpeg-1.1.1

I built ffmpeg-1.1.1 with following configuration.

./configure --enable-shared \
	--enable-libopencore-amrnb --enable-version3 \
	--enable-libopencore-amrwb \
	--enable-libmp3lame \
	--enable-libfaac --enable-nonfree \
	--enable-libx264 --enable-gpl

_ convert2dlna_mp4.sh

This script convert any movie into mp4(H.264, AAC).

#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
    echo "Usage : $0 [-2] [-s start_time] [ -e elaps_time] [-sz size] [-a AX:AY] [-ab audio_bitrate] [-vb video_bitrate] [-fps frame_per_second] [-o output] inputs [-h|--help] "
    echo ""
    echo "  -2                     : 2-pass encoding(default none)"
    echo "  -s start_time          : start position time = hh:mm:ss(default none)"
    echo "  -e elaps_time          : elaps(pass) time second(default none)"
    echo "  -sz size               : size for output = XSIZExYSIZE(default same as input)"
    echo "  -a aspect              : aspect ratio for output = X:Y(default same as input)"
    echo "  -ab audio_bitrate      : audio bitrate(Kbps) (default 128)"
    echo "  -vb video_bitrate      : video bitrate(Kbps) (default 600)"
    echo "  -fps frame_per_second  : frame per second (default 30000/1001)"
    echo "  -o output              : output file (default convert2dlna.mp4)"
    echo "  input                  : input file name"
    exit 0
fi
#
pass="1"
start=""
elaps=""
size=""
aspect=""
ab=128
vb=600
fps="30000/1001"
output="convert2dlna.mp4"
#
while [ $# != 0 ]
do
    case $1 in
    -2 )
        pass="2"
        ;;
    -s )
        shift
        start="-ss $1"
        ;;
    -e )
        shift
        elaps="-t $1"
        ;;
    -sz )
        shift
        size="-s $1"
        ;;
    -a )
        shift
        aspect="-aspect $1"
        ;;
    -ab )
        shift
        ab="$1"
        ;;
    -vb )
        shift
        vb="$1"
        ;;
    -fps )
        shift
        fps="$1"
        ;;
    -o )
        shift
        output="$1"
        ;;
    * )
        input="$1"
        ;;
    esac
    shift
done
#
function menc() {
        pass=$1
        filename=$2

        if [ "X${pass}" = "X0" ]
        then
                vp=""
        else
                vp="-pass ${pass}"
        fi

	ffmpeg \
		-y \
		${start} ${elaps} \
	       	-i ${input} \
		-f mp4 \
		-vcodec h264 -b ${vb}k ${aspect} ${size} ${vp} \
		-acodec aac -ab ${ab}k -strict -2 -absf aac_adtstoasc \
		-r ${fps} \
		${filename}
}
#
if [ "X${pass}" = "X1" ]
then
        menc 0 ${output}
else
        menc 1 /dev/null
        menc 2 ${output}
fi