Files
shtemaran/bin/avi2mp4.sh
2022-11-17 23:17:11 +00:00

160 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
function setTitle(){
KEY="$1"
NFO="${KEY}.nfo"
if [ -f "$NFO" ]; then
TITLE=$(xmllint --xpath 'string(//title)' "$NFO")
YEAR=$(xmllint --xpath 'string(//year)' "$NFO")
fi
if [ -n "$TITLE" ]; then
echo "Setting title to '$TITLE'"
$RUN mkvpropedit --set title="$TITLE" "$MKV"
fi
# [ -n "$YEAR" ] && mkvpropedit --set year="$YEAR" "$MKV"
}
function appendMainInput() {
IN="$1"
CMD+=" -i \"${IN}\""
MAIN_INPUT_ID=$INPUT_ID
INPUT_ID=$((INPUT_ID+1))
}
function appendMainInputMapping() {
if [ -n "$MAIN_INPUT_ID" ]; then
CMD+=" -map $MAIN_INPUT_ID -c copy"
fi
}
function appendSrt() {
KEY="$1"
SRT="${KEY}.srt"
if [ -f "$SRT" ]; then
echo "Adding SRT: $SRT".
CMD+=" -i \"${SRT}\""
SRT_INPUT_ID=$INPUT_ID
INPUT_ID=$((INPUT_ID+1))
fi
}
function appendSrtMapping() {
if [ -n "$SRT_INPUT_ID" ]; then
echo "Mapping SRT: $SRT_INPUT_ID".
CMD+=" -map $SRT_INPUT_ID -c:s mov_text -metadata:s:s:0 language=eng"
fi
}
function addCover(){
KEY="$1"
COVER="${KEY}-poster.jpg"
if [ ! -f "$COVER" ]; then
COVER="${KEY}.jpg"
fi
if [ -f "$COVER" ]; then
# convert "$COVER" -resize 600x /tmp/cover.jpg
echo "Attaching cover '$COVER'"
ACMD+=" --artwork \"${COVER}\""
fi
}
function addTitle(){
KEY="$1"
NFO="${KEY}.nfo"
if [ -f "$NFO" ]; then
TITLE=$(xmllint --xpath 'string(//title)' "$NFO")
fi
if [ -n "$TITLE" ]; then
echo "Setting title to '$TITLE'"
ACMD+=" --title \"$TITLE\""
fi
}
function addYear(){
KEY="$1"
NFO="${KEY}.nfo"
if [ -f "$NFO" ]; then
YEAR=$(xmllint --xpath 'string(//year)' "$NFO")
fi
if [ -n "$TITLE" ]; then
echo "Setting year to '$YEAR'"
ACMD+=" --year $YEAR"
fi
}
function mkvAddSub() {
MKV="$1"
IDX="${KEY}.idx"
SUB="${KEY}.sub"
if [ -f "$SUB" ]; then
OUT="${KEY}.SUB.mkv"
echo "Adding SUB: $OUT".
OUT+=" -i '$SRT' -map $INPUT_ID -c:s mov_text -metadata:s:s:1 language=eng"
$RUN ffmpeg -y -i "$MKV" -i "$IDX" -i "$SUB" -map 0 -c copy -map 1 -c:s:1 dvd_subtitle -f matroska "$OUT"
INPUT_ID=$((INPUT_ID+1))
fi
}
ARGS=$(getopt -o 'nas' -- "$@") || exit
eval "set -- $ARGS"
RUN=eval
ADD_SRT=1
while true; do
case $1 in
-n)
RUN=echo
;;
-a)
ADD_AAC=1
;;
-s)
ADD_SRT=1
;;
--)
shift
break
;;
*)
exit 1
;;
esac
shift
done
INPUT="$1"
INPUT_ID=0
KEY="${INPUT%.*}"
OUT="${KEY}.mp4"
CMD="ffmpeg"
appendMainInput "$INPUT"
if [ -n "$ADD_SRT" ]; then
appendSrt "$KEY"
# appendSub "$KEY"
fi
appendMainInputMapping
# setTitle "$KEY"
appendSrtMapping
CMD+=" \"${OUT}\""
$RUN "$CMD"
addTitle "$KEY"
addYear "$KEY"
addCover "$KEY"
if [ -n "$ACMD" ]; then
TMPOUT="${KEY}.tmp.mp4"
$RUN "mv \"${OUT}\" \"${TMPOUT}\" "
$RUN "AtomicParsley \"${TMPOUT}\" $ACMD --output \"${OUT}\""
fi