Skip to content

Instantly share code, notes, and snippets.

@paselin
Created August 23, 2015 12:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paselin/8478441b6e495d688a10 to your computer and use it in GitHub Desktop.
Save paselin/8478441b6e495d688a10 to your computer and use it in GitHub Desktop.
#!/bin/sh
INPUT="$1"
JSON="$2"
CAT="etc"
FLG=0
TMP=`echo $INPUT | cut -f3 -d "/"`
LEN=`expr ${#TMP} - 5`
FILENAME=`echo $TMP | cut -c 1-$LEN`
TMPOUT="./video/tmp/$FILENAME.mp4"
OUTPUT="./video/encoded/$FILENAME.mp4"
DATE=`date "+%Y-%m-%d"`
ENCODE_LOG="encode_log"
JSON_LOG="json"
touch ./${ENCODE_LOG}/${DATE}.log
TARGET_HEIGHT="720"
if test "${JSON}" != "" ; then
echo ${JSON} > ./${ENCODE_LOG}/${JSON_LOG}/${FILENAME}.json
CAT=`echo "${JSON}" | jq -r '.category'`
echo "Category is ${CAT}" >> ./${ENCODE_LOG}/${DATE}.log
if test "${CAT}" = "anime" ; then
#if test "${CAT}" = "variety" ; then
FLG=1
echo " FLG is ON deinterlace... " >> ./${ENCODE_LOG}/${DATE}.log
fi
fi
## mediainfo
echo "check media info..." >> ./${ENCODE_LOG}/${DATE}.log
MEDIA_INFO=`mediainfo --Inform='Video;%FrameRate%,%DisplayAspectRatio/String%,%BitRate%,%Width%,%Height%' "$1"`
FPS=`echo ${MEDIA_INFO} | awk -F',' '{print $1}'`
ASPECT_RATIO=`echo ${MEDIA_INFO} | awk -F',' '{print $2}'`
BIT_RATE=`echo ${MEDIA_INFO} | awk -F',' '{print $3}'`
SOURCE_WIDTH=`echo ${MEDIA_INFO} | awk -F',' '{print $4}'`
SOURCE_HEIGHT=`echo ${MEDIA_INFO} | awk -F',' '{print $5}'`
echo "source info -----------------" >> ./${ENCODE_LOG}/${DATE}.log
echo " fps : ${FPS}fps" >> ./${ENCODE_LOG}/${DATE}.log
echo " bit rate : ${BIT_RATE}bps" >> ./${ENCODE_LOG}/${DATE}.log
echo " aspect ratio: ${ASPECT_RATIO}" >> ./${ENCODE_LOG}/${DATE}.log
echo " width : ${SOURCE_WIDTH}px" >> ./${ENCODE_LOG}/${DATE}.log
echo " height : ${SOURCE_HEIGHT}px" >> ./${ENCODE_LOG}/${DATE}.log
## calc convert setting
TARGET_SCALE=`echo "scale=2; ${SOURCE_HEIGHT} / ${TARGET_HEIGHT}" | bc`
TARGET_WIDTH=`echo "scale=0; ${SOURCE_WIDTH} / ${TARGET_SCALE}" | bc`
TARGET_BIT_RATE=`echo "scale=0; ${BIT_RATE} / (${TARGET_SCALE} * 2)" | bc`
echo "convert settings ------------------" >> ./${ENCODE_LOG}/${DATE}.log
echo " scale : ${TARGET_SCALE}" >> ./${ENCODE_LOG}/${DATE}.log
echo " width : ${TARGET_WIDTH}px" >> ./${ENCODE_LOG}/${DATE}.log
echo " height : ${TARGET_HEIGHT}px" >> ./${ENCODE_LOG}/${DATE}.log
echo " bitrate : ${TARGET_BIT_RATE}" >> ./${ENCODE_LOG}/${DATE}.log
## encode start
echo "encode start ------------------" >> ./${ENCODE_LOG}/${DATE}.log
gst-launch-1.0 \
filesrc location="${INPUT}" \
! progressreport \
! tsdemux name=demuxer demuxer. \
! queue \
! aacparse \
! avdec_aac \
! audioresample \
! audioconvert dithering=0 \
! voaacenc bitrate=192000 \
! mux. mp4mux name=mux \
! filesink location="${TMPOUT}" demuxer. \
! queue \
! mpegvideoparse \
! omxmpeg2videodec \
! deinterlace mode=${FLG} \
! videoconvert \
! omxh264enc target-bitrate=${TARGET_BIT_RATE} control-rate=variable \
! video/x-h264,width=${TARGET_WIDTH},height=${TARGET_HEIGHT}, \
stream-format=byte-stream,profile=high \
! h264parse \
! mux. >> ./${ENCODE_LOG}/${DATE}.log
status=$?
if test ${status} -nq 0 ; then
echo "encode failed.." >> ./${ENCODE_LOG}/${DATE}.log
else
echo "encode exit" >> ./${ENCODE_LOG}/${DATE}.log
mv $TMPOUT $OUTPUT
fi
exit $status
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment