批量搜索 1080p 以下电影的文件夹

批量搜索 1080p 以下电影的文件夹

是否有可能批量搜索文件夹中 1080p 以下的电影并仅打印出这些电影的结果?

答案1

mediainfo程序可以提供视频大小信息

sudo apt install mediainfo

对于 1080p 高度尺寸必须为 1080
显示视频高度与 mediainfo

mediainfo --Output='Video;%%Height%' /path/to/video-file.mkv

现在让我们批量查找 1080p 以下的视频文件

#!/bin/bash

# Working Dir SETTINGS, Adapt to your needs
MFolder=~/Video
# script may be modified to be passed as parameter

# Files list: find Video files and output filename
# find $MFolder -type f -exec file -N -i -- {} + | sed -n 's!: video/[^:]*$!!p' | sort

# Will loop an array. Could run a read while
# Save IFS
OLDIFS=$IFS
IFS=$'\n'
# Find all VIDEO files and store names into an array
fileArray=($(find $MFolder -type f -exec file -N -i -- {} + | sed -n 's!: video/[^:]*$!!p' | sort))
# Restore IFS
IFS=$OLDIFS

# Length of array: total num of found videos
NbTotal=${#fileArray[@]}

# Cosmetic
bold=$(tput bold)
normal=$(tput sgr0)

# The loop 
for (( i=0; i<${NbTotal}; i++ ));
do
    VidHeight=$(mediainfo --Output='Video;%Height%' "${fileArray[$i]}")
        if [ "$VidHeight" -lt 1080 ]; then
            ((NbUnder1080++))
            echo "${fileArray[$i]} "${bold}$(mediainfo --Output='Video;%Width% x %Height%' "${fileArray[$i]}")${normal}
        fi
done

# Output report
echo "---"
echo "Folder scanned: $MFolder"
echo "$NbTotal Videos found"
echo "$NbUnder1080 are under 1080p"

答案2

是的,但我不确定是否有比编写一个脚本更简单的方法,该脚本单独提取视频分辨率,然后筛选出您不想看到的分辨率......这不是一个完整的解决方案,但可能会让您开始:

for i in *.mp4
do
    RESOLUTION=$(ffmpeg -i $i 2>&1 | grep 'Stream.*:Video' | ....)
    if [ $RESOLUTION smaller than 1080p ]
    then
        echo $i

    fi
done

“...”需要一些“sed”或“awk”来提取正确的分辨率信息 - 我有一个脚本可以完成这一任务,但具体到我正在处理的文件类型,因此不会一概而论。然后,一旦您获得了分辨率数据,您就必须想出一种方法来比较它并确定它是否与 1080p 匹配 - 是否“足够好”的比较只查看 X 或 Y 分辨率,或者您是否需要同时考虑 X 和 Y。

相关内容