VLC и вы виноваты, но это зависит от вашей конечной цели.
FFmpeg не добавляет субтитры дважды, но VLC автоматически обнаруживает файл .ass
в каталоге и добавляет его в список доступных субтитров. VLC ищет ресурсы, такие как файлы субтитров, которые имеют то же имя, что и видеофайл, и загружает их в окно проигрывателя для целей воспроизведения.
Поэтому, если вы играете в GreatMovie.mkv
вас есть файл GreatMovie.ass
в каталоге и вы воспроизводите его, VLC отобразит субтитры, встроенные в файл MKV, а также тот GreatMovie.ass
который находится рядом с файлом MKV в этом каталоге. ,
Теперь я говорю, что это зависит от вашей конечной цели. Если вашей конечной целью является просто один объединенный файл MKV, который содержит все ресурсы, вам нужно удалить этот файл .ass
после того, как он будет сделан. Поэтому я бы изменил ваш скрипт, добавив rm -f "$subname";
сразу после команды ffmpeg
- как таковой, чтобы сделать это:
for i in *.mp4; do
name=`echo $i | cut -d'.' -f1`;
mp4name="$name.mp4";
subname="$name.ass";
mkvname="$name.mkv";
ffmpeg -i "$mp4name" -i "$subname" -map 0:v -map 0:a -map 1:s -metadata:s:a language=jpn -metadata:s:s:0 language=eng -c copy -y "$mkvname"
rm -f "$subname";
done
echo "Done";
Или, возможно, создайте каталог completed_subs/
и переместите субтитры в этот каталог, когда закончите.
for i in *.mp4; do
name=`echo $i | cut -d'.' -f1`;
mp4name="$name.mp4";
subname="$name.ass";
mkvname="$name.mkv";
ffmpeg -i "$mp4name" -i "$subname" -map 0:v -map 0:a -map 1:s -metadata:s:a language=jpn -metadata:s:s:0 language=eng -c copy -y "$mkvname"
mkdir -p "completed_sub";
mv $subname "completed_sub/$subname";
done
echo "Done";
Таким образом вы удаляете субтитры из каталога обработки, поэтому при просмотре файла MKV будут отображаться только ресурсы субтитров, встроенные в файл MKV, а автономные файлы .ass
субтитров теперь находятся в completed_sub/
. Таким образом, вы можете не только увидеть, что было выполнено, но и сохранить отдельные файлы субтитров, если они вам понадобятся в будущем.