Files
mediatomb-config/mediatomb/mediatomb-transcode
2013-04-14 12:41:47 +01:00

119 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
#
# This script is used by MediaTomb for transcoding support.
#
# Basic function that will transcode any input file into the target type
# 'dvd' ffmpeg supports
video_common() {
local input="$1"
local output="$2"
exec ffmpeg -i "$input" -t dvd -y "$output"
}
# Basic function that will transcode any input file into the wav format
audio_common() {
local input="$1"
local output="$2"
exec ffmpeg -i "$input" -f s16be -y "$output"
}
transcode_matroska() {
local input="$1"
local output="$2"
local alang="$3"
local slang="$4"
audiofmt=`mediainfo --Inform="Audio;%Format%" "$1"`
vidfmt=`mediainfo --Inform="Video;%Format%" "$1"`
echo "Format: $vidfmt/$audiofmt"
if [ "$vidfmt" = "AVC" ]; then
# Already MP4, use it
outvidfmt="copy -bsf h264_mp4toannexb"
#outvidfmt="libx264 -level 41 -vpre normal"
else
outvidfmt="avc"
fi
if [ "$audiofmt" = "AAC" ]; then
outaudfmt="copy"
else
outaudfmt="libmp3lame -ab 192k"
fi
exec ffmpeg -i "$1" -vcodec $outvidfmt -acodec $outaudfmt -copyts -sameq -f mpegts -y "$2"
}
# Our "main" function below.
USAGE="
This script is used by MediaTomb for transcoding support. It can also serve as
a script to transcode various files in a format suitable for streaming directly.
Synopsis:
mediatomb-transcode [TRANSCODE FUNCTION OPTION] [GENERIC OPTIONS]
Generic Options:
-h, --help Display this help message.
-i, --input Input file that is meant to be transcoded.
-o, --output Output file that will be read back by MediaTomb.
--audio-lang Specify ISO 639 language code to use for audio.
--subtitle-lang Specify ISO 639 language code to use for subtitles.
Transcode Function Options (one is required):
--video-common Perform generic video transcoding.
--audio-common Perform generic audio transcoding.
--transcode-matroska Used in transcoding matroska files.
"
while [ "$#" -gt "0" ]
do
case "$1" in
-i|--input)
INPUT="$2"
shift; shift;
;;
-o|--output)
OUTPUT="$2"
shift; shift;
;;
--video-common)
USE_VIDEO_COMMON=1
shift
;;
--audio-common)
USE_AUDIO_COMMON=1
shift
;;
--transcode-matroska)
USE_TRANSCODE_MATROSKA=1
shift
;;
--audio-lang)
ALANG="$2"
shift; shift;
;;
--subtitle-lang)
SLANG="$2"
shift; shift;
;;
-h|--help|*)
echo "${USAGE}"
exit 1
;;
esac
done
# Perform specified function
if [ $USE_VIDEO_COMMON ]; then
video_common "$INPUT" "$OUTPUT"
elif [ $USE_AUDIO_COMMON ]; then
audio_common "$INPUT" "$OUTPUT"
elif [ $USE_TRANSCODE_MATROSKA ]; then
transcode_matroska "$INPUT" "$OUTPUT" "$ALANG" "$SLANG"
else
# Must specify one transcoding function
echo "${USAGE}"
exit 1
fi