Sie sind schuld.
Entfernen Sie die vorhandene .ass
Datei aus dem Verzeichnis des Videos.
VLC zeigt sowohl den eingebetteten Untertitel als auch den Untertitel im Videoverzeichnis.
Ich habe eine Reihe von MP4-Dateien und Untertiteldateien in einem Ordner, die jeweils dem Muster von episode[num].mp4
und folgen episode[num].ass
.
Ich habe ein kleines Shell-Skript geschrieben, um die Kombination dieser Dateien in MKV-Dateien zu automatisieren:
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" done echo "Done";
Beim Öffnen einer der resultierenden MKV-Dateien zeigt VLC zwei Untertitelspuren:
Wer ist hier schuld? FFmpeg, VLC oder mein schnelles und schmutziges Skript? Und wie löse ich dieses Problem?
Sie sind schuld.
Entfernen Sie die vorhandene .ass
Datei aus dem Verzeichnis des Videos.
VLC zeigt sowohl den eingebetteten Untertitel als auch den Untertitel im Videoverzeichnis.
FFmpeg fügt keine Untertitel zweimal hinzu, aber VLC erkennt die .ass
Datei im Verzeichnis automatisch und fügt sie der Liste der verfügbaren Untertitel hinzu. VLC sucht nach Assets (z. B. Untertiteldateien), die den gleichen Namen wie die Videodatei haben, und lädt diese zur Wiedergabe in das Player-Fenster.
Wenn Sie GreatMovie.mkv
also eine GreatMovie.ass
Datei im Verzeichnis haben und sie abspielen, zeigt VLC die in der MKV-Datei eingebetteten Untertitel sowie die Untertitel an, GreatMovie.ass
die sich neben der MKV-Datei in diesem Verzeichnis befinden.
Jetzt sage ich, es hängt von Ihrem Endziel ab. Wenn Ihr Endziel einfach eine kombinierte MKV-Datei ist, die alle Assets enthält, müssen Sie diese .ass
Datei löschen, nachdem sie fertig ist. Daher würde ich Ihr Skript ändern, indem Sie rm -f "$subname";
nach dem ffmpeg
Befehl ein Rechtszeichen hinzufügen, um dies zu tun:
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";
Oder erstellen Sie ein completed_subs/
Verzeichnis und verschieben Sie die Untertitel, wenn Sie fertig sind.
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";
Auf diese Weise entfernen Sie die Untertitel aus dem Verarbeitungsverzeichnis, sodass beim Anzeigen der MKV-Datei nur Untertitel angezeigt werden, die in der MKV-Datei eingebettet sind, und sich nun die eigenständigen Untertiteldateien .ass
befinden completed_sub/
. So können Sie nicht nur sehen, was abgeschlossen wurde, sondern auch die eigenständigen Untertiteldateien behalten, wenn Sie sie in der Zukunft benötigen.