[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ffmpeg



Am 20.01.2022 um 15:56 schrieb Friedrich Hattendorf:
Hallo Liste,


(ich weiß, dass ich hier wohl nicht ganz richtig bin, weiß aber nicht, wo es besser passt)


Ich - als blutiger Laie beim Thema Video - suche eine brauchbare Anleitung, um *.mov in *.mp4 oder *.ogv zu konvertieren. Um die die man-page von ffmpeg zu verstehen, fehlen mir einfach zu viele Grundkenntnisse

Ich konvertiere meine SAT-Receiver-ts-Dateien automatisiert in mp4 mit einem shell-Script. Das könntest du auf die Dateiendung .mov anpassen, wenn du die entsprechenden shell-Kenntnisse hast.

Auf meinem 6-Kerner mit Hyperthreading lasse ich es so laufen:
./ts_2_mp4_automated_v16.bash 12

Die ts-Dateien liegen im gleichen Verzeichnis wie das Script.

Gruss

Rolf


Hier mein Script:


!/bin/bash


# usage:    script number_of_threads


# find out which stream ist the video
# find out which stream to map for audio

# 1280 with -b:v 3000k
# 720  with -b:v 2000k

# stereo with -b:a 160k
# 5.1 ac3 with -acodec copy


usage="$0 no_of_CPU-cores"

if [ $# != 1 ] ;
   then
echo "Error calling this script. Wrong number of arguments. Run this script like this:"
     echo $usage
     exit 1
fi

if echo $1 | grep '[^0-9]' > /dev/null 2>&1 ;
   then
echo "Error calling this script. First argument is not a number. Run this script like this:"
     echo $usage
     exit 2
fi


date > starttime.txt


# avconv -i ts.ts > ts_-i.output

rm mapv mapa

echo '#!/bin/bash' > all_files_vlc_at_the_same_time.bash

echo 'vlc ' >> all_files_vlc_at_the_same_time.bash


basefiles=.ts

for fname in *$basefiles
   do
     base=`basename $fname $basefiles`
     if [ -s $fname -a ! -s ${base}.mp4 ];
        then
          echo ">>> >>> >>> next convert " $fname " <<< <<< <<<"
          # RR: decide video options

          # if 1280	VIDEO_RATE = "3000k "
          # else		VIDEO_RATE = "2000k "

          ffprobe -show_format $fname &> ${base}.avprobed

          # in future also 1980x....
VIDEO_RATE=`awk '{if ($1=="Stream" && $3=="Video:") {print "0:" substr($2,4,1) > "mapv"; print;}}' ${base}.avprobed | awk '/1280x720/{print "3000k";exit;}{print "2000k"}'`

          echo "VIDEO_RATE is " $VIDEO_RATE
          echo "video stream is " `cat mapv`
          VIDEO_MAP=`cat mapv`

          #decide audio options

          # if 5.1	AUDIO_OPTION = "-acodec copy "
# else AUDIO_OPTION = "-acodec libvo_aacenc -ar 48000 -b:a 160k "

          # AUDIO_OPTION=`


awk '{if ($1=="Stream" && $3=="Audio:") {print;}}' ${base}.avprobed > "all_audio_streams"

is_5_1=`awk 'BEGIN{is5_1=0;}/5.1/{print "0:" substr($2,4,1) > "mapa";print"1";is5_1=1;exit;}END{if(is5_1=="0"){print"0";}}' all_audio_streams `

          echo "is5_1 is " $is_5_1




          #  problems:  if [ $is_5_1 -eq "1" ]; then
	 if [ "$is_5_1" == "1" ]; then

            AUDIO_OPTION="-acodec copy "

          else

sort -k 9 all_audio_streams | head -1 | awk '{print "0:" substr($2,4,1) > "mapa";}'


	 # this has to be installed:     apt-get install libavcodec-extra-54
          # AUDIO_OPTION="-acodec libvo_aacenc -ar 48000 -b:a 160k "
          AUDIO_OPTION="-acodec aac -ar 48000 -b:a 160k "

          fi



          echo "AUDIO_MAP is " `cat mapa`

          AUDIO_MAP=`cat mapa`

          echo "AUDIO_MAP is " $AUDIO_MAP
          echo "AUDIO_OPTION is " $AUDIO_OPTION
	
	
	 echo '#!/bin/bash' > ${base}.bash
echo 'ffmpeg -i ' ${base}.ts ' -threads ' $1 ' -map ' $VIDEO_MAP ' -map ' $AUDIO_MAP ' -vcodec libx264 -pix_fmt yuv420p -b:v ' $VIDEO_RATE ' ' $AUDIO_OPTION ' -f mp4 ' ${base}.mp4 >> ${base}.bash


	 chmod 775 ${base}.bash
	
          cat ${base}.bash

	 ./${base}.bash    # start conversion
	
	
	
	
	 echo ${base}.mp4 ' ' >> all_files_vlc_at_the_same_time.bash
	 chmod 775 all_files_vlc_at_the_same_time.bash

#avconv  -i "ts.ts" \
#	-threads 4 \
#	-map $VIDEO_MAP \
#	-map $AUDIO_MAP \
#	-vcodec libx264 \
#	-pix_fmt yuv420p \
#	-b:v $VIDEO_RATE \
#	$AUDIO_OPTION \
#	-f mp4 "Paycheck.mp4"

     fi

   done

echo ' &' >> all_files_vlc_at_the_same_time.bash

rm *.avprobed



date > endtime.txt

exit 0


Reply to: