Plex 给我留下了深刻的印象,我想将所有旧的 DVD 媒体文件转换为它能理解的格式。我有不少这样的文件(DVD 库被翻录成 iTunes 的产物),我想保留尽可能多的信息。
具体来说,我希望将视频、所有音轨、所有字幕轨和章节逐字复制到 mp4/mkv/其他文件中,以便 Plex 可以接管并发挥其魔力。
我试过了
ffmpeg -i "concat:$(shell-fu)" -map 0:a -map 0:v -map 0:s -c copy ~/Downloads/test.mp4
用shell-fu
一个简单的 bash for 循环输出VTS_0_1.vob|…
。这很容易出错,而且很难自动化,因为我需要手动检查最大的 vob 是什么,并做一些魔术来得到所有的 vob,但我可以想象编写脚本的方法。更大的问题是我经常遇到错误由于包含字幕。
我愿意尝试所有可以在 Mac 上运行的选项,只要它们是完全自动化的。我有足够的空间,所以我不太担心,但如果有人能告诉我如何默认只包含英文字幕和音频,我会加分,除非英文音频或字幕不是一种选择。
答案1
让 Plex 将各个章节作为一系列的不同情节来处理,并规划您的命名。
如果音频或字幕给您带来问题,那么我建议您只重新编码这些流。我对此了解不多,无法提供任何具体建议。
请记住,视频通常是最昂贵的部分,因此请考虑复制它。
奖励:对于音频语言和字幕偏好,我认为一个简单的 if/else 语句应该可以起作用。
ffmpeg-i 视频
根据流解析输出,并采用某种逻辑查找“(eng)”或文件中使用的任何变体。如果存在英语流,则默认为每个流的零索引(这不清楚,复制所有流还是仅复制一个)。
我不认为我会给你灵丹妙药,但如果你可以详细说明你所看到的错误并解释“最大的 vob 是什么并做一些魔法”我会编辑这个并希望能够给你更具体的东西。
干杯
答案2
尝试https://github.com/donmelton/video_transcoding具体来说,例如:
#!/bin/bash
MOVIEPATH="/Volumes/Movies"
OUTPUTPATH="/Volumes/Transcoded Movies"
find -s $MOVIEPATH -maxdepth 1 -type d -name '*.dvdmedia' | while read file; do
# file: /Volumes/Movies/2001 A Space Odyssey.dvdmedia
# filename: 2001 A Space Odyssey.dvdmedia
# basename: 2001 A Space Odyssey
filename=`basename "$file"`
basename=${filename%.*}
echo -n "$basename: "
if [ ! -d "$file/VIDEO_TS" ] ; then
echo "$basename does not look like a dvdmedia folder"
fi
transcode-video -q -o "${OUTPUTPATH}"/"${basename}".mkv "${MOVIEPATH}"/"${filename}"
done
exit 0
这将使用默认的转码设置转换“电影”目录中的所有 dvdmedia 文件。