Возникла задачка: переконвертировать несколько видеофайлов бОльшего разрешения в меньшее, но не изменять видеофайлы, высота которых меньше целевого. В примере - 480р.
То есть, все видео с высотой картинки больше (например, 1080р) приводятся к 480р, а меньшие (360р) оставляются неизменными. Размер по горизонтали изменяется пропорционально.
Кроме того, видео FLV переконвертируются в MP4, а у файлов MP4, AVI, MKV оставляем тот же формат
Вот, написал скрипт:
#!/bin/bash
#===========================================================
# Конвертировать видеофайлы вертикальное разрешение которых
# выше указанного
max_vert_res=480
# В какой каталогскладывать сконвертированные видео
catalog=converted
#===========================================================
# Создаём папку в которую записываются обработанные файлы
if ! [ -d $catalog ]; then
mkdir $catalog
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