Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Скрипты для сжатия видео с GoPro и ковертирования RAW в JPG

Как сжать GoPro видео с помощью ffmpeg (инструкуция для windows)

Расскажу как круто можно ужимать видео с гопрошки без потери качества.

Видео как правило жмется очень хорошо, мне удавалось сжимать ролики до 70% безо всяких на то проблем.

Для windows-пользователей приложу инструкцию, linux-пользователи и так разберутся, все скрипты приведены ниже.

Установка

  • Скачиваешь ffmpeg отсюда: https://ffmpeg.zeranoe.com/builds/
  • Расспаковываешь, заходишь в папку
  • Запускаешь ff-prompt.bat
  • Копируешь и вставляешь туда (эта команда скачает мой скрипт):
bash -c 'curl -O https://gist.githubusercontent.com/kvaps/b6f709793530d85648b0d6227ebb0849/raw/f9a6c39f79e68bc6dc162424bd988e2fd51ed0df/shrink_gopro_videos.sh'
  • Нажимаешь Enter

Использлвание

  • Запускаешь ff-prompt.bat
  • Пишешь команду (пробел в конце обязателен):
bash shrink_gopro_videos.sh 
  • перетаскиваешь в окно папку с видосами, которые хочешь ужать.
  • Нажимаешь Enter

Скрипт можно натравить на папку со всем своим архивом видео, скрипт обойдет все папки иерархически.

Как работает скрипт

Скрипт ищет все файлы по маске GOPR????.MP4 в указанной папке, конвертит их и переименовывает в GOPZ????.MP4

#!/bin/bash
#
# Script for converting CR2 (raw) photos to jpeg format using ufraw-batch from docker
#
if [ "$#" = "1" ] ; then
in_path="$(realpath $1)"
else
echo "Usage: $(basename $0) DIRECTORY"
exit 1
fi
docker run --name imagemagick --rm -ti -v "${in_path}":"/a" acleancoder/imagemagick-full bash -c "
find /a -name \"*.CR2\" -exec bash -c \" ufraw-batch --out-type=jpeg --overwrite \\\"{}\\\" && rm -f \\\"{}\\\" \" \;
"
#!/bin/bash
#
# Script for find duplicate files
# form here: http://unix.stackexchange.com/a/42667
#
# Better use fdupper.
if [ "$#" = "1" ] ; then
in_path="$(realpath $1)"
else
echo "Usage: $(basename $0) DIRECTORY"
exit 1
fi
find $1 -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | \
xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | \
sort | uniq -w32 --all-repeated=separate
#!/bin/bash
#
# Script for shrinking gopro videos with ffmpeg
#
if [ "$#" = "1" ] ; then
in_path="$(realpath $1)"
else
echo "Illegal number of parameters"
exit 1
fi
find "$in_path" -name "GOPR????.MP4" -exec bash -c '
new_file="$(echo "{}" | sed "s:GOPR:GOPZ:")"
unset isok
ffmpeg -y -i "{}" $new_file && isok=1
if \[ "$isok"="1" \]; then
if \[ -f $new_file \]; then
if \[ $(stat -c%s "$new_file") -lt $(stat -c%s "{}") \]; then
echo "Save compressed: $new_file (remove original)"
rm -f "{}"
else
echo "Remove compressed: $new_file (leave original)"
rm -f "$new_file"
mv "{}" "$new_file"
fi
fi
fi
' \;
#!/bin/bash
#
# Script for shrinking gopro videos using ffmpeg from docker
#
if [ "$#" = "1" ] ; then
in_path="$(realpath $1)"
else
echo "Usage: $(basename $0) DIRECTORY"
exit 1
fi
docker run --name ffmpeg --rm -ti --entrypoint="/bin/sh" -v "${in_path}":"/a" jrottenberg/ffmpeg -c "
find /a -name \"GOPR????.MP4\" -exec bash -c \"
new_file=\\\"\\\$(echo \\\"{}\\\" | sed \\\"s:GOPR:GOPZ:\\\")\\\"
unset isok
ffmpeg -y -i \\\"{}\\\" \\\$new_file && isok=1
if \\\[ \\\"\\\$isok\\\"=\\\"1\\\" \\\]; then
if \\\[ -f \\\$new_file \\\]; then
if \\\[ \\\$(stat -c%s \\\"\\\$new_file\\\") -lt \\\$(stat -c%s \\\"{}\\\") \\\]; then
echo \\\"Save compressed: \\\$new_file (remove original)\\\"
rm -f \\\"{}\\\"
else
echo \\\"Remove compressed: \\\$new_file (leave original)\\\"
rm -f \\\"\\\$new_file\\\"
mv \\\"{}\\\" \\\"\\\$new_file\\\"
fi
fi
fi
\" \;
"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment