-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaacpipe
executable file
·82 lines (73 loc) · 2.92 KB
/
aacpipe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env bash
## This is because I am lazy and I cannot ever remember all the flags to make ffmpeg shut the fuck up and opusenc read from stdin
## It can only do one track, so if you have more than one you have to tell it which one to do
# Check for tool dependencies
SELF_FULLPATH=`realpath $0`
SELF_DIR=`dirname $SELF_FULLPATH`
# Override default tool list
TOOLS=(ffmpeg fdkaac jq base64 bc sed mediainfo column)
# Does not depend on any other scripts
SCRIPTS=NONE
if [ ! -r $SELF_DIR/toolchecker ]; then
echo "toolchecker not found."
exit 1
else
. $SELF_DIR/toolchecker
fi
if [ -z "$1" ]; then
echo "No input provided."
echo "${0} input output [track num]"
exit 1
fi
if [ -z "$2" ]; then
echo "No output provided."
echo "${0} input_file output_file [track num]"
exit 1
fi
INPUT="$1"
OUTPUT="$2"
if [ -z "$3" ]; then
TRACKNUM=0
else
case $3 in
''|*[!0-9]*)
echo "Track number should be a number"
exit 1;;
*)
TRACKNUM=$3
MITRACKNUM=`echo $3 + 1 | bc`;;
esac
fi
NL=$'\n'
TRACK=`$MEDIAINFO --output=JSON "$INPUT" | $JQ -r ".media.track[${MITRACKNUM}] | @base64"`
TRACK_TYPE=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.["@type"]'`
TRACK_NUMBER=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.StreamOrder'`
TRACK_CODEC=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.CodecID'`
TRACK_BITRATE=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.BitRate'`
TRACK_LAYOUT=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.ChannelLayout'`
[ "${TRACK_LAYOUT}" == null ] && TRACK_LAYOUT=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.ChannelLayout_Original'`
TRACK_CHANNELS=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.Channels'`
TRACK_CHANNELS_ORIGINAL=`echo "${TRACK}" | ${BASE64} --decode | ${JQ} -r '.Channels_Original'`
[ "${TRACK_CHANNELS_ORIGINAL}" != null ] && TRACK_CHANNELS=${TRACK_CHANNELS_ORIGINAL}
TRACK_COMPMODE=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.Compression_Mode'`
TRACK_FORMAT=`echo "${TRACK}" | $BASE64 --decode | $JQ -r '.Format'`
if [ ! "$TRACK_TYPE" == "Audio" ]; then
echo "Track ${TRACKNUM} is not an audio track"
exit 1
fi
TRACK_META="${TRACK_NUMBER},${TRACK_CODEC},${TRACK_BITRATE},${TRACK_CHANNELS},${TRACK_LAYOUT},${TRACK_FORMAT},${TRACK_COMPMODE}${NL}"
echo
echo "Input Audio Track"
echo "------------------"
echo "Track,Codec,BitRate,Channels,Layout,Format,CompMode${NL}${TRACK_META}" | $COLUMN -t -s, -o " | "
echo
#BR=$(echo "$TRACK_LAYOUT" | $SED -e 's~Rss\|Lss\|Rb\|Lb\|Rs\|Ls\|LFE~64~g' -e 's~M\|Cb\|C\|L\|R~128~g' -e 's~\ ~\+~g' | $BC)
OUTPUT_TRACK_META="aac,(mode 5),${TRACK_CHANNELS},${TRACK_LAYOUT}${NL}"
echo
echo "Output Audio Track"
echo "------------------"
echo "Codec,BitRate,Channels,Layout${NL}${OUTPUT_TRACK_META}" | $COLUMN -t -s, -o " | "
echo
set -x
$FFMPEG -hide_banner -loglevel error -i "${INPUT}" -map 0:${TRACKNUM} -map_metadata -1 -map_chapters -1 -f wav - | $FDKAAC --bitrate-mode 5 -o ${OUTPUT} -
{ set +x; } 2>/dev/null