在 Raspberry Pi 中仅下载新字幕
Downloading only new subtitles in RaspberyPi
我在使用 bash 脚本在 Raspberry Pi 上编写下载字幕时遇到问题。
问题是我想每隔一小时左右执行 1 个脚本 运行 cron,以便为某个目录中的新视频文件下载字幕。
有一个名为 qnapi 的程序可以自动下载目录中正确格式的字幕,但它只适用于 1 个文件夹并且总是重新下载字幕文件。
用法是:
qnapi /path/to/folder
所以我发现
find /media/pi/RaspStorage -iname "*.mkv"
基本上给了我所有电影文件的列表。现在我想以某种方式比较是否存在具有相同基本名称的 *.srt 字幕文件,如果不存在则以某种方式使用 qnapi 命令循环遍历所有找到的文件。将它写在 bash 脚本中并 cron 它。
也许与此类似的东西可行(未经测试,可能有拼写错误)。
我在 google 搜索中猜测 qnapi
的语法。
基本上,将没有字幕的视频符号链接到一个临时文件夹,在那里下载字幕,然后将它们移回主文件夹。
#!/bin/bash
MEDIA=/media/pi/RaspStorage
WORK=/tmp/workingfolder
mkdir -p "$WORK"
pushd "$WORK" || { echo "ERROR: no working directory"; exit 1; }
# assuming subtitle name is video name except with ".srt" extension
find "$MEDIA" -iname "*.mkv" | while read video; do
vidnoext="${video%????}"
viddir="${vidnoext%/*}"
subtitle="${vidnoext}.srt"
if [ ! -f "$subtitle" ]; then
# this assumes bare filenames (without directory) are distinct
ln -s "$video" "${vidnoext}.mkv"
fi
done
qnapi -c .
find . -iname '*.srt' | while IFS= read -r subtitle; do
video="$(realpath "$(subtitle%????}.mkv")"
mv -i "$subtitle" "$(dirname "$video")/"
done
rm *
popd
rmdir "$WORK"
感谢您的帮助:)
我成功了
#!/bin/bash
echo "Updated DLNA folder"
sudo minidlnad -R
for file in $(find /media/pi/RaspStorage -name '*.mkv' -or -name '*.avi'); do
name=${file:: -4}
ext=".srt"
name=$name$ext
if [ -f $name ]; then
echo "Napisy już ściągnięte dla:" "$(basename "$file")"
else
qnapi "$(dirname "$file")"/"$(basename "$file")"
fi
done
工作正常。正在下载所有字幕,如果已经有一些正在跳过
我在使用 bash 脚本在 Raspberry Pi 上编写下载字幕时遇到问题。
问题是我想每隔一小时左右执行 1 个脚本 运行 cron,以便为某个目录中的新视频文件下载字幕。
有一个名为 qnapi 的程序可以自动下载目录中正确格式的字幕,但它只适用于 1 个文件夹并且总是重新下载字幕文件。
用法是:
qnapi /path/to/folder
所以我发现
find /media/pi/RaspStorage -iname "*.mkv"
基本上给了我所有电影文件的列表。现在我想以某种方式比较是否存在具有相同基本名称的 *.srt 字幕文件,如果不存在则以某种方式使用 qnapi 命令循环遍历所有找到的文件。将它写在 bash 脚本中并 cron 它。
也许与此类似的东西可行(未经测试,可能有拼写错误)。
我在 google 搜索中猜测 qnapi
的语法。
基本上,将没有字幕的视频符号链接到一个临时文件夹,在那里下载字幕,然后将它们移回主文件夹。
#!/bin/bash
MEDIA=/media/pi/RaspStorage
WORK=/tmp/workingfolder
mkdir -p "$WORK"
pushd "$WORK" || { echo "ERROR: no working directory"; exit 1; }
# assuming subtitle name is video name except with ".srt" extension
find "$MEDIA" -iname "*.mkv" | while read video; do
vidnoext="${video%????}"
viddir="${vidnoext%/*}"
subtitle="${vidnoext}.srt"
if [ ! -f "$subtitle" ]; then
# this assumes bare filenames (without directory) are distinct
ln -s "$video" "${vidnoext}.mkv"
fi
done
qnapi -c .
find . -iname '*.srt' | while IFS= read -r subtitle; do
video="$(realpath "$(subtitle%????}.mkv")"
mv -i "$subtitle" "$(dirname "$video")/"
done
rm *
popd
rmdir "$WORK"
感谢您的帮助:)
我成功了
#!/bin/bash
echo "Updated DLNA folder"
sudo minidlnad -R
for file in $(find /media/pi/RaspStorage -name '*.mkv' -or -name '*.avi'); do
name=${file:: -4}
ext=".srt"
name=$name$ext
if [ -f $name ]; then
echo "Napisy już ściągnięte dla:" "$(basename "$file")"
else
qnapi "$(dirname "$file")"/"$(basename "$file")"
fi
done
工作正常。正在下载所有字幕,如果已经有一些正在跳过