Konvertieren von DVD-Images mit Untertiteln in MKV mit avconv
Dies ist die Prozedur, die ich kenne, um zu konvertieren ein DVD-image auf ein anderes videoformat (v. g. MP4):
- verketten der
VTS_01_
n.VOB
Dateien inVIDEO_TS
Ordner (für n >= 0) in eine einzige VOB-Datei. - verwenden
avconv
oderffmpeg
um zu konvertieren, VOB in ein anderes format.
So weit So gut, aber jetzt will ich konvertieren Sie die DVD-image mit die Untertitel. Soweit ich weiß ist das MKV-format unterstützt Untertitel, so dass es scheint eine offensichtliche Wahl. Alternativ könnte ich jedes andere format mit hard-Untertitel (Untertitel als Teil der video-Bild).
Jedoch der Untertitel-Kodierung in das DVD-Bild ist dvdsub
und ich bekomme die folgende Fehlermeldung
Only SUBTITLE_ASS type supported.
Subtitle encoding failed
Aber bei der Ausführung avconv -codecs
ich bekommen:
...
DES dvdsub DVD subtitles
...
Und die -c:s copy
wechseln, während es verhindert, dass der Befehl fehlschlägt, scheint es nicht zu produzieren ein Untertitel, dass die Spieler verstehen können.
So, wie kann ich ass
Untertitel von dvdsub
mit avconv
?
Meine VOB-Datei hat acht Untertitel-Kanäle und zwei Audiokanäle. Das Ubuntu-video-app zeigt keine Untertitel, und nur der erste audio-channel scheint zu funktionieren, tun Sie das DVD-image könnte beschädigt sein.
Andere Datei, für eine double-layer-DVD, zeigt die Untertitel-encoding-Fehler, jedoch, wenn Sie mit der -c:s copy
Schalter weiter zeigt:
Application provided invalid, non monotonically increasing dts to muxer in stream 2: 49 >= 49
av_interleaved_write_frame(): Invalid argument
Vielen Dank im Voraus für irgendwelche Ideen auf, wie diese Probleme zu lösen.
(Ich bin mit Ubuntu, wo ffmpeg
ist ein alias für avconv
. Ich weiß, dass es möglich ist, installieren Sie die real ffmpeg, aber so weit ich das noch nicht getan hast.)
update: Befehle und Konsolen-Ausgänge:
Befehle
cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB > ~/temp/mymovie.VOB
cd ~/temp
avconv -i mymovie.VOB
Ausgabe
avconv version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 22:20:06 with gcc 4.7.2
[mpeg @ 0x1a64d40] max_analyze_duration reached
Input #0, mpeg, from 'mymovie.VOB':
Duration: 00:00:01.95, start: 0.280633, bitrate: -2147483 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 8:9 DAR 4:3], 7500 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0.1[0x20]: Subtitle: dvdsub
Stream #0.2[0x21]: Subtitle: dvdsub
Stream #0.3[0x22]: Subtitle: dvdsub
Stream #0.4[0x23]: Subtitle: dvdsub
Stream #0.5[0x24]: Subtitle: dvdsub
Stream #0.6[0x25]: Subtitle: dvdsub
Stream #0.7[0x26]: Subtitle: dvdsub
Stream #0.8[0x27]: Subtitle: dvdsub
Stream #0.9[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Stream #0.10[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
At least one output file must be specified
Befehl
avconv -i mymovie.VOB mymovie.mkv
Ausgabe
avconv version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 22:20:06 with gcc 4.7.2
[mpeg @ 0x1cdad40] max_analyze_duration reached
Input #0, mpeg, from 'mymovie.VOB':
Duration: 00:00:01.95, start: 0.280633, bitrate: -2147483 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 8:9 DAR 4:3], 7500 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0.1[0x20]: Subtitle: dvdsub
Stream #0.2[0x21]: Subtitle: dvdsub
Stream #0.3[0x22]: Subtitle: dvdsub
Stream #0.4[0x23]: Subtitle: dvdsub
Stream #0.5[0x24]: Subtitle: dvdsub
Stream #0.6[0x25]: Subtitle: dvdsub
Stream #0.7[0x26]: Subtitle: dvdsub
Stream #0.8[0x27]: Subtitle: dvdsub
Stream #0.9[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Stream #0.10[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
File 'mymovie.mkv' already exists. Overwrite ? [y/N] y
[buffer @ 0x1ce23c0] w:720 h:480 pixfmt:yuv420p
Output #0, matroska, to 'mymovie.mkv':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 8:9 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
Stream #0.1: Audio: libvorbis, 48000 Hz, 5.1, s16
Stream #0.2: Subtitle: ass, 200 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video -> mpeg4)
Stream #0:9 -> #0:1 (ac3 -> libvorbis)
Stream #0:1 -> #0:2 (dvdsub -> ass)
Press ctrl-c to stop encoding
[ass @ 0x1ce0140] Only SUBTITLE_ASS type supported.
Subtitle encoding failed
Befehl
avconv -i mymovie.VOB -c:s copy mymovie.mkv
Ausgabe weggelassen.
Befehl
avconv -i mymovie.mkv
Ausgabe
avconv version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 22:20:06 with gcc 4.7.2
[matroska,webm @ 0xbc1d40] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'mymovie.mkv':
Metadata:
ENCODER : Lavf53.21.1
Duration: 01:05:09.47, start: 0.000000, bitrate: N/A
Stream #0.0: Video: mpeg4 (Simple Profile), yuv420p, 720x480 [PAR 8:9 DAR 4:3], 29.97 fps, 29.97 tbr, 1k tbn, 30k tbc (default)
Stream #0.1: Audio: vorbis, 48000 Hz, 5.1, s16 (default)
Stream #0.2: Subtitle: dvdsub (default)
At least one output file must be specified
Nun, für die double-layer:
Befehle
cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB VTS_01_6.VOB VTS_01_7.VOB VTS_01_8.VOB > ~/temp/mylongmovie.VOB
cd ~/temp
avconv -i mylongmovie.VOB mylongmovie.mkv
Ausgabe
avconv version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 22:20:06 with gcc 4.7.2
[mpeg @ 0x13c2d40] max_analyze_duration reached
Input #0, mpeg, from 'Cosmos-0203.VOB':
Duration: 00:00:30.24, start: 0.280633, bitrate: 2103365 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 8:9 DAR 4:3], 8000 kb/s, 27.46 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0.1[0x20]: Subtitle: dvdsub
Stream #0.2[0x21]: Subtitle: dvdsub
Stream #0.3[0x22]: Subtitle: dvdsub
Stream #0.4[0x23]: Subtitle: dvdsub
Stream #0.5[0x24]: Subtitle: dvdsub
Stream #0.6[0x25]: Subtitle: dvdsub
Stream #0.7[0x26]: Subtitle: dvdsub
Stream #0.8[0x27]: Subtitle: dvdsub
Stream #0.9[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Stream #0.10[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
File 'mylongmovie.mkv' already exists. Overwrite ? [y/N] y
[buffer @ 0x13ca3c0] w:720 h:480 pixfmt:yuv420p
Output #0, matroska, to 'mylongmovie.mkv':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 8:9 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 59.94 tbc
Stream #0.1: Audio: libvorbis, 48000 Hz, 5.1, s16
Stream #0.2: Subtitle: ass, 200 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video -> mpeg4)
Stream #0:9 -> #0:1 (ac3 -> libvorbis)
Stream #0:1 -> #0:2 (dvdsub -> ass)
Press ctrl-c to stop encoding
[ass @ 0x13d19c0] Only SUBTITLE_ASS type supported.
Subtitle encoding failed
Befehl
avconv -i mylongmovie.VOB -c:s copy mylongmovie.mkv
Ausgabe
avconv version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 22:20:06 with gcc 4.7.2
[mpeg @ 0xce1d40] max_analyze_duration reached
Input #0, mpeg, from 'mylongmovie.VOB':
Duration: 00:00:30.24, start: 0.280633, bitrate: 2103365 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 8:9 DAR 4:3], 8000 kb/s, 27.46 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0.1[0x20]: Subtitle: dvdsub
Stream #0.2[0x21]: Subtitle: dvdsub
Stream #0.3[0x22]: Subtitle: dvdsub
Stream #0.4[0x23]: Subtitle: dvdsub
Stream #0.5[0x24]: Subtitle: dvdsub
Stream #0.6[0x25]: Subtitle: dvdsub
Stream #0.7[0x26]: Subtitle: dvdsub
Stream #0.8[0x27]: Subtitle: dvdsub
Stream #0.9[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Stream #0.10[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
File 'mylongmovie.mkv' already exists. Overwrite ? [y/N] y
[buffer @ 0xce93c0] w:720 h:480 pixfmt:yuv420p
Output #0, matroska, to 'mylongmovie.mkv':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 8:9 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 59.94 tbc
Stream #0.1: Audio: libvorbis, 48000 Hz, 5.1, s16
Stream #0.2: Subtitle: dvdsub
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video -> mpeg4)
Stream #0:9 -> #0:1 (ac3 -> libvorbis)
Stream #0:1 -> #0:2 (copy)
Press ctrl-c to stop encoding
[matroska @ 0xce4b40] Application provided invalid, non monotonically increasing dts to muxer in stream 2: 49 >= 49
av_interleaved_write_frame(): Invalid argument
avconv
Antwort gegeben) annehmen. Danke. InformationsquelleAutor der Frage Carlos Eugenio Thompson Pinzón | 2013-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: springen Sie zu Abschnitt Vollständige commandline und download
ffmpeg
aus diese Website.Ursprünglich habe ich geplant, um zu beantworten, wie dies mit
avconv
weil (a) diese Antwort noch fehlt und (b)avconv
zu sein scheint, der standardmäßig auf ubuntu-Systemen heute. Allerdings scheint es derzeit noch zu buggy um dies zu erreichen - zumindest für meine testcases.ffmpeg setup
Da fragt man sich entweder für
avconv
oderffmpeg
, und ich habe gerade gelernt, dassavconv
ist ein fork vonffmpeg
(siehe diese Antwort für eine Diskussion), die ich heruntergeladen habe eine aktuelle version vonffmpeg
aus diese Website, wie die vorgenannten Antwort erläutert. Windows-builds sind ebenfalls verfügbar. Für einen typischen aktuellen 64bit Linux-build der direkte link wäre zu auf dieser Seite. Es enthält daily builds. So scrollen Sie nach unten, bis Sie sehen, die neuesten und größten, herunterladen, entpacken und mit z.B.tar xzvf ffmpeg.static.64bit.2014-02-14.tar.gz
. Der Vorteil einer statischen build ist, dass es weniger, wenn keine Abhängigkeiten. Auspacken das tarfile erstellt zwei neue executablesffmpeg
undffprobe
im aktuellen Verzeichnis.Basic command line
Nun können wir mit diesen neuesten
ffmpeg
kopieren aller Ströme im inneren desmymovie.vob*
zu einem anderen format. Zum Beispiel:Diese Befehlszeile
-i filename
-c:v copy
-c:a copy
-c:s copy
-map 0
outputfile
Let ' s erweitern Sie die obige Befehlszeile zu umgehen, einige mögliche Fehler im tool oder korrupten input-Dateien, oder einfach Einzelheiten über
.vob
- Dateien.Arbeit um für Fehler
Can't write packet with unknown timestamp
Fügen Sie die Optionen
-fflags +genpts
vor in der input-Datei.Optionen in
ffmpeg
immer nur auf input-oder output-Dateien mit dem Namen nach die aktuelle option. Diese beiden Optionen beeinflussen muss die input-Datei, so müssen Sie zuerst kommen.Diese Problemumgehung ist bedeckt dieser bug ticket und kann nicht helfen in allen Fällen.
Fehlen einige oder alle Untertitel
Dies ist sehr typisch Verhalten bei der Verarbeitung
.vob
Dateien und ist in derffmpeg
FAQ. Video-container-Dateitypen wie.avi
oder.mp4
oder.mkv
Header (Daten am Anfang der Datei) mit der Auflistung aller Inhalte der Datei. Dies macht es einfach für Spieler-und Konvertierungs-tools, um zu wissen, welche Art von Daten zu erwarten..vob
Dateien haben nicht so eine explizite Kopfzeile. Also, wennffmpeg
oderavconv
beginnen, schauen Sie die ersten paar tausend bytes. In den vob-Dateien, die Untertitel kann beginnen sehr spät. In meinem testcase, der erste Untertitel erscheint nach mehreren Sekunden, so dass die Werkzeuge sehe es nicht während des Startvorgangs. Hier ist typisches Beispiel für die Ausgabe bei der Kodierung in diesen Situationen:Wie man sehen kann, neue Untertitel-streams gefunden wurden, während die eigentliche Codierung. Wenn man versuchen würde hinzufügen
-map 5
option, um diesen streamffmpeg
sich beschweren würden, während des Startvorgangs, dass dieser stream nicht existiert.Die Lösung ist zu sagen
ffmpeg
zu analysieren, mehr bytes am Anfang der Datei, um alle zu finden-streams.Versuchen Sie, die Optionen
-analyzeduration 1000000k -probesize 1000000k
vor in der input-Datei.Erhöhen Sie die zahlen, wenn die streams sind noch nicht gefunden. In meine testcases diese zahlen waren groß genug. Die Ausgabe ändert sich dann zu:
Vollständige commandline
Jede der Kopien kann ersetzt werden mit einem codec, um tatsächlich zu konvertieren, und wahrscheinlich komprimieren der Daten. Aber wenn es nur die drei Exemplare, dann wird der Befehl kann vereinfacht werden zu:
Alle diese Optionen werden unterstützt von
avconv
. Aber dieses tool scheint immer noch ein problem mit Untertiteln. Wenn Sie diese Fehlermeldung sehen:Können Sie die Problemumgehung, indem Sie die neueste
ffmpeg
und verwenden dieses Werkzeug, statt, wie ich schon oben erklärt.InformationsquelleAutor der Antwort cfi
Wenn Sie eine Qualität sparende Lösung sollten Sie versuchen,MakeMKV.
Wenn Sie möchten, zu komprimieren die video-Spur oder MPEG-2 zu H. 264 können Sie Handbremse.
InformationsquelleAutor der Antwort Endoro