(gelöst) ffmpeg Metadaten ändern
(gelöst) ffmpeg Metadaten ändern
Ich möchte in einem MKV-Video (1x Video und 2x Audio) die korrekte Sprachbezeichnung für die beiden Tonspuren einsetzen. Bisher erscheint da in smplayer bei beiden "und", ich nehme an, das steht für "undefined". Es ist aber deutsch und französisch. Ich vermute, dass ich mit ffmpeg an den Metadaten drehen muss, weiß aber nicht wie. Aus der Info zu "meatadata" und "-map_metadata" in der englischsprachigen Dokumentation bin ich nicht schlau geworden.
Grüße, Günther
Grüße, Günther
Zuletzt geändert von guennid am 24.11.2016 10:51:04, insgesamt 1-mal geändert.
- Lord_Carlos
- Beiträge: 5578
- Registriert: 30.04.2006 17:58:52
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Dänemark
Re: ffmpeg Metadaten
Was ich auf die schnelle gefunden habe: http://superuser.com/a/835069
ffmpeg -i input.mp4 -map 0 -metadata:s0 title="One" \
-metadata:s1 title="Two" output.mp4
Edit: Auch ein netter Faden: https://ffmpeg.org/pipermail/ffmpeg-use ... 24080.html
ffmpeg -i input.mp4 -map 0 -metadata:s0 title="One" \
-metadata:s1 title="Two" output.mp4
Hilft dir das weiter?You can also set the language: -metadata:s1 lang=eng.
Edit: Auch ein netter Faden: https://ffmpeg.org/pipermail/ffmpeg-use ... 24080.html
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: ffmpeg Metadaten
Danke sehr! Die Seite hatte ich auch schon.
mkvmerge-gui macht den Job übrigens. Aber ich will wissen, was ich tue.
Grüße, Günther
wurde von ffmpeg angemeckert.-metadata:s1
mkvmerge-gui macht den Job übrigens. Aber ich will wissen, was ich tue.
Grüße, Günther
Re: ffmpeg Metadaten
Hier der komplette Befehl, den ich versucht habe:
... und hier die Fehlermeldung
Code: Alles auswählen
ffmpeg -i [input].mkv -map 0 -metadata:s:a:0 language="deu" metadata:s:a:1 language="fra" [autput].mkv
Code: Alles auswählen
Input #0, matroska,webm, from '[input].mkv':
Metadata:
ENCODER : Lavf57.25.100
Duration: 01:45:40.45, start: 0.120000, bitrate: 2388 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 111.11 fps, 111.11 tbr, 1k tbn, 100 tbc (default)
Metadata:
DURATION : 01:45:40,449000000
Stream #0:1: Audio: mp3, 48000 Hz, stereo, s16p, 192 kb/s (default)
Metadata:
DURATION : 01:45:40,393000000
Stream #0:2: Audio: mp3, 48000 Hz, stereo, s16p, 192 kb/s (default)
Metadata:
DURATION : 01:45:40,393000000
[NULL @ 0x10a9b60] Unable to find a suitable output format for 'metadata:s:a:1'
metadata:s:a:1: Invalid argument
Re: ffmpeg Metadaten
Code: Alles auswählen
metadata:s:a:1
Das Kommando tut jetzt, vermindert aber die Bild- und Tonqualität.
(edit)
So, geschafft:
Code: Alles auswählen
ffmpeg -i [ein].mkv -map 0 -metadata:s:a:0 language="deu" -metadata:s:a:1 language="fra" -vcodec copy -acodec copy [aus].mkv
-
- Beiträge: 1
- Registriert: 19.04.2024 08:11:05
Re: (gelöst) ffmpeg Metadaten ändern
Hallo, bin neu hier und sende zuerst einen Gruß an alle.
Danke für den Post, dadurch ist mir ein Fehler aufgefallen, den ich gemacht hatte. Auch wenn der Beitrag hier schon etwas älter ist, möchte ich meine Lösung hier Posten. Man kann sich die Angabe der Codecs sparen; dadurch ist es auf alle ffmpeg-unterstützten Formate mit dem gleichen Code anwendbar.
Beispieldatei: geladene WebM (VP9+Opus), Video (Tag=Englisch), Audio-Sprache: Deutsch, aber Tag=Englisch. Dateien mit solchen Tags wird man oft finden. Ziel = Ändern der Tags in: Video ohne Sprache und Audio in deutsch, ohne neu zu kodieren und damit ohne Qualitätsverluste in ganz kurzer Zeit. Datei wird lediglich mit den angegebenen neuen Tags kopiert. Einzige Änderungen sind das Datei-Erstelldatum und ffmpeg-Programmversion. Kodierungszeit und andere Tags bleiben erhalten. Falls nicht, neuere/aktuelle ffmpeg-Version verwenden.
Erläuterungen:
-hide_banner = unnötiges wird nicht angezeigt (Programmversion, Parameter, Syntax)
-map 0 = alle Streams einschließen. Standard, nur 1 Stream pro Typ. Siehe » FFmpeg-Wiki
-metadata:s:a:0 (Stream:Typ:Nummer[0=1]). Audio1=0; Audio2=1 etc.). Siehe » FFmpeg-Documentation (engl.)
language="" = um Tags zu entfernen, oder leer zu lassen
language=deu oder ger für deutsch, eng für englisch etc. Siehe » Wikipedia Sprachcodes (List of ISO 639-2 codes)
-c copy = um zu streamen (zu kopieren), statt neu zu kodieren. Siehe » FFmpeg-Wiki
Code für den Thread-Ersteller (1 Video 2 Audio / MKV):
Ohne -map 0 werden nur die angegebenen Spuren kopiert; so kann man ungewollte ausschließen. Wenn eine MP4 bspw. 2 Audiospuren hätte, würde im folgenden Beispiel nur 1 Video und 1 Audio kopiert.
Statt .webm, mkv oder .mp4 kann jedes von ffmpeg unterstütze Format bzw. Container verwendet werden. Dabei spielen weder die verwendeten Video- als auch Audio-Codecs eine Rolle; ffmpeg liest sie selbständig korrekt aus und schreibt sie auch genauso wieder zurück. In- und Output-Container sollten grundsätzlich gleich sein, oder die Quell-Codecs unterstützen.
Ich hoffe, es hilft jemand weiter. :wink:
Grüße SB
Danke für den Post, dadurch ist mir ein Fehler aufgefallen, den ich gemacht hatte. Auch wenn der Beitrag hier schon etwas älter ist, möchte ich meine Lösung hier Posten. Man kann sich die Angabe der Codecs sparen; dadurch ist es auf alle ffmpeg-unterstützten Formate mit dem gleichen Code anwendbar.
Beispieldatei: geladene WebM (VP9+Opus), Video (Tag=Englisch), Audio-Sprache: Deutsch, aber Tag=Englisch. Dateien mit solchen Tags wird man oft finden. Ziel = Ändern der Tags in: Video ohne Sprache und Audio in deutsch, ohne neu zu kodieren und damit ohne Qualitätsverluste in ganz kurzer Zeit. Datei wird lediglich mit den angegebenen neuen Tags kopiert. Einzige Änderungen sind das Datei-Erstelldatum und ffmpeg-Programmversion. Kodierungszeit und andere Tags bleiben erhalten. Falls nicht, neuere/aktuelle ffmpeg-Version verwenden.
Erläuterungen:
-hide_banner = unnötiges wird nicht angezeigt (Programmversion, Parameter, Syntax)
-map 0 = alle Streams einschließen. Standard, nur 1 Stream pro Typ. Siehe » FFmpeg-Wiki
-metadata:s:a:0 (Stream:Typ:Nummer[0=1]). Audio1=0; Audio2=1 etc.). Siehe » FFmpeg-Documentation (engl.)
language="" = um Tags zu entfernen, oder leer zu lassen
language=deu oder ger für deutsch, eng für englisch etc. Siehe » Wikipedia Sprachcodes (List of ISO 639-2 codes)
-c copy = um zu streamen (zu kopieren), statt neu zu kodieren. Siehe » FFmpeg-Wiki
Code: Alles auswählen
ffmpeg -hide_banner -i "INPUT.webm" -map 0 -metadata:s:v:0 language="" -metadata:s:a:0 language=deu -c copy "OUTPUT.webm"
Code: Alles auswählen
ffmpeg -hide_banner -i "INPUT.mkv" -map 0 -metadata:s:v:0 language="" -metadata:s:a:0 language=deu -metadata:s:a:1 language=fra -c copy "OUTPUT.mkv"
Code: Alles auswählen
ffmpeg -hide_banner -i "INPUT.mp4" -metadata:s:v:0 language="" -metadata:s:a:0 language=deu -c copy "OUTPUT.mp4"
Ich hoffe, es hilft jemand weiter. :wink:
Grüße SB