Вот мой скрипт для объединения всех vob и конвертации его в mkv с перекодированием.
Сначала строит общий vob, потом декодирует его и оставляет на диске несжатый файл *.y4m,
потом строит из него mkv и добавляет в него звук.
Только что проверил на DVD "Diligence", чёрно-белый фильм. Общий vob получился размером 4163M,
*.y4m строился 19 минут и имеет размер 88340M, , кодирование заняли 55 минут,
конечный mkv-файл имеет размер 769M, а mkv без звука - 630M.
/home/peter в нём - этом мой домашний каталог, каталог Diligence как аргумент находится на диске,
примонтированном по usb, dird в начале скрипта.
#!/bin/bash
dird="/media/peter/Seagate_5TB/nobody/adventures"
curd=`/usr/bin/pwd`
nam="$1"
vob1=${dird}/${nam}.vob
err1=${dird}/${nam}.err
/bin/rm -f $vob1 $err1
cd ${dird}/$nam
if [ -d VIDEO_TS ] ; then
dirv="VIDEO_TS"
else
if [ -d video_ts ] ; then
dirv="video_ts"
fi
fi
#echo "dirv="$dirv
#cd $dird/$nam/$dirv
cd $dirv
pwd
#/bin/ls VTS_*_*.VOB
nhh=0
nmm=0
nss=0
/bin/date > ${dird}/$nam.time
for flnm in `/bin/ls -1 VTS_*_*.VOB` ; do
dur1="`/usr/bin/mediainfo $flnm | /bin/grep Duration | /usr/bin/tr -s \" \"`"
dur2=`echo "$dur1" | /usr/bin/tr "\n" "_"`
dur3=`echo "$dur2" | /usr/bin/cut -d "_" -f 1`
mm=`echo "$dur3" | /usr/bin/cut -d " " -f 3`
ms=`echo "$dur3" | /usr/bin/cut -d " " -f 5`
let nmm+=mm
let nss+=ms
#echo "$dur3"
done
/bin/date >> ${dird}/$nam.time
echo $nmm $nss
let ms=nss/60
let nmm+=ms
let nss=nss%60
echo $nmm $nss
echo $nmm $nss >> ${dird}/$nam.time
let nhh=nmm/60
let nmm=nmm%60
echo $nhh $nmm $nss
echo $nhh $nmm $nss >> ${dird}/$nam.time
lstv="`/bin/ls VTS_*_*.VOB`"
#echo $lstv
lstvo=`/bin/echo $lstv | /usr/bin/tr " " "|" `
echo "$lstvo"
echo "$lstvo" >> ${dird}/$nam.time
/usr/bin/ffmpeg -i concat:$lstvo -c copy $vob1 >& $err1
echo "whole vob was build"
/bin/date >> ${dird}/$nam.time
nw=`/usr/bin/mediainfo $vob1 | /bin/grep Width | /usr/bin/tr -s " " | /usr/bin/cut -d " " -f 3`
nh=`/usr/bin/mediainfo $vob1 | /bin/grep Height | /usr/bin/tr -s " " | /usr/bin/cut -d " " -f 3`
echo $nw $nh >> ${dird}/$nam.time
/usr/bin/ffmpeg -i $vob1 -an -sn -map 0 -strict -1 -f yuv4mpegpipe \
${dird}/${nam}.y4m > ${dird}/${nam}_y4m.err 2>&1
/bin/date >> ${dird}/$nam.time
echo "y4m was build"
/usr/bin/x264 -v --log-level warning --input-res ${nw}x${nh} --preset veryslow \
-o ${dird}/${nam}_cmpr_v.mkv ${dird}/${nam}.y4m > ${dird}/${nam}_cmpr_v.err 2>& 1
/bin/ls -l ${dird}/${nam}.y4m >> $nam.time
#/bin/rm -f ${dird}/${nam}.y4m
/bin/date >> ${dird}/$nam.time
echo "cmpr_v.mkv was build"
/usr/bin/ffmpeg -i $vob1 -i $dird/${nam}_cmpr_v.mkv -map 0:a -c:a copy -map 1:v \
-c:v copy $dird/${nam}_cmpr.mkv > $dird/${nam}_cmpr.err 2>&1
/bin/date >> ${dird}/$nam.time
echo "cmpr.mkv was build"
#cd $curd
cd /home/peter
#/usr/bin/sync
#/usr/bin/umount /media/peter/Seagate_4TB
#/usr/bin/udisksctl power-off -b /dev/sdb
#/usr/bin/sudo /usr/sbin/shutdown -h +0