В папке лежит куча видеофайлов с разным разрешением.
Возникла задачка: переконвертировать несколько видеофайлов бОльшего разрешения в меньшее, но не изменять видеофайлы, высота которых меньше целевого. В примере - 480р.
То есть, все видео с высотой картинки больше (например, 1080р) приводятся к 480р, а меньшие (360р) оставляются неизменными. Размер по горизонтали изменяется пропорционально.
Кроме того, видео FLV переконвертируются в MP4, а у файлов MP4, AVI, MKV оставляем тот же формат, чтои был.
В результате в начальной директории окажутся сконвертированные файлы, а исходные в каталоге BAK.
Вот, написал скрипт:
#!/bin/bash
#===========================================================
# Конвертировать видеофайлы вертикальное разрешение которых
# выше указанного
max_vert_res=480
# В какой каталог складывать сконвертированные видео
catalog=converted
# В какой каталог перенести исходные файлы
catalog2=bak
#===========================================================
# Создаём папку в которую записываются обработанные файлы
if ! [ -d $catalog ]; then
mkdir $catalog
fi
if ! [ -d $catalog2 ]; then
mkdir $catalog2
fi
# ===== У файлов MP4, AVI, MKV оставляем тот же формат =====
# Перебираем все файлы в папке
for z in *.mp4 *.avi *.mkv;
do
# Проверяем вертикальное разрешение видео
read_vert_res=$(ffprobe -v error -show_entries stream=height -of default=nw=1:nk=1 "$z");
# Если оно меньше или равно указанному в начале скрипта
# то переносим файл в новую папку
if [[ $read_vert_res -le $max_vert_res ]]; then
( mv "$z" $catalog/"${z%}" )
# или если оно больше, то конвертируем видео и записываем в новую папку
elif [[ $read_vert_res -gt $max_vert_res ]]; then
( ffmpeg -i "$z" -vcodec libx264 -vf "scale=-2:$max_vert_res" -acodec copy $catalog/"${z%}")
fi
done
# ===== Файлы FLV конвертируем в MP4 =====
# Перебираем все файлы в папке
for z in *.flv;
do
# Проверяем вертикальное разрешение видео
read_vert_res=$(ffprobe -v error -show_entries stream=height -of default=nw=1:nk=1 "$z");
# Если оно меньше или равно указанному в начале скрипта
# то переносим файл в новую папку
if [[ $read_vert_res -le $max_vert_res ]]; then
( ffmpeg -i "$z" -vcodec copy -acodec copy $catalog/"${z%.*}".mp4 )
# или если оно больше, то конвертируем видео и записываем в новую папку
elif [[ $read_vert_res -gt $max_vert_res ]]; then
( ffmpeg -i "$z" -vcodec libx264 -vf "scale=-2:$max_vert_res" -acodec copy $catalog/"${z%.*}".mp4 )
fi
done
# Переносим оставшиеся файлы в другую директорию
for y in *.*;
do
( mv "$y" $catalog2/"${y%}" )
done
# Переносим сконвертированные файлы в исходную директорию
cd $catalog
for x in *.*;
do
( mv "$x" ../"${x%}" )
done
# Удаляем временный каталог для сконвертированных файлов
cd ../
( rm -r $catalog )
exit 0
Сохраняем в папку с видеофайлами, даём права на исполнение, запускаем, ждём окончания.
Радуемся, пьём коньяк.