В папке лежит куча видеофайлов с разным разрешением.

Возникла задачка: переконвертировать несколько видеофайлов бОльшего разрешения в меньшее, но не изменять видеофайлы, высота которых меньше целевого. В примере - 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

Сохраняем в папку с видеофайлами, даём права на исполнение, запускаем, ждём окончания.

Радуемся, пьём коньяк.