Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- usage_exit() {
- echo "Usage: $0 [options] MPL_FILE" 1>&2
- echo "" 1>&2
- echo "options:" 1>&2
- echo " -i input source file" 1>&2
- echo " -d destination dir" 1>&2
- echo " -r output video resolution (default: 1280x720)" 1>&2
- echo " -s output video aspect (default: 16:9)" 1>&2
- echo " -f output video fps (default: 29.97)" 1>&2
- echo " -v output video codec (default: libx264)" 1>&2
- echo " -a output audio codec (default: aac)" 1>&2
- echo " -t tsMuxer path" 1>&2
- exit 1
- }
- while getopts i:d:v:r:s:f:a:t: OPT
- do
- case ${OPT} in
- 'i' )
- FILE_SRC=${OPTARG}
- ;;
- 'd' )
- DIR_DEST=${OPTARG}
- ;;
- 'v' )
- TYPE_VIDEO=${OPTARG}
- ;;
- 'r' )
- RESOLUTION=${OPTARG}
- ;;
- 's' )
- ASPECT=${OPTARG}
- ;;
- 'f' )
- FPS=${OPTARG}
- ;;
- 'a' )
- TYPE_AUDIO=${OPTARG}
- ;;
- 't' )
- TSMUXER=${OPTARG}
- ;;
- *)
- usage_exit
- ;;
- esac
- done
- TSMUXER=${TSMUXER:-'/usr/bin/tsMuxeR'}
- DIR_DEST=${DIR_DEST:-'.'}
- RESOLUTION=${RESOLUTION:-'1280x720'}
- ASPECT=${ASPECT:-'16:9'}
- FPS=${FPS:-'29.97'}
- TYPE_VIDEO=${TYPE_VIDEO:-'libx264'}
- TYPE_AUDIO=${TYPE_AUDIO:-'aac'}
- DIR_TEMP='.mts_parser'
- rm -rf ${DIR_TEMP}
- mkdir ${DIR_TEMP}
- cd ${DIR_TEMP}
- ${TSMUXER} ${FILE_SRC} | \
- grep -E '^(File|Marks).+' | \
- perl -pe 's/\n/,/g' | \
- perl -pe 's/,File/\nFile/g' | \
- perl -pe 's/Marks:\s+(.+)/Marks=$1/g' |
- perl -pe 's/^File.+name=(.+)/File=$1/g' |
- tr -d ' ' > mts.info
- ID_VIDEO=$(\
- ${TSMUXER} ${FILE_SRC} | \
- grep -B 1 -E "Stream\s*type:\s*H\.264" | \
- head -n 1 | sed -e 's/\s\+//g' | cut -d: -f2)
- ID_AUDIO=$(\
- ${TSMUXER} ${FILE_SRC} | \
- grep -B 1 -E "Stream\s*type:\s*AC3" | \
- head -n 1 | sed -e 's/\s\+//g' | cut -d: -f2)
- FFMPEG_OPT_BASE="-profile:v baseline -level:v 3.1"
- FFMPEG_OPT_VIDEO="-vcodec ${TYPE_VIDEO} -s ${RESOLUTION} -aspect ${ASPECT} -vf fps=${FPS}"
- FFMPEG_OPT_AUDIO="-acodec ${TYPE_AUDIO} -strict experimental"
- FFMPEG_OPT="${FFMPEG_OPT_BASE} ${FFMPEG_OPT_VIDEO} ${FFMPEG_OPT_AUDIO}"
- FILES=()
- COUNT=0
- cat mts.info | while read LINE
- do
- if [ $(echo ${LINE} | grep -c Marks) -gt 0 ]; then
- if [ ${#FILES[@]} -gt 0 ]; then
- NUMBER=$(printf '%03d' ${COUNT})
- BASE=${FILES[0]}
- if [ ${#FILES[@]} -eq 1 ]; then
- echo "cp ${BASE} ${DIR_DEST}/${NUMBER}.$(basename ${BASE})" | tee -a convert.sh
- echo "ffmpeg -i ${BASE} ${FFMPEG_OPT} ${DIR_DEST}/${NUMBER}.$(basename ${BASE}).mp4" | tee -a convert.sh
- else
- echo "cat ${FILES[@]} > ${DIR_DEST}/${NUMBER}.$(basename ${BASE})" | tee -a convert.sh
- echo "ffmpeg -i ${DIR_DEST}/${NUMBER}.$(basename ${BASE}) ${FFMPEG_OPT} ${DIR_DEST}/${NUMBER}.$(basename ${BASE}).mp4" | tee -a convert.sh
- fi
- COUNT=$((${COUNT}+1))
- fi
- FILES=($(echo ${LINE} | cut -d, -f1 | cut -d= -f2))
- else
- FILES=(${FILES[@]} $(echo ${LINE} | cut -d= -f2))
- fi
- done
- chmod +x convert.sh
- . convert.sh
Add Comment
Please, Sign In to add comment