如何按编解码器对视频进行排序并执行命令

如何按编解码器对视频进行排序并执行命令

所以我一直在尝试过滤掉H265/HEVC并仅显示不是以前的编解码器的视频,然后执行我拥有的命令,该命令将使用我的设置对视频进行转码。

每次我找到一个解决方案或一种可以按照我想要的方式完成的方法时,它都不起作用。要么是某种错误,要么是它已经过时,而且现在不是这样做的。

但它应该是这样的:

find /mnt/videos -type f *.mp4 exec $filtercmd; $transcodecmd

该命令应该只打印文件的绝对路径,这样我就可以让它被第二个命令使用,以便可以对其进行转码。

我更喜欢使用,ffprobe因为它似乎是一种更干净的方法。我讨厌基本上要求某人编写命令或脚本,但我只是不具备此类知识。如果这是出于按计划编写的目的,那就太好了。

提前致谢!

编辑:

我想我可能已经找到了解决方案。

#!/bin/bash

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green

# Bold
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green


for i in $(find /mnt/movies/ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'); do
    ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "${i}"
    if [[ $1 == 'h264' ]]; then
        echo "Video is a ${BGreen}H264${Color_off} video file"
        python sickbeard_mp4_automator/manual.py -i "$i" -a
    elif [[ $1 == hevc ]]; then
        echo "Video is alread transcoded to ${BRed}HEVC${Color_Off}"
    fi
done

但它似乎正在逃离空间。似乎无法让它退出。你们有什么感想?

答案1

我找到了答案!

#!/bin/bash

IFS=$'\n'

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green

# Bold
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green

for i in $(find /mnt/movies/ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'); do
#    ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i"
    if [ $(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i") = h264 ]; then
        echo -e "Video is a ${BGreen}H264${Color_Off} video file"
        python2 sickbeard_mp4_automator/manual.py -i "$i" -a
    elif [ $(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i") == hevc ]; then
        echo -e "Video is already transcoded to ${BRed}HEVC${Color_Off}"
    elif [ $(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$i") == vp8 ]; then
        echo -e "Video is a ${BGreen}WEBM${Color_Off} video file"
        python2 sickbeard_mp4_automator/manual.py -i "$i" -a
    fi
done

这将检查 H264 并转码文件。否则,它将保持原样。感谢大家的帮助,我意识到我有时可能很愚蠢。:)

答案2

您可以使用以下命令:

find /your/path -exec bash -c "if file {} | grep "python"; then cat {} ; fi" \;

此命令将file在找到的所有文件上执行,如果此命令的输出包含“python”,cat则执行。

显然,您必须根据您的需要调整此命令。

相关内容