Приобрел себе такую
экшн-камеру попробовал и один существенный недостаток обнаружил: пишет она на sd-карту в формате AVI,который в свою очередь разделён на 2 потока JPEG и PCM ,сейчас точно названий не помню,но итоговый файл выходит размеров капитальных,к примеру час такого вот видео и займет почти все 16gb объёма sd-карточки.Так как настроек никаких камера не позволяет сделать,было принято решение сжимать файлы avi в матроску.Для чего и найден был соответствующий скрипт:
#!/bin/sh
for fn in "$@"
do
duration="$(ffmpeg -i "$fn" 2>&1 | grep 'Duration: ' | sed 's/Duration:\ //' | sed 's/\..*//')"
fsize="$(du -m "$fn" | sed 's/\ .*//')"
timestarts=$(date +%s)
echo "---------------------------------------------------"
echo "$fn"
echo "Длительность:" $duration
echo "Размер: " $fsize 'MB'
echo "---------------------------------------------------"
newfn="$(echo "$fn" | sed 's/\.mkv$/-compressed\.mkv/' | sed 's/\.avi$/\.mkv/' | sed 's/\.mpg$/\.mkv/' | sed 's/\.wmv$/\.mkv/' | sed 's/\.flv$/\.mkv/' | sed 's/\.webm$/\.mkv/' | sed 's/\.mp4$/\.mkv/' | sed 's/\.ts$/\.mkv/')"
#Задайте опции кодирования в строке
#************************************************************************************
ffmpeg -i "$fn" -vf scale=1280:720 -c:v h264 -crf 23 -preset medium -map 0:0 -c:a aac -b:a 128k -map 0:1 "$newfn"
#************************************************************************************
fsizen="$(du -m "$newfn" | sed 's/\ .*//')"
timeends=$(date +%s)
elapses=$(($timeends-$timestarts))
elapse="$(date --date="@$elapses" -u +%H:%M:%S)"
echo "---------------------------------------------------"
echo "$newfn"
echo "Старый размер:" $fsize 'MB'
echo "Новый размер:" $fsizen 'MB'
echo "Затрачено времени:" $elapse
echo "---------------------------------------------------"
done
Происходит всё это дело с помощью FFMPEG, в Windows было что-то подобное,но толку от от этого инструмента там не было никакого.Запускается скрипт наш так
./avitomkv.sh file.avi
так как у меня файлы начинаются с DVO то запускал с таким аргументом
./avitomkv.sh DVO*.avi
cоответственно кодировалось сразу несколько файлов,опции в строке кодирования вы можете ставить свои,я привёл вам простенький вариант,при котором и размер сжимается прилично более и качество не страдает,что ещё хотелось бы добавить,кодирование однопроходное -
crf может иметь значение от 0 до 51.Значение
0 - это так называемый
losless то есть без потери качества,чтобы более было понятно это что-то вроде изменения битрейта,но тут наоборот чем выше значения crf тем больше сжатие и хуже качество,вобщем если этой темой интересуетесь ищите информацию по FFMPEG.Инструмент мощный изучайте.
PS.Забыл сказать этот скрипт также может кодировать и другие форматы не только avi(mpeg,flv итд)