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: