All pastes #1852289 Raw Edit

Zoolooc

public shellscript v1 · immutable
#1852289 ·published 2010-03-25 23:32 UTC
rendered paste body
#!/bin/bashTARGETDIR="/mnt/other/MediaPool/Media/Video/tests"INFOFILE="/tmp/~ffmpeg_info.txt"DEBUG=1ffmpeg -i 00001.ts 2>$INFOFILE# collect stream types, formats and languages to demux everythingpref_lng="deu"pref_fmt="ac3"idx=0id_video_str=-1id_pref_aud=-1for key in $(cat $INFOFILE | grep 'Stream #0.' | cut -f1 -d"[" | sed "s:Stream ::"); do	stream[${idx}]="$(cat $INFOFILE | grep $key)"	if [[ $DEBUG = 1 ]]; then		# this line only for debugging, when collecting a new parameter for example		echo "${stream[$idx]}"	fi	str_type[${idx}]="$(echo "${stream[$idx]}" | cut -f7 -d" " | sed "s#:##")"	str_pid[${idx}]="$(echo "${stream[$idx]}" | cut -f6 -d" " | cut -f2 -d "[" |  cut -f1 -d "]")"	str_fmt[${idx}]="$(echo "${stream[$idx]}" | cut -f8 -d" " | sed "s#,##")"	if ! [[ "${str_type[$idx]}" = "Video" ]]; then		str_lng[${idx}]="$(echo "${stream[$idx]}" | cut -f6 -d" " | cut -f2 -d '(' |  cut -f1 -d ')')"		if [[ "${str_lng[$idx]}" = "" ]]; then			str_lng[${idx}]="und"		fi	else		id_video_str=$idx	fi	# increment iterator index	idx=$((idx+1))done# build demux command line templatedmx_cmd="ffmpeg -i \$1"function track_filename() {	echo "\${1%.*}_${str_type[$1]}_${str_pid[$1]}_${str_lng[$1]}.${str_fmt[$1]}"}for idx in ${!stream[*]}; do	# for debugging only:	if [[ $DEBUG = 1 ]]; then		echo "Found stream at index $idx: of type '${str_type[$idx]}', pid '${str_pid[$idx]}', format '${str_fmt[$idx]}', language '${str_lng[$idx]}'"	fi	#dmx_name_map="\${1%.*}_${str_type[$idx]}_${str_pid[$idx]}_${str_lng[$idx]}.${str_fmt[$idx]} -map 0:$idx"	dmx_name_map="$(track_filename $idx) -map 0:$idx"	case ${str_type[$idx]} in		Video)			cmdline_stream="-vcodec copy $dmx_name_map"			;;		Audio)			cmdline_stream="-acodec copy $dmx_name_map"			;;#		Subtitle)#			cmdline_stream="-scodec ${str_fmt[$idx]} \${1%.*}_${str_type[$idx]}_${str_pid[$idx]}_${str_lng[$idx]}.vob -map 0:$idx"#			;;		*)			cmdline_stream=""			;;	esac	if ! [[ "$cmdline_stream" = "" ]]; then		dmx_cmd="$dmx_cmd $cmdline_stream"	fidone# for debugging only:if [[ $DEBUG = 1 ]]; then	echo "total number of streams: ${#stream[*]}"	echo "demuxing command line: $dmx_cmd"fifunction demux_recpart() {	eval $dmx_cmd}# build mkvmerge commandrm -f $TARGETDIR/output.mkvmkv_cmd="mkvmerge -o $TARGETDIR/output.mkv --language 1:ger --default-duration 0:50fps"function add_2_mkv_cmd() {	local delimiter	local track_count=0	if [[ "$idxmkv" = "0" ]]; then		delimiter=" "		mkv_trackorder="${mkv_trackorder}0:0,1:0"	else		delimiter=" +"		if ! [[ "$idxmkv" = "1" ]]; then			mkv_append="$mkv_append,"		fi	fi	for track in ${!stream[*]}; do		if [[ "${str_type[$track]}" = "Video" ]]; then			tracks="$delimiter$(track_filename $track)"			track_count=$((track_count+1))		fi		if [[ "${str_type[$track]}" = "Audio" ]] && [[ "${str_fmt[$track]}" = "ac3" ]]; then			tracks="$tracks $delimiter$(track_filename $track)"			track_count=$((track_count+1))		fi		# increment iterator index		track=$((track+1))	done	# careful with this	mkv_cmd="$mkv_cmd $(eval echo "${tracks}")"	if ! [[ "$idxmkv" = "0" ]]; then		mkv_append="$mkv_append$((idxmkv*track_count+0)):0:$((idxmkv*track_count-track_count)):0,$((idxmkv*track_count+1)):0:$((idxmkv*track_count-track_count+1)):0"	fi	# increment iterator index	idxmkv=$((idxmkv+1))}idxmkv=0mkv_trackorder="--track-order "mkv_append=""for tsfile in $(ls [0-9][0-9][0-9][0-9][0-9].ts); do	demux_recpart $tsfile	add_2_mkv_cmd $tsfiledonemkv_cmd="$mkv_cmd $mkv_trackorder"if ! [[ "$mkv_append" = "" ]]; then	mkv_cmd="$mkv_cmd --append-to $mkv_append"fiif [[ $DEBUG = 1 ]]; then	echo ""	echo "$mkv_cmd"fi$mkv_cmd