Re: How to convert a JPEG image to an I-frame?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01 Nov 2007 Klaus Schmidinger <Klaus.Schmidinger@xxxxxxxxxx> wrote:

> I'm looking for a method to convert a JPEG image to an
> MPEG-2 I-frame that can be displayed through VDR's
> cDevice::StillPicture() function. The conversion should
> be done by a (sequence of) shell command(s).

May be something like this:

#!/bin/bash
#
# requires: ...topnm, pnmscale, pnmcomp, ppmntsc, ppmtoy4m, mpeg2enc
#

# video format. pal or ntsc
FORMAT=pal

# target image width/height (taking into account visible screen area)
if [ "$FORMAT" = "ntsc" ]; then
  TW=600
  TH=420
else
  TW=632
  TH=512
fi

TMP=/tmp/image_convert.$$.pnm
IMG=$1
MPG=$2

DIR=`dirname "$MPG"`
if [ ! -d "$DIR" ]; then
  mkdir -p "$DIR"
fi
#
# get the file type and set the according converter to PNM
#
FILE_TYPE=`file -i -L -b "$IMG" 2>/dev/null | cut -f2 -d/`
case "$FILE_TYPE" in
  jpg | jpeg)
  TO_PNM=jpegtopnm
  ;;
  tiff)
  TO_PNM=tifftopnm
  ;;
  bmp | x-bmp)
  TO_PNM=bmptoppm
  ;;
  png | x-png)
  TO_PNM=pngtopnm
  ;;
  Netpbm | pnm | x-portable-pixmap)
  TO_PNM=cat
  ;;
  gif)
  TO_PNM=giftopnm
  ;;
  *)
  echo "filetype '$FILE_TYPE' is not supported"
  exit 1
  ;;
esac
#
# 'chroma subsampling mode' mjpegtools >= 1.8.0
#
SUBSAMPLINGMODE=""
if ppmtoy4m -h | egrep -q "'420mpeg2'"; then
    SUBSAMPLINGMODE="-S 420mpeg2"
fi
#
# extract the image size & compute scale value
#
LANG=C # get the decimal point right
$TO_PNM "$IMG" >$TMP 2>/dev/null
S=`pnmfile $TMP | awk '{ printf "%d %d ",$4,$6 }'`
S=`echo $S $TW $TH | awk '{ sw=$3/$1; sh=$4/$2; s=(sw<sh)?sw:sh; printf "%.4f\n",(s>1)?1.0:s; }'`
#
# now run the conversion
#
if [ "$FORMAT" = "ntsc" ]; then
  pnmscale $S $TMP | \
    pnmpad -black -width 704 -height 480 | \
    ppmntsc | \
    ppmtoy4m -v 0 -n 1 -r -F 30000:1001 $SUBSAMPLINGMODE | \
    mpeg2enc -f 7 -T 90 -F 4 -nn -a 2 -v 0 -o "$MPG"
else
  pnmscale $S $TMP | \
    pnmpad -black -width 704 -height 576 | \
    ppmntsc --pal | \
    ppmtoy4m -v 0 -n 1 -r -F 25:1 $SUBSAMPLINGMODE | \
    mpeg2enc -f 7 -T 90 -F 3 -np -a 2 -v 0 -o "$MPG"
fi
#
# cleanup
#
rm $TMP

-- 
Stefan Huelswitt
s.huelswitt@xxxxxx  | http://www.muempf.de/

_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux