На моем телефоне кончилось место, и Honor начал ругаться на то, что при 90% функции могут быть ограничены. Это сообщение висело около недели, пока я обдумывал, что с этим можно сделать. А пока я думал, я не мог снимать забавные видео со своим сыном.

Как оказалось, очень много места занимают видео, снятые на камеру в разрешении 4k. Одна минута весит ~200 Мб, но зато меня радовало качество.

Наконец, я приехал с дачи домой, и решил пережать видео в меньший размер. План такой: маленькие видео закинуть назад в телефон, а оригиналы сохранить на жесткий диск.

Я дернул коллегу с работы Данилу, написав в телегу:

Можешь у чатгпт спросить
how to compress video from 100mb to 20mb using ffmpeg with the same resolution

Вот рекомендация, которую он выдал:

You can use FFmpeg to compress a video while keeping the same resolution. Here’s a basic command to do so:

ffmpeg -i input.mp4 -b:v 1M -minrate 500k -maxrate 2M -bufsize 2M -c:v libx264 -preset slow -c:a copy output.mp4

This command will:
Read the video from input.mp4.
Use the x264 video codec with a target bitrate (-b:v) of 1 megabit.
Set minimum and maximum bitrates to control variability (-minrate and -maxrate).
Set buffer size (-bufsize).
Use a slow preset for better compression (-preset).
Copy the audio codec directly without re-encoding (-c:a copy).
You may need to experiment to achieve your specific target size. Change the bitrate or presets accordingly.

Конечно я запустил ее, но результат меня очень сильно разочаровал: хотя размер и сократился со 112Мб до 3Мб (~ в 40 раз), качество оказалось из рук вон плохо: получился какой-то пиксель-арт.

Я погуглил и поставил несколько экспериментов, и в итоге получился такой скрипт для пакетной обработки:

#!/usr/bin/bash

set -x

for file in video/*.mp4; do
    name=`basename "$file"`
    # echo "${name%.mp4}_libx265.mp4"
    # ffmpeg -i input.mp4 -vcodec libx265 -crf 30 output-5.mp4
    ffmpeg -i "$file" -vcodec libx265 -crf 30 "out/${name%.mp4}_libx265.mp4"
done

Забавно, что в нем остались закомменченные отладочные строки, из которых можно узнать, что удачной оказалась пятая попытка. А libx265 — лучший кодек на данный момент.

Помню, что когда запустил этот скрипт, мой AMD Ryzen 9 5950X 16-Core Processor начал грузиться по всем 32 потокам на ~80%. Я оставил пережатие всех файлов на ночь, а сколько это точно заняло — уже не помню.

Затем я закинул пережатые видео на телефон, а оригиналы — на комп, и резервный внешний диск. Причем я не стал удалять пережатые, поэтому они также синхронизировались с внешним диском. Ну ладно, пусть живут.

Чтобы отличить на телефоне пережатые от новых записанных (и не пережатых), у них есть суффикс «_libx265» в названии файла.

Печально, что после закидывания на телефон поменялись даты создания, из-за чего в галерее видео не по порядку. Кстати, видео с первыми шагами сына называется «VID_20220415_173408.mp4», а значит что это 15 апреля 2022.

От debitos

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *