Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Конвертация нескольких видео с ограничением по высоте картинки  (Прочитано 719 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kofesutra

  • Автор темы
  • Активист
  • *
  • Сообщений: 320
    • Просмотр профиля
Возникла задачка: переконвертировать несколько видеофайлов бОльшего разрешения в меньшее, но не изменять видеофайлы, высота которых меньше целевого. В примере - 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
« Последнее редактирование: 27 Января 2021, 15:37:17 от kofesutra »

 

Страница сгенерирована за 0.047 секунд. Запросов: 25.