我是一个菜鸟,正在尝试为 Plex 构建一个后处理类型脚本。在一些同事和谷歌的帮助下,我整理了以下脚本来将 mkv 文件转换为 mp4 文件。
该脚本用于“查找”媒体目录中的所有文件并将它们转换为 mp4 文件。
它找到第一个,正确处理并退出 - 为什么?我需要帮助让这个脚本循环播放。我以这种方式编写了古怪的 find 命令,因此“find”命令将捕获带空格的文件名,而 dirname 命令将起作用。
脚本 ---
find -L "/media/4tbdisk/test/" -type f -name '*.mkv' -print0 | while IFS= read -r -d $'\0' FILE; do
echo "filename is ---" "$FILE";
DIR=$(dirname "${FILE}");
echo "directory is --" $DIR;
transcode-video --mp4 --quick "$FILE" --output "$DIR";
done
发生的是脚本将找到一个 mkv 文件并处理它,但不会继续循环处理其余部分。如果它找到的第一个文件已经被处理过,“转码”脚本会说“输出文件存在...”并将继续处理下一个,但在创建第一个 mp4 文件后它会停止
提前致谢哈芬克
您似乎正在使用这个 transcode-video脚本。它基于 HandbrakeCLI 和 mplayer,两者都倾向于过度使用 stdin,从而在第一次迭代后打破 while read 循环(ex1、ex2、ex3、ex4)。
您可以通过重定向来自 /dev/null
的输入来避免这种情况,这样它就不会消耗任何循环的输入:
find -L "/media/4tbdisk/test/" -type f -name '*.mkv' -print0 | while IFS= read -r -d $'\0' FILE; do
echo "filename is ---" "$FILE";
DIR=$(dirname "${FILE}");
echo "directory is --" $DIR;
transcode-video < /dev/null --mp4 --quick "$FILE" --output "$DIR";
done
我是一名优秀的程序员,十分优秀!