Например, на видео, полученное с видеорегистратора, можно наложить субтитры и склеить фрагменты в один видео файл.
Для этой цели можно воспользоваться утилитой mencoder (пример для ffmpeg см. в другой статье), пример:
- Формат mpeg4 контейнер avi:
mencoder -speed $speed -ofps $ofps -ovc lavc \ -lavcopts vcodec=mpeg4:vbitrate=$vbr -sub $sub -of avi -o $of $f
- Формат x264 контейнер mp4:
mencoder -speed $speed -ofps $ofps -ovc x264 \ -x264encopts threads=auto:profile=baseline -sub $sub -of lavf -lavfopts format=mp4 -o $of $f
#где $speed # число, во сколько раз ускорить видеопоток, например 10 $ofps # кол-во кадров в сек., в полученном видеопотоке (после обработки), например 30 $vbr # битрейт в полученном видеопотоке, например 3600 $sub # исходный файл с субтитрами $of # файл, куда сохранять $f # исходное видео
Например, в каталоге $idir с видеофайлами *.3gp и субтитрами *.srt, можно организовать цикл в скрипте на bash для fmt=avi или fmt=mp4, пример:
for f in $idir/*.3gp; do bf=$(basename $f) of=$odir/${bf%.3gp}x${speed}.$fmt test -f "$of" && { echo "File $of exist"; continue; } sub=${f%.3gp}.srt test -f "$sub" || { echo "File $sub not found"; exit 1; } echo "### Convert ###" echo "### From $f fps*$speed and sub=$sub" echo "### To $of fps=$ofps vbr=$vbr" case $fmt in avi) mencoder -sub $sub -subcp utf8 -font 'CMU Serif Upright Italic' -speed $speed \ -ofps $ofps -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$vbr -of $fmt -o $of $f;; mp4) mencoder -sub $sub -subcp utf8 -font 'CMU Serif Upright Italic' -speed $speed \ -ofps $ofps -ovc x264 -x264encopts threads=auto:profile=baseline -of lavf \ -lavfopts format=$fmt -o $of $f;; esac done
тут каждый видеофрагмент и соответствующий файл с субтитрами склеивается (для субтитров указан шрифт и кодировка), полученный видеофрагмент помещается в каталог $odir.
Далее можно видеофрагменты из каталога $odir склеить в файл $odir.$fmt:
fll="" cd $odir || { echo "Error cd to $odir"; exit 1; } for fl in ./*.$fmt; do fll="$fll $fl" done if [ -f "${odir}.$fmt" ]; then echo "### Join skip: File ${odir}.$fmt exist" else echo "### Join to ${odir}.$fmt" case $fmt in avi) mencoder -ovc copy $fll -of $fmt -o ${odir}.$fmt;; mp4) mencoder -ovc copy $fll -of lavf -lavfopts format=$fmt -o ${odir}.$fmt;; esac fi
Для помещения на веб ресурс можно использовать полученный mp4, либо альтернативно перекодировать в формат webm (оба эти формата совместимы с html5 см. http://www.w3schools.com/HTML/html5_video.asp, пример:
ffmpeg -i ${odir}.$fmt -codec:v libvpx -b:v ${webr}k ${odir}.webm #где ${webr} # битрейт в полученном видео webm
Видео mp4 в формате h264 c profile=baseline и видео в формате webm можно просматривать на android устройствах, Пример:
- Видео в формате webm:
- Видео в формате mp4: