Beheben Sie fehlerhafte Dateien und Streams mit ffmpeg, damit VLC und andere Player nicht abstürzen


16

Es ist mir oft passiert, dass ich in beschädigten Videodateien landen konnte:

  • Video von offiziellen Quellen heruntergeladen, aber mit Torrent und aus irgendeinem Grund sind nicht alle Teile in .mkv, .ts oder .mp4 vorhanden
  • Datensätze im .ts-Format, bei denen zu einem bestimmten Zeitpunkt die Daten fehlen
  • kopierte Videos von einer alten Festplatte mit beschädigten Sektoren

Wenn ich diese Videos mit VLC oder anderen Playern abspiele, werden sie bis zu einem bestimmten Punkt abgespielt und dann sofort beendet. Manchmal kann ich versuchen, den schlechten Teil zu überspringen, aber ich könnte einen anderen schlechten Sektor treffen und mich wieder zurückziehen.

Die Frage ist:

Kann ich diese Probleme (ich nehme an, Stream und Keyframes hängen zusammen) mit ffmpeg und möglicherweise in einer -c-Kopie beheben, damit ich nicht alles neu komprimieren muss?

Was ich erreichen möchte, ist ein Video in voller Länge, bei dem die fehlenden Teile übersprungen werden. Ich bevorzuge einen Fehler, anstatt dass meine Videos abstürzen.


Antworten:


25

Wenn sich Teile der Datei auf physisch fehlerhaften Sektoren befinden oder aus irgendeinem Grund das Betriebssystem nicht die gesamte Datei an FFmpeg liefern kann, kann FFmpeg natürlich nichts dagegen tun. Sie sollten ein Dienstprogramm erhalten, das diese Teile ignorieren und die wiederherstellbaren Teile in eine neue Datei wie ddrescue schreiben kann .

Wenn das Dateiprotokoll keine Fehlerursache ist, können Sie es versuchen

ffmpeg -err_detect ignore_err -i video.mkv -c copy video_fixed.mkv

1
Das klappt, aber ohne scheitert -c copy. Überraschend, dass es beim Recodieren nicht funktioniert.
Eingebildet

Trotzdem bekomme ich immer noch Invalid data found when processing input- und ffmpeg gibt auf.
Mikhail T.

Nette Lösung ... wenn das moov-Atom (auf einer MP4-Datei) noch irgendwo vorhanden ist. Was ist, wenn es nicht einmal da ist?
Gwyneth Llewelyn

5

Auf der Suche nach einer besseren Antwort könnte ein möglicher Weg sein:

ffmpeg -i video.mkv -c copy video_fixed.mkv

Ich bin mir jedoch ziemlich sicher, dass es einige zusätzliche Optionen gibt, die das Ergebnis noch verbessern können.


1
Funktioniert bei mir jedes Mal, wenn ich ein Problem mit den Metadaten, Zeitstempeln oder Containerinformationen habe. Und es ist sehr schnell, normalerweise schneller als 400x Wiedergabegeschwindigkeit.
user24601

Dieser Befehl hat meinen Hintern gerettet, um ehrlich zu sein.
neverMind9
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.