Скрипт оболочки для перемещения только аудиофайлов, идентифицированных ffprobe ffmpeg, в отдельную директорию с помощью yt-dlp

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

ffprobe.png

Здравствуйте, я бездарь.

С помощью yt-dlp я полностью скачал и организовал свои любимые видео с YouTube.

Однако, поскольку я не включил проверку на music.youtube.com при сохранении, все файлы оказались в одной директории.
Из-за этого музыка и другие файлы перемешаны, и это очень неудобно для просмотра, поэтому я придумал способ как-то разделить папки.


Итак, невозможно отличить обычные видеофайлы от музыкальных, если у них одно и то же расширение .mp4.
Даже если определять по размеру файла или длительности, точность будет слишком низкой.

Тогда я понял, что можно определять по соотношению сторон.
Оказывается, ffmpeg может определять соотношение сторон, поэтому я проверю это с помощью следующей команды.

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 “музыкальный файл.mp4”

> 1080x1080

Значит, это, похоже, квадрат 1080x1080.

То есть, достаточно просто переместить файлы, у которых получилось это значение, в другую директорию.
Ого, ffmpeg действительно великолепен! У него есть и такая функция... Впечатляет.

Итак, я написал следующий скрипт оболочки.

vi mvfile.sh

#!/bin/bash

# Установить пути к директориям
input_dir="/media/aaa"
output_dir="/media/bbb"

# Создать выходную директорию, если она не существует
mkdir -p "$output_dir"

# Обработка каждого файла
for file in "$input_dir"/*.mp4; do
# Получить соотношение сторон видео с помощью ffprobe
    ratio=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")

    # Если соотношение сторон 1080x1080, переместить файл в выходную директорию
    if [ "$ratio" == "1080x1080" ]; then
        mv "$file" "$output_dir"
        echo "Moved $file to $output_dir"
    fi
done

Затем дадим права на выполнение.

chmod +x mvfile.sh

И запустить.

./mvfile.sh

Если вывод покажет перемещение, значит, это успех.
Возможно, стоит добавить этот скрипт в качестве cron-задания для директории, используемой для сохранения видеофайлов.

На этом всё.

Буду рад дальнейшему сотрудничеству.

Примечание: Похоже, многие миниатюры немного смещены, поэтому я изменил условие для определения миниатюр на следующее.

if [[ "$ratio" == @(10[78][0-9]x10[78][0-9]|7[12][0-9]x7[12][0-9]) ]]; then

Related Posts