iPad H.264

Artifact [65fa628103]
Login

Artifact [65fa628103]

Artifact 65fa62810371d4047b74bdcad227269504b5c202:


#!/bin/bash
if [ "$1" = "-f" ]
then
	force=1
	shift
fi

for inf in "$@"
do
	level=`ffprobe -show_streams "$inf" 2> /dev/null | grep level= | head -1 | cut -f2 -d=`
	if [ -z "$force" ] && [ -n "$level" ] &&
			[ ! "$level" -gt 41 ] &&
			ffprobe -show_streams "$inf" 2> /dev/null | grep -q codec_name=h264
	then
		echo
		echo `basename "$inf"` "is already in H.264 format, <= High@L4.1!"
		if mediainfo "$inf" | grep -iq ': Quicktime$'
		then
			echo "...but it will have to be remuxed to MP4"

			movf="${inf%.*}".mov
			if [ "$inf" != "$movf" ]
			then
				mv "$inf" "$movf"
			fi
			inf=

			if mediainfo "$mmvf" | grep -iq 'Format.* : AAC$'
			then
				remuxer=remux-mp4
			else
				remuxer=remux-mp4-aac
				echo "...and its audio must be transcoded to AAC"
			fi
			echo

			movbn=$(basename "$movf")
			( cd "$(dirname "$movf")" ;
			  $remuxer "$movbn" &&
			  rmtrash "$movbn"
			)

			inf="${movf%.*}".mp4
		fi

		if [ -n "$inf" ]
		then
			echo
			open "$inf"     # send video to Subler for [re]tagging
		fi
		# else, we landed in the remux case above and it failed, so
		# don't open the problem file with Subler
	elif [ -e "$inf" ]
	then
		actual=$(mediainfo "$inf" | grep "Format profile.*@" | cut -f2 -d:)
		echo `basename "$inf"` "was encoded at $actual; transcoding..."

		# Extract existing artwork first.  Yes, -E goes at end.  :rolleyes:
		cover=$(atomicparsley "$inf" -E)
		if [ -n "$cover" ]
		then
			cover=$(echo "$cover" | cut -f5- -d' ')
			echo No cover art in \"$inf\".
		fi

		# Do the transcode
		tmpf="$inf".tmp
		if ffmpeg -i "$inf" -pix_fmt yuv420p \
				-c:v libx264 -profile:v main -level 4.1 -crf 18 -coder 0 \
				-c:a aac -ab 128k \
				-f mp4 "$tmpf"
		then
			# Overwrite original with transcode.  Don't bother trying to
			# put the cover art back.  It doesn't seem to work right,
			# and this process already requires an Subler pass to
			# restore other things.  We'll use the saved art then.
			#
			# The mv target syntax ensures that if the input file name
			# wasn't *.mp4 that it gets renamed.  Yes, this means we
			# break any references to *.m4v, but that's the wrong
			# extension to use for an MPEG-4 systems file.
			outf="${inf%.*}.mp4"
			mv "$tmpf" "$outf"
			open "$outf"
		else
			rmtrash "$tmpf"
		fi
	fi
done