Skip to content

Instantly share code, notes, and snippets.

@jneves
Created May 9, 2015 12:04
Show Gist options
  • Save jneves/6d6043e76cb9c8d67d2d to your computer and use it in GitHub Desktop.
Save jneves/6d6043e76cb9c8d67d2d to your computer and use it in GitHub Desktop.
convert_to_chromecast.sh
#! /bin/bash
# Configuration
ACCEPTED_CONTAINER_FORMATS=MPEG-4
ACCEPTED_VIDEO_FORMATS=AVC
ACCEPTED_VIDEO_PROFILES="[email protected] [email protected] [email protected]"
ACCEPTED_AUDIO_FORMATS=AAC
DEBUG=0
# Just code, not configurable
USAGE="Usage: $0 file1 file2 file3 ... fileN"
if [ "$#" == "0" ]; then
echo "$USAGE"
exit 1
fi
function transcode_file {
FILE_NAME=$1
if [ ${DEBUG} ]; then
echo "Transcoding file: ${FILE_NAME}"
fi
if [ ! -e ${FILE_NAME} ]; then
echo "File '${FILE_NAME}' does not exist, skipping."
return
fi
CONTAINER_FORMAT=`mediainfo '--output=General;%Format%' ${FILE_NAME}`
if [[ ${ACCEPTED_CONTAINER_FORMATS} =~ (^| )${CONTAINER_FORMAT}($| ) ]]; then
PRESERVE_CONTAINER=1
else
PRESERVE_CONTAINER=0
fi
if [ ${DEBUG} ]; then
echo "Running: mediainfo '--output=Video;%Format%' ${FILE_NAME}"
echo "Getting:" `mediainfo '--output=Video;%Format%' ${FILE_NAME}`
fi
VIDEO_FORMAT=`mediainfo '--output=Video;%Format%' ${FILE_NAME}`
if [[ ${ACCEPTED_VIDEO_FORMATS} =~ (^| )${VIDEO_FORMAT}($| ) ]]; then
if [ ${VIDEO_FORMAT} == "AVC" ]; then
VIDEO_PROFILE=`mediainfo --output='Video;%Codec_Profile%;%Codec profile%' ${FILE_NAME}`
if [[ ${ACCEPTED_VIDEO_PROFILES} =~ (^| )${VIDEO_PROFILE}($| ) ]]; then
PRESERVE_VIDEO=1
else
PRESERVE_VIDEO=0
fi
else
PRESERVE_VIDEO=1
fi
fi
AUDIO_FORMAT=`mediainfo '--output=Audio;%Format%' ${FILE_NAME}`
if [[ ${ACCEPTED_AUDIO_FORMATS} =~ (^| )${AUDIO_FORMAT}($| ) ]]; then
PRESERVE_AUDIO=1
else
PRESERVE_AUDIO=0
fi
if [ ${DEBUG} ]; then
echo "PRESERVE_CONTAINER:" ${PRESERVE_CONTAINER} "."
echo "PRESERVE_VIDEO:" ${PRESERVE_VIDEO} "."
echo "PRESERVE_AUDIO:" ${PRESERVE_AUDIO} "."
fi
if [ ${PRESERVE_CONTAINER} -eq 1 ] && [ ${PRESERVE_VIDEO} -eq 1 ] && [ ${PRESERVE_AUDIO} -eq 1 ]; then
# Nothing to be done, file is acceptable
if [ ${DEBUG} ]; then
echo "Already processed!"
fi
return
fi
OPTIONS="" #TODO: Make ffmpeg less noisy
if [ x${PRESERVE_VIDEO} == x1 ]; then
OPTIONS="${OPTIONS} -vcodec copy"
fi
if [ x${PRESERVE_AUDIO} == x1 ]; then
OPTIONS="${OPTIONS} -acodec copy"
fi
if [ ${DEBUG} ]; then
echo "Running: ffmpeg -i ${FILE_NAME} ${OPTIONS} ${FILE_NAME}.mp4"
fi
ffmpeg -i ${FILE_NAME} ${OPTIONS} ${FILE_NAME}.mp4
}
while (( "$#" )); do
transcode_file $1
shift
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment