1. #!/bin/bash
  2. # For DEBUG Output - can be left since logfiles are deleted when job finishes
  3. set -x
  4. # To make the script exit whenever a command fails (MUST NOT BE REMOVED)
  5. set -e
  6. # environment variables set by the burn plugin:
  7. # RECORDING_PATH (demux, recordingmark, dmharchive)
  8. # Path of VDR recording (/video0/%Bla/2004-01-...rec)
  9. # MPEG_TMP_PATH (demux, mplex)
  10. # a linux filesystem where fifos are created
  11. # MPEG_DATA_PATH (demux, mplex)
  12. # Path where streams and movie are stored
  13. # VIDEO_FILE (requant, mplex)
  14. # Full path- and filename of demuxed video stream
  15. # AUDIO_FILES (mplex)
  16. # Space-separated list of demuxed audio streams
  17. # MOVIE_FILE (mplex)
  18. # Full path- and filename of muxed movie
  19. # REQUANT_FACTOR (requant)
  20. # Factor by that video shall be shrinked
  21. # IGNORE_TRACKS (demux)
  22. # Comma-separated list of audio track IDs to be ignored
  23. # USED_TRACKS (demux)
  24. # Comma-separated list of audio track IDs to be used
  25. # DVDAUTHOR_XML (author)
  26. # Full path- and filename of the DVDAuthor XML
  27. # DVDAUTHOR_PATH (author, burn, dmharchive, archivemark)
  28. # Full path of the written DVD structure
  29. # TRACK_ON_DVD (dmharchive)
  30. # Number of track on dvd in which VDR recording is saved (2 digits)
  31. # ISO_FILE (burn, pipe, author)
  32. # Full path- and filename of target ISO
  33. # ISO_PIPE (burn, pipe)
  34. # Fifo where the created ISO should be piped into
  35. # DVD_DEVICE (burn, author)
  36. # Full path- and filename of the DVD burner device
  37. # CONFIG_PATH (pipe, recordingmark, archivemark, demux, dmharchive)
  38. # Full path to burn's config directory
  39. # TEMP_PATH (dmharchive)
  40. # Full path to burn's temp directory (namely the same as $MPEG_TMP_PATH)
  41. # GRAFT_POINTS (burn, pipe)
  42. # DISC_ID (burn, pipe)
  43. # BURN_SPEED (burn)
  44. # USE_CUTTING (demux)
  45. # REQUANT_FILE (requant)
  46. # VIDEO_SIZE (requant)
  47. # MENU_BACKGROUND (render)
  48. # MENU_SOUNDTRACK (render)
  49. # MENU_XML (render)
  50. # MENU_M2V (render)
  51. # MENU_MPEG (render)
  52. # Some versions of growisofs refuse to start when run with sudo, and may
  53. # misdetect this condition if vdr itself is started from a sudo session.
  54. unset SUDO_COMMAND
  55. echo "Script invokation: $*"
  56. IO_NICE=$(which ionice >/dev/null 2>&1 && echo "ionice -c 3")
  57. case $1 in
  58. render)
  59. ASPECT="-a 3" # 16:9
  60. [ "z$MENU_ASPECT" = "z4:3" ] && ASPECT="-a 2" # 4:3
  61. png2yuv -j "$MENU_BACKGROUND" -f 25 -n 1 -I t -L 1 | \
  62. mpeg2enc -f 8 -n p $ASPECT -o "$MENU_M2V"
  63. mplex -f 8 -o /dev/stdout "$MENU_M2V" "$MENU_SOUNDTRACK" | \
  64. spumux -v 2 "$MENU_XML" > "$MENU_MPEG"
  65. ;;
  66. demux)
  67. [ -r $CONFIG_PATH/vdrburn-dvd.conf ] && . $CONFIG_PATH/vdrburn-dvd.conf
  68. [ -z "$JAVA_EXE" ] && JAVA_EXE=$(which java)
  69. [ ! -x "$JAVA_EXE" ] && echo "ERROR: java executable \"$JAVA_EXE\" not found" && exit 1
  70. [ ! -r "$PROJECTX_JAR" ] && echo "ERROR: Project X jar file \"$PROJECTX_JAR\" not found" && exit 1
  71. test -e "$MPEG_TMP_PATH/convert" && rm "$MPEG_TMP_PATH/convert"
  72. ln -s "$RECORDING_PATH" "$MPEG_TMP_PATH/convert"
  73. CUT=""
  74. if [ ! -z $USE_CUTTING ]; then
  75. CUT="-cut $MPEG_DATA_PATH/px.cut"
  76. fi
  77. $IO_NICE $JAVA_EXE -Djava.awt.headless=true \
  78. -jar $PROJECTX_JAR \
  79. -ini $CONFIG_PATH/ProjectX.ini \
  80. $TTXT_OPTS \
  81. $CUT -id $USED_TRACKS \
  82. -demux -out "$MPEG_DATA_PATH" -name vdrsync \
  83. $(ls "$MPEG_TMP_PATH/convert/"[0-9][0-9][0-9]*.*)
  84. ;;
  85. requant)
  86. REQUANT_FACTOR=$(echo "$REQUANT_FACTOR" | tr ',' '.')
  87. echo requant $REQUANT_FACTOR 3 $VIDEO_SIZE
  88. $IO_NICE requant $REQUANT_FACTOR 3 $VIDEO_SIZE < "$VIDEO_FILE" > "$REQUANT_FILE"
  89. rm -f "$VIDEO_FILE"
  90. ;;
  91. tcrequant)
  92. REQUANT_FACTOR=$(echo "$REQUANT_FACTOR" | tr ',' '.')
  93. echo tcrequant -f $REQUANT_FACTOR
  94. $IO_NICE tcrequant -f $REQUANT_FACTOR < "$VIDEO_FILE" > "$REQUANT_FILE"
  95. rm -f "$VIDEO_FILE"
  96. ;;
  97. lxrequant)
  98. echo requant_lxdvdrip -f $REQUANT_FACTOR
  99. $IO_NICE requant_lxdvdrip -f $REQUANT_FACTOR -i "$VIDEO_FILE" -o "$REQUANT_FILE"
  100. rm -f "$VIDEO_FILE"
  101. ;;
  102. mplex)
  103. MPLEX_OPTS="-S 0"
  104. (mplex -h 2>&1 | grep -q -- --ignore-seqend-markers) && \
  105. MPLEX_OPTS="$MPLEX_OPTS -M"
  106. #echo mplex -f 8 $MPLEX_OPTS -o "$MOVIE_FILE" "$VIDEO_FILE" $AUDIO_FILES
  107. $IO_NICE mplex -f 8 $MPLEX_OPTS -o "$MOVIE_FILE" "$VIDEO_FILE" $AUDIO_FILES
  108. rm -f "$VIDEO_FILE" $AUDIO_FILES
  109. ;;
  110. subtitle)
  111. #echo SPUMUX_FILE $SPUMUX_FILE
  112. #echo MOVIE_FILE $MOVIE_FILE
  113. #echo SUBTITLED_FILE $SUBTITLED_FILE
  114. #echo NUMBER $NUMBER
  115. #echo TTXTPAGE $TTXTPAGE
  116. SON=$(find "$MPEG_DATA_PATH" -name \*${TTXTPAGE}\*.son)
  117. SRT=$(find "$MPEG_DATA_PATH" -name \*${TTXTPAGE}\*.srt)
  118. SUP=$(find "$MPEG_DATA_PATH" -name \*${TTXTPAGE}\*.sup)
  119. if [ "!" "x$SON" = "x" ]; then
  120. echo found SON files: $SON
  121. find "$MPEG_DATA_PATH" -name \*${TTXTPAGE}\*.son | while read SPUFILE ; do
  122. # spumux.xml generation is based on son2spumux.sh: http://brigitte.dna.fi/~apm/
  123. echo "<subpictures>" > "$SPUMUX_FILE"
  124. echo " <stream>" >> "$SPUMUX_FILE"
  125. cat "$SPUFILE" | tail -n +11 | while read l1
  126. do
  127. read l2 || exit 1
  128. x=`echo $l1 | cut -f2 -d\( | awk '{printf("%d", $1);}'`
  129. y=`echo $l1 | cut -f2 -d\( | awk '{printf("%d", $2);}'`
  130. t1=`echo $l2 | awk '{t1=substr($2,1,8); t2=substr($2,10,2); printf("%s.%s", t1, t2);}'`
  131. t2=`echo $l2 | awk '{t1=substr($3,1,8); t2=substr($3,10,2); printf("%s.%s", t1, t2);}'`
  132. i=`echo $l2 | awk '{printf("%s", $NF);}'`
  133. echo " <spu start=\"$t1\"" >> "$SPUMUX_FILE"
  134. echo " end=\"$t2\"" >> "$SPUMUX_FILE"
  135. echo " image=\"$MPEG_DATA_PATH/$i\"" >> "$SPUMUX_FILE"
  136. echo " xoffset=\"$x\" yoffset=\"$y\"" >> "$SPUMUX_FILE"
  137. echo " transparent=\"000060\" />" >> "$SPUMUX_FILE"
  138. done
  139. echo " </stream>" >> "$SPUMUX_FILE"
  140. echo "</subpictures>" >> "$SPUMUX_FILE"
  141. done
  142. elif [ "!" "x$SRT" = "x" ]; then
  143. echo found SRT files: $SRT
  144. echo "<subpictures>" > "$SPUMUX_FILE"
  145. echo " <stream>" >> "$SPUMUX_FILE"
  146. echo " <textsub filename=\"$SRT\" characterset=\"ISO8859-1\"" >> "$SPUMUX_FILE"
  147. echo " fontsize=\"28.0\" font=\"arial.ttf\" horizontal-alignment=\"center\"" >> "$SPUMUX_FILE"
  148. echo " vertical-alignment=\"bottom\" left-margin=\"60\" right-margin=\"60\"" >> "$SPUMUX_FILE"
  149. echo " top-margin=\"20\" bottom-margin=\"30\" subtitle-fps=\"25\"" >> "$SPUMUX_FILE"
  150. echo " movie-fps=\"25\" movie-width=\"720\" movie-height=\"574\"" >> "$SPUMUX_FILE"
  151. echo " />" >> "$SPUMUX_FILE"
  152. echo " </stream>" >> "$SPUMUX_FILE"
  153. echo "</subpictures>" >> "$SPUMUX_FILE"
  154. elif [ "!" "x$SUP" = "x" ]; then
  155. echo found SUP files: $SUP
  156. pxsup2dast "${SUP}" "${SUP}.IFO"
  157. mv "${SUP%sup}d/spumux.xml" "$SPUMUX_FILE"
  158. fi
  159. $IO_NICE spumux -s $NUMBER -v 2 "$SPUMUX_FILE" < "$MOVIE_FILE" > "$SUBTITLED_FILE"
  160. ;;
  161. author)
  162. $IO_NICE dvdauthor -x "$DVDAUTHOR_XML"
  163. ;;
  164. dmharchive)
  165. echo "Creating $TEMP_PATH/INDEX_${TRACK_ON_DVD}"
  166. mkdir -p "$TEMP_PATH/INDEX_${TRACK_ON_DVD}"
  167. cd "$DVDAUTHOR_PATH/VIDEO_TS/"
  168. for i in $(seq 1 99) ; do
  169. if [ -f "VTS_${TRACK_ON_DVD}_$i.VOB" ] ; then
  170. vdr_file=`printf "%03d.vdr" $i`
  171. echo "Linking $DVDAUTHOR_PATH/VIDEO_TS/VTS_${TRACK_ON_DVD}_$i.VOB -> $TEMP_PATH/INDEX_${TRACK_ON_DVD}/$vdr_file"
  172. ln -s "$DVDAUTHOR_PATH/VIDEO_TS/VTS_${TRACK_ON_DVD}_$i.VOB" "$TEMP_PATH/INDEX_${TRACK_ON_DVD}/$vdr_file"
  173. else
  174. break
  175. fi
  176. done
  177. cd "$TEMP_PATH/INDEX_${TRACK_ON_DVD}"
  178. genindex
  179. if [ "$?" != "0" ] ; then
  180. exit 1
  181. fi
  182. cd "$RECORDING_PATH"
  183. RECDIR=$(basename $(pwd))
  184. cd ..
  185. UPPERRECDIR=$(basename $(pwd))
  186. cd ..
  187. RECPATH=$(pwd)
  188. RECORDING_DMH="$RECPATH"/"$UPPERRECDIR"_DVD/"$RECDIR"
  189. mkdir -p "$RECORDING_DMH"
  190. # Old style Records ("index.vdr")
  191. if [ -f "$RECORDING_PATH/index.vdr" ]; then
  192. echo "Copying $TEMP_PATH/INDEX_${TRACK_ON_DVD}/index.vdr -> "$RECORDING_DMH"/index.vdr"
  193. cp "$TEMP_PATH/INDEX_${TRACK_ON_DVD}/index.vdr" "$RECORDING_DMH"/index.vdr
  194. # New style Records ("index")
  195. elif [ -f "$RECORDING_PATH/index" ]; then
  196. echo "Copying $TEMP_PATH/INDEX_${TRACK_ON_DVD}/index.vdr -> "$RECORDING_DMH"/index"
  197. cp "$TEMP_PATH/INDEX_${TRACK_ON_DVD}/index.vdr" "$RECORDING_DMH"/index
  198. fi
  199. echo "Moving $TEMP_PATH/INDEX_${TRACK_ON_DVD}/index.vdr -> $DVDAUTHOR_PATH/VIDEO_TS/index_${TRACK_ON_DVD}.vdr"
  200. mv "$TEMP_PATH/INDEX_${TRACK_ON_DVD}/index.vdr" "$DVDAUTHOR_PATH/VIDEO_TS/index_${TRACK_ON_DVD}.vdr"
  201. # Old style Records ("info.vdr")
  202. if [ -f "$RECORDING_PATH/info.vdr" ]; then
  203. echo "Copying $RECORDING_PATH/info.vdr -> $RECORDING_DMH/info.vdr"
  204. cp "$RECORDING_PATH"/info.vdr "$RECORDING_DMH"/info.vdr
  205. echo "Copying $RECORDING_PATH/info.vdr -> $DVDAUTHOR_PATH/VIDEO_TS/info_${TRACK_ON_DVD}.vdr"
  206. cp "$RECORDING_PATH/info.vdr" "$DVDAUTHOR_PATH/VIDEO_TS/info_${TRACK_ON_DVD}.vdr"
  207. # New style Records ("info")
  208. elif [ -f "$RECORDING_PATH/info" ]; then
  209. echo "Copying $RECORDING_PATH/info -> $RECORDING_DMH/info"
  210. cp "$RECORDING_PATH"/info "$RECORDING_DMH"/info
  211. echo "Copying $RECORDING_PATH/info -> $DVDAUTHOR_PATH/VIDEO_TS/info_${TRACK_ON_DVD}.vdr"
  212. cp "$RECORDING_PATH/info" "$DVDAUTHOR_PATH/VIDEO_TS/info_${TRACK_ON_DVD}.vdr"
  213. fi
  214. echo "Deleting $TEMP_PATH/INDEX_${TRACK_ON_DVD}"
  215. rm -rf "$TEMP_PATH/INDEX_${TRACK_ON_DVD}"
  216. echo "Creating "$RECORDING_DMH"/dvd.vdr"
  217. cp "$CONFIG_PATH/counters/standard" "$RECORDING_DMH"/dvd.vdr
  218. printf "%04d\n" $(echo ${TRACK_ON_DVD} | sed 's/^0*//') >> "$RECORDING_DMH"/dvd.vdr
  219. ;;
  220. archivemark)
  221. echo "Creating $DVDAUTHOR_PATH/dvd.vdr"
  222. cp "$CONFIG_PATH/counters/standard" "$DVDAUTHOR_PATH/dvd.vdr"
  223. ((DVD_ID = `cat $CONFIG_PATH/counters/standard | sed "s/^0*//"` + 1))
  224. printf "%04d\n" $DVD_ID > "$CONFIG_PATH/counters/standard"
  225. ;;
  226. mkiso)
  227. $IO_NICE genisoimage -V "$DISC_ID" -dvd-video "$DVDAUTHOR_PATH" > "$ISO_FILE"
  228. ;;
  229. burndir)
  230. SPEED=""
  231. if [ $BURN_SPEED -gt 0 ]; then
  232. SPEED="-speed=$BURN_SPEED"
  233. fi
  234. $IO_NICE growisofs -use-the-force-luke=tty $SPEED -dvd-compat -Z "$DVD_DEVICE" \
  235. -V "$DISC_ID" -dvd-video "$DVDAUTHOR_PATH"
  236. ;;
  237. pipeiso)
  238. $IO_NICE genisoimage -V "$DISC_ID" -dvd-video "$DVDAUTHOR_PATH" \
  239. | tee "$ISO_FILE" > "$ISO_PIPE"
  240. ;;
  241. burniso)
  242. SPEED=""
  243. if [ $BURN_SPEED -gt 0 ]; then
  244. SPEED="-speed=$BURN_SPEED"
  245. fi
  246. $IO_NICE growisofs -use-the-force-luke=tty $SPEED -dvd-compat \
  247. -Z "$DVD_DEVICE=$ISO_PIPE"
  248. ;;
  249. *)
  250. echo "Usage: $0 {demux}"
  251. exit 1
  252. ;;
  253. esac
  254. exit $?

/usr/share/vdr-plugin-burn/vdrburn-dvd.sh