Hilfe:Video- und Audiobearbeitung in der Kommandozeile: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „{{Bildwegweiser | Titel = Hilfe<br/>Video- Audiobe-<br/>arbeitung | File:SMPlayer icon.png | Größe= 35px}} {{Ombox | text = Diese klein…“) |
(/ * Metadaten */ +Beispiel) |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | {{Bildwegweiser | Titel = [[:Kategorie:Hilfe|Hilfe]]<br/> | + | {{Bildwegweiser | Titel = [[:Kategorie:Hilfe|Hilfe]]<br/>Film- Tonbe-<br/>arbeitung | File:SMPlayer icon.png | Größe= 35px}} |
− | + | '''Zusammenfassung:''' Diese kleine Anleitung beschreibt wie man Film- oder Tondateien erzeugen kann, um diese im Wiki als [http://de.wikipedia.org/wiki/Vorbis Ogg-Vorbis (Ton)]/[http://de.wikipedia.org/wiki/Theora Ogg-Theora (Film)] Dateien zu benutzen. Einige Beispiele zur Verbesserung der Mediendateien werden beschrieben. Siehe auch: | |
− | + | * [[Hilfe: Bildschirmaufnahmen vermittels Kommandozeile]] | |
__INHALTSVERZEICHNIS__ | __INHALTSVERZEICHNIS__ | ||
Zeile 7: | Zeile 7: | ||
Kommandozeilenprogramme sind sicher nicht jedermanns Geschmack und oft für's erste schwer zu bedienen. Jedoch haben diese Programme den Vorteil, daß sie große Datenmengen sehr viel zügiger bearbeiten als ein Programm mit zusätzlich grafischer Oberfläche. Jedes Programm hat seine Vor- und Nachteile. Das Kommandozeilenprogramm <code>[http://de.wikipedia.org/wiki/Ffmpeg ffmpeg]</code> ist solch ein kleiner Rechenknecht mit sehr vielen Möglichkeiten, Mediendateien von einem Format in ein anderes zu übertragen oder einfache Verarbeitungsschritte vorzunehmen. Dazu zählen konvertieren, schneiden oder das extrahieren von Standbildern bzw. einzelnen Video-Frames. Viele Programme mit Grafischer Benutzeroberfläche bedienen sich ebenfalls <code>ffmepg</code> (siehe die [http://de.wikipedia.org/wiki/Ffmpeg Wikipedia für weitere Informationen]). | Kommandozeilenprogramme sind sicher nicht jedermanns Geschmack und oft für's erste schwer zu bedienen. Jedoch haben diese Programme den Vorteil, daß sie große Datenmengen sehr viel zügiger bearbeiten als ein Programm mit zusätzlich grafischer Oberfläche. Jedes Programm hat seine Vor- und Nachteile. Das Kommandozeilenprogramm <code>[http://de.wikipedia.org/wiki/Ffmpeg ffmpeg]</code> ist solch ein kleiner Rechenknecht mit sehr vielen Möglichkeiten, Mediendateien von einem Format in ein anderes zu übertragen oder einfache Verarbeitungsschritte vorzunehmen. Dazu zählen konvertieren, schneiden oder das extrahieren von Standbildern bzw. einzelnen Video-Frames. Viele Programme mit Grafischer Benutzeroberfläche bedienen sich ebenfalls <code>ffmepg</code> (siehe die [http://de.wikipedia.org/wiki/Ffmpeg Wikipedia für weitere Informationen]). | ||
− | Folgende Kommandozeilen-Beispiele gelten für Linux, jedoch sollten diese auch ähnlich unter Windows funktionieren, indem man <code>ffmpeg.exe</code> statt <code>ffmpeg</code> ausführen läßt. Ein einfacher Aufruf ist | + | Folgende Kommandozeilen-Beispiele gelten für Linux, jedoch sollten diese auch ähnlich unter Windows funktionieren, indem man <code>ffmpeg.exe</code> statt <code>ffmpeg</code> ausführen läßt. Ein einfacher Aufruf, eine Datei zu konvertieren, ist |
ffmpeg -i OriginalDatei.mov VerarbeiteteDatei.ogg | ffmpeg -i OriginalDatei.mov VerarbeiteteDatei.ogg | ||
− | Dabei stellt <code>ffmpeg</code> anhand der angegebenen Dateieindungen automatisch fest, was in welches Format wie konvertiert werden muß. Will man | + | Dabei stellt <code>ffmpeg</code> anhand der angegebenen Dateieindungen automatisch fest, was in welches Format wie konvertiert werden muß. Will man diesen Automatismus abändern, muß man entsprechend zusätzliche Argumente mit eingeben. Unter Linux ist alles im Handbuch, dem sogenannten Manual beschrieben (<code>man ffmpeg</code> in die Konsole tippen + Enter, zurück mit q). |
+ | |||
+ | Im Folgenden ein paar hilfreiche Kommandos, um Informationen einzusehen. | ||
+ | {| class="vertical-align-top" | ||
+ | |- | ||
+ | | style="max-width:300px" | Zuerst das Anzeigen umfangreicher Datei-Informationen | ||
+ | | | ||
+ | ffprobe Dateiname.mp4 | ||
+ | |- | ||
+ | | style="max-width:300px" | Datei mal eben kurz abspielen | ||
+ | : <code>Leertaste</code> – Pausieren | ||
+ | : <code>s</code> – '''s'''chrittweises Bild vorwärts gehen | ||
+ | : {{Maustaste|rechts}} – auf dem Abspiel-Fenster nach rechts-links ziehen, navigiert zum relativen (vorwärts-rückwärts) Zeitpunkt im Film | ||
+ | : <code>f</code> – Ansichtsmodus '''f'''ormatfüllend, voller Bildschirm ('''F'''ullscreen) | ||
+ | : <code>9</code> <code>0</code> – Lautstärke verringern, erhöhen | ||
+ | : <code>←</code> <code>→</code> – 10 Sekunden springen | ||
+ | : <code>↑</code> <code>↓</code> – 1 Minute springen | ||
+ | : <code>w</code> – durch verschiedene (Anzeige-)Filter schalten | ||
+ | : <code>q</code> – beenden („quittieren“, to '''q'''uit) des Programms | ||
+ | | | ||
+ | ffplay Dateiname.mp4 | ||
+ | |- | ||
+ | | style="max-width:300px" | Anzeigen anwendbarer Kodierungsformate: | ||
+ | | | ||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | ffmpeg -formats | ||
+ | # File formats: | ||
+ | # D. = Demuxing supported | ||
+ | # .E = Muxing supported | ||
+ | # -- | ||
+ | # D 3dostr 3DO STR | ||
+ | # E 3g2 3GP2 (3GPP2 file format) | ||
+ | # E 3gp 3GP (3GPP file format) | ||
+ | # D 4xm 4X Technologies | ||
+ | # E a64 a64 - video for Commodore 64 | ||
+ | # D aa Audible AA format files | ||
+ | # … | ||
+ | </syntaxhighlight> | ||
+ | |} | ||
== Video Konvertieren: mov (Quicktime) → ogv (Ogg-Theora) == | == Video Konvertieren: mov (Quicktime) → ogv (Ogg-Theora) == | ||
− | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <syntaxhighlight lang="bash"> | ||
################### | ################### | ||
# eine einzelne Datei | # eine einzelne Datei | ||
Zeile 42: | Zeile 66: | ||
# MOV → OGV (Video) | # MOV → OGV (Video) | ||
ffmpeg -i ${dateiName}.MOV ${dateiName}.ogv | ffmpeg -i ${dateiName}.MOV ${dateiName}.ogv | ||
− | # MOV → OGG (Audio) | + | # MOV → OGG (Mischformat) / OGA (Audio) |
− | ffmpeg -i ${dateiName}.MOV -vn ${dateiName}.ogg # -vn ohne Video | + | ffmpeg -i ${dateiName}.MOV -vn ${dateiName}.ogg |
+ | # ffmpeg weiß bei ogg nicht, ob mit oder ohne Audio, daher -vn ohne Video | ||
+ | |||
+ | ffmpeg -i ${dateiName}.MOV ${dateiName}.oga | ||
+ | # ffmpeg müßte gewollte Audio-Ausgabe automatisch erkennen | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | <syntaxhighlight lang="bash"> | + | |
+ | Als Wiederholungsschleifen für einen Ordner: | ||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
################### | ################### | ||
# Das ganze für einen | # Das ganze für einen | ||
Zeile 76: | Zeile 106: | ||
=== Einzelnes Bild extrahieren === | === Einzelnes Bild extrahieren === | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Unter Linux: Pfad + Dateiname in Variable speichern | # Unter Linux: Pfad + Dateiname in Variable speichern | ||
Zeile 87: | Zeile 117: | ||
# Bild extrahieren aber 20 Sekunden versetzt | # Bild extrahieren aber 20 Sekunden versetzt | ||
− | + | ffmpeg -i "${dateiNamePfad}.MOV" -ss 0:0:20 -y -f image2 "${dateiNamePfad}.jpg" | |
# -ss 0:0:20 → versetzte Anfang um 20 Sekunden | # -ss 0:0:20 → versetzte Anfang um 20 Sekunden | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | === Video drehen und/oder spiegeln === | |
− | === Video drehen/spiegeln === | ||
Mit <code>ffmpeg … -vf "transpose=…" …</code> kann man einfache Operationen durchführen wie drehen, und Spiegeln. Will man mehrere Änderungen vornehmen, so gibt man <code>ffmpeg … -vf "aktion1, aktion2, aktion3" …</code> an: | Mit <code>ffmpeg … -vf "transpose=…" …</code> kann man einfache Operationen durchführen wie drehen, und Spiegeln. Will man mehrere Änderungen vornehmen, so gibt man <code>ffmpeg … -vf "aktion1, aktion2, aktion3" …</code> an: | ||
Zeile 99: | Zeile 128: | ||
|- | |- | ||
| style="padding-right:2em;"| | | style="padding-right:2em;"| | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Drehen 90° Uhrzeigersinn | # Drehen 90° Uhrzeigersinn | ||
Zeile 108: | Zeile 137: | ||
|- | |- | ||
| style="padding-right:2em;"| | | style="padding-right:2em;"| | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Drehen 90° gegen Uhrzeigersinn | # Drehen 90° gegen Uhrzeigersinn | ||
Zeile 118: | Zeile 147: | ||
|- | |- | ||
| style="padding-right:2em;"| | | style="padding-right:2em;"| | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Drehen 90° mit Uhrzeigersinn + Spiegeln | # Drehen 90° mit Uhrzeigersinn + Spiegeln | ||
Zeile 127: | Zeile 156: | ||
|- | |- | ||
| style="padding-right:2em;"| | | style="padding-right:2em;"| | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Drehen 90° gegen Uhrzeigersinn + Spiegeln | # Drehen 90° gegen Uhrzeigersinn + Spiegeln | ||
Zeile 138: | Zeile 167: | ||
|- | |- | ||
| | | | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Drehen spiegeln | # Drehen spiegeln | ||
Zeile 150: | Zeile 179: | ||
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# Metadaten übernehmen und ?überschreinben | # Metadaten übernehmen und ?überschreinben | ||
Zeile 159: | Zeile 188: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == Audiobearbeitung == | + | == Ton- oder Audiobearbeitung == |
=== audio2flac, audio2wav - Skripte === | === audio2flac, audio2wav - Skripte === | ||
Zum Bearbeiten von Audiodateien ist es günstig in einem verlustfreien Format weiterzuarbeiten, damit die Qualität nicht reduziert wird, man kann <code>flac</code> oder <code>wav</code> verwenden. | Zum Bearbeiten von Audiodateien ist es günstig in einem verlustfreien Format weiterzuarbeiten, damit die Qualität nicht reduziert wird, man kann <code>flac</code> oder <code>wav</code> verwenden. | ||
− | ; Audio nach | + | ; Audio nach <code>*.flac</code>: Speichere folgende BASH-Kommandos als „audio2flac.sh“ ab und setze deren Dateiberechtigung auf „ausführbar“ |
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# require: ffmpeg | # require: ffmpeg | ||
Zeile 191: | Zeile 220: | ||
datei_erweiterung_orginal=${orginal_datei##*.} | datei_erweiterung_orginal=${orginal_datei##*.} | ||
− | ffmpeg -i "$orginal_datei" -map_metadata 0 "${orginal_datei%.*}.flac" | + | ffmpeg -i "$orginal_datei" -map_metadata 0 "${orginal_datei%.*}.flac" |
</syntaxhighlight> | </syntaxhighlight> | ||
− | ; Audio nach | + | ; Audio nach <code>*.wav</code>: Speichere folgende BASH-Kommandos als „audio2wav.sh“ ab und setze deren Dateiberechtigung auf „ausführbar“ |
− | <syntaxhighlight lang="bash"> | + | <syntaxhighlight lang="bash" style="font-size:smaller;"> |
#!/bin/bash | #!/bin/bash | ||
# require: ffmpeg | # require: ffmpeg | ||
Zeile 222: | Zeile 251: | ||
ffmpeg -i "$orginal_datei" -map_metadata 0 "${orginal_datei%.*}.wav" | ffmpeg -i "$orginal_datei" -map_metadata 0 "${orginal_datei%.*}.wav" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Tonaufnahmen schneiden oder Ausschnitte anfertigen === | ||
+ | |||
+ | Bevor man Metadaten einpflegt und mit Schneiden beginnt, ist es gut, sich einen Überblick zu verschaffen, welche Metadaten und Felder-Typen vorhanden sind (z.B. title, date usw.). Mit <code>ffprobe</code> kann man das einfach abfragen: | ||
+ | |||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | ffprobe "Lange nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3" | ||
+ | # … | ||
+ | # Input #0, mp3, from 'Lange nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3': | ||
+ | # Metadata: | ||
+ | # copyright : 2020 Deutschlandradio | ||
+ | # publisher : Deutschlandfunk Kultur | ||
+ | # album : LANGE NACHT | ||
+ | # title : Lange Nacht über Jacob Böhme, Mystiker und Theosoph | ||
+ | # comment : Deutschlandradio - 28.03.2020 00:05:00 | ||
+ | # artist : Deutschlandfunk Kultur | ||
+ | # TOPE : Steckel, Ronald | ||
+ | # date : 2020-03-28 00:05 | ||
+ | # Duration: 02:45:58.72, start: 0.000000, bitrate: 128 kb/s | ||
+ | # Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s | ||
+ | # Stream mapping: | ||
+ | # Stream #0:0 -> #0:0 (mp3 (native) -> mp3 (libmp3lame)) | ||
+ | # … | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Mit <code>-metadata title="Mein schöner Titel für meine Tonaufnahme"</code> erledigt <code>ffmpeg</code> normalerweise die Aufgabe selbst, den Titel in das richtige technische Metadaten-Feld einzuspeichern. Später während des Konvertierens stellt ffmpeg jedoch auch die tatsächlichen technischen Metadaten-Bezeichner dar, die man zur Not auch gezielt ansteuern kann mit <code>-metadata TIT2="Mein schöner Titel für meine Tonaufnahme"</code>, aber das ist normalerweise nicht nötig jedoch hilfreich zu wissen. Beim Konvertieren von MP3 können z.B. folgende technischen Felder zur Ansicht kommen: | ||
+ | |||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # Metadata: | ||
+ | # TCOP : 2020 Deutschlandradio | ||
+ | # TPUB : Deutschlandfunk Kultur | ||
+ | # TLAN : DEU | ||
+ | # TALB : LANGE NACHT | ||
+ | # TDRC : 2020-03-28 00:05 | ||
+ | # comment : Deutschlandradio - 28.03.2020 00:05:00 | ||
+ | # TPE1 : Deutschlandfunk Kultur | ||
+ | # TOPE : Steckel, Ronald | ||
+ | # TIT2 : Schau der Geburt Gottes - Ausschnitt Lange Nacht über Jacob Böhme, Mystiker und Theosoph | ||
+ | # TSSE : Lavf57.83.100 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Eine Kommando-Ausführung, ohne Variablen und dann mit Variablen, kann folgendermaßen aussehen (in diesem Beispiel lassen wir mit <code>-y</code> die Ausgabe immer überschreiben, ohne daß ffmpeg nachfragt): | ||
+ | |||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # cd "/run/media/andreas/LINUX-ext4-930GB/andreas/Musik/Audio/Universum/Jakob Böhme" | ||
+ | ffmpeg -y -i "Lange Nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3" \ | ||
+ | -ss 02:16:50 -to 02:23:25 \ | ||
+ | -metadata title="Schau der Geburt Gottes - Ausschnitt Lange Nacht über Jacob Böhme, Mystiker und Theosoph" \ | ||
+ | "Lange Nacht über Jacob Böhme - Ausschnitt 02h16m50s…02h23m25s - Geburt Gottes.mp3" | ||
+ | # herausgeschnitten wird ab (-ss) 2 Stunden 16 Minuten 50 Sekunden bis (-to) 2 Stunden 23 Minuten 25 Sekunden | ||
+ | |||
+ | # mit Variablen | ||
+ | ss="02:16:50"; ss_hms=$(sed -r "s@([0-9]+):([0-9]+):([0-9]+)@\1h\2m\3s@" <<< "$ss"); | ||
+ | to="02:23:25"; to_hms=$(sed -r "s@([0-9]+):([0-9]+):([0-9]+)@\1h\2m\3s@" <<< "$to"); | ||
+ | quelldatei="Lange Nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3"; | ||
+ | ausgabedatei="Lange Nacht über Jacob Böhme - Ausschnitt ${ss_hms}…${to_hms} - Geburt Gottes.mp3"; | ||
+ | |||
+ | metadaten_titel="Schau der Geburt Gottes - Ausschnitt Lange Nacht über Jacob Böhme, Mystiker und Theosoph"; | ||
+ | |||
+ | ffmpeg -y -i "${quelldatei}" -ss ${ss} -to ${to} \ | ||
+ | -metadata title="$metadaten_titel" \ | ||
+ | "${ausgabedatei}" | ||
+ | # selbiges Ergebnis wie oben: Es wird Datei "Lange Nacht über Jacob Böhme - Ausschnitt 02h16m50s…02h23m25s - Geburt Gottes.mp3" ausgeschrieben | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Metadaten, Eigenschaften <span id="Metadaten"></span> == | ||
+ | |||
+ | Alte Metadaten löschen und neue hineinschreiben geht mit <code>-map_metadata -1</code>, hierbei legen wir besser eine Kopie der Datei an (Video und Ton werden 1:1 kopiert <code>-c:v copy -c:a copy</code>) | ||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | datei="Am See ~ Friedrich Rückert (20230205).mp4" | ||
+ | datei_kopie="Am See ~ Friedrich Rückert (20230205) + Eigenschaften.mp4" | ||
+ | |||
+ | ffmpeg -y -i "${datei}" -c:v copy -c:a copy \ | ||
+ | -map_metadata -1 \ | ||
+ | -metadata Title="Am See (Gedicht von Friedrich Rückert, 1832)" \ | ||
+ | -metadata Author="Friedrich Rückert, Andreas Plank" \ | ||
+ | -metadata Year="2023" \ | ||
+ | -metadata Comment="Namensnennung - Weitergabe unter gleichen Bedingungen. Rückert, Friedrich: 29 Gedichte - BSB Cgm 7201, 1832. (Handschriftensammlung) Quelle: https://mdz-nbn-resolving.de/urn:nbn:de:bvb:12-bsb00102935-5" \ | ||
+ | "${datei_kopie}" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Weiterführende Literatur == | == Weiterführende Literatur == | ||
− | Chris Hermansen. 2015. „Why I Choose FLAC for Audio“. 9. November 2015. https://opensource.com/life/15/11/audio-format-linux-flac-ogg. | + | <div>Chris Hermansen. 2015. „Why I Choose FLAC for Audio“. 9. November 2015. https://opensource.com/life/15/11/audio-format-linux-flac-ogg.</div> |
+ | <div>Englische Dokumentation zu FFmpeg. https://ffmpeg.org/documentation.html (abgerufen am 22. August 2018)</div> | ||
+ | <div>Englisches Wiki zu FFmpeg. https://trac.ffmpeg.org/wiki (abgerufen am 22. August 2018)</div> | ||
[[Kategorie: Hilfe]] | [[Kategorie: Hilfe]] | ||
+ | [[Kategorie:Videobearbeitung]] | ||
+ | [[Kategorie:Audiobearbeitung]] | ||
+ | [[Kategorie:Kommandozeile]] |
Aktuelle Version vom 5. Februar 2023, 17:59 Uhr
Zusammenfassung: Diese kleine Anleitung beschreibt wie man Film- oder Tondateien erzeugen kann, um diese im Wiki als Ogg-Vorbis (Ton)/Ogg-Theora (Film) Dateien zu benutzen. Einige Beispiele zur Verbesserung der Mediendateien werden beschrieben. Siehe auch:
Kommandozeilenprogramme sind sicher nicht jedermanns Geschmack und oft für's erste schwer zu bedienen. Jedoch haben diese Programme den Vorteil, daß sie große Datenmengen sehr viel zügiger bearbeiten als ein Programm mit zusätzlich grafischer Oberfläche. Jedes Programm hat seine Vor- und Nachteile. Das Kommandozeilenprogramm ffmpeg
ist solch ein kleiner Rechenknecht mit sehr vielen Möglichkeiten, Mediendateien von einem Format in ein anderes zu übertragen oder einfache Verarbeitungsschritte vorzunehmen. Dazu zählen konvertieren, schneiden oder das extrahieren von Standbildern bzw. einzelnen Video-Frames. Viele Programme mit Grafischer Benutzeroberfläche bedienen sich ebenfalls ffmepg
(siehe die Wikipedia für weitere Informationen).
Folgende Kommandozeilen-Beispiele gelten für Linux, jedoch sollten diese auch ähnlich unter Windows funktionieren, indem man ffmpeg.exe
statt ffmpeg
ausführen läßt. Ein einfacher Aufruf, eine Datei zu konvertieren, ist
ffmpeg -i OriginalDatei.mov VerarbeiteteDatei.ogg
Dabei stellt ffmpeg
anhand der angegebenen Dateieindungen automatisch fest, was in welches Format wie konvertiert werden muß. Will man diesen Automatismus abändern, muß man entsprechend zusätzliche Argumente mit eingeben. Unter Linux ist alles im Handbuch, dem sogenannten Manual beschrieben (man ffmpeg
in die Konsole tippen + Enter, zurück mit q).
Im Folgenden ein paar hilfreiche Kommandos, um Informationen einzusehen.
Zuerst das Anzeigen umfangreicher Datei-Informationen |
ffprobe Dateiname.mp4 |
Datei mal eben kurz abspielen
|
ffplay Dateiname.mp4 |
Anzeigen anwendbarer Kodierungsformate: |
ffmpeg -formats
# File formats:
# D. = Demuxing supported
# .E = Muxing supported
# --
# D 3dostr 3DO STR
# E 3g2 3GP2 (3GPP2 file format)
# E 3gp 3GP (3GPP file format)
# D 4xm 4X Technologies
# E a64 a64 - video for Commodore 64
# D aa Audible AA format files
# …
|
Video Konvertieren: mov (Quicktime) → ogv (Ogg-Theora)
###################
# eine einzelne Datei
dateiName="FSCN1666"
###################
# Info über die Datei
ffmpeg -i ${dateiName}.MOV
# Duration: 00:00:11.01, start: 0.000000, bitrate: 9832 kb/s
# Stream #0.0(eng): Video: h264, yuvj420p, 1280x720 [PAR 1:1 DAR 16:9], 9509 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
# Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
# MOV → OGV (Video)
ffmpeg -i ${dateiName}.MOV ${dateiName}.ogv
# MOV → OGG (Mischformat) / OGA (Audio)
ffmpeg -i ${dateiName}.MOV -vn ${dateiName}.ogg
# ffmpeg weiß bei ogg nicht, ob mit oder ohne Audio, daher -vn ohne Video
ffmpeg -i ${dateiName}.MOV ${dateiName}.oga
# ffmpeg müßte gewollte Audio-Ausgabe automatisch erkennen
Als Wiederholungsschleifen für einen Ordner:
###################
# Das ganze für einen
# gesamten Ordner mittels
# for-Schleife inklusive
# neuer Metadaten
###################
for dateiName in *.MOV; do
# ${dateiName%.*} entfernt die Dateieindung
echo "Konvertiere ${dateiName%.*}.MOV nach ${dateiName%.*}.ogv ..."
# Extrahiere das modified date, stat --format Datei.mov ergibt:
# 2011-07-16 11:17:24.000000000 +0200
# ... somit ist alles nach dem ersten Leerzeichen nicht benötigte
# Information, die mit dem sed-Programm aus dieser Zeichenkette
# entfernt werden kann: ersetze 'Leerzeichen+alles-mögliche-mehrfach' (.\+) mit ''
datum=`stat --format=%y "${dateiNamePfad}.MOV" | sed "s/ .\+$//"`
ffmpeg -i "${dateiName%.*}.MOV" \
-metadata title="Titelei" \
-metadata author="Mein Name" \
-metadata date="${datum}" \
-metadata genre="Kategorie, Genre" \
-metadata license="CC-by-sa" \
"${dateiName%.*}.ogv"
done
Einzelnes Bild extrahieren
#!/bin/bash
# Unter Linux: Pfad + Dateiname in Variable speichern
dateiNamePfad="/Pfad/zur/Filmdatei"
# Bild extrahieren
ffmpeg -i "${dateiNamePfad}.MOV" -y -f image2 "${dateiNamePfad}.jpg"
# -i → input
# -y → yes als Antwort für alle Fragen des Programms, z.B. überschreiben
# -f → Format der Ausgabe
# Bild extrahieren aber 20 Sekunden versetzt
ffmpeg -i "${dateiNamePfad}.MOV" -ss 0:0:20 -y -f image2 "${dateiNamePfad}.jpg"
# -ss 0:0:20 → versetzte Anfang um 20 Sekunden
Video drehen und/oder spiegeln
Mit ffmpeg … -vf "transpose=…" …
kann man einfache Operationen durchführen wie drehen, und Spiegeln. Will man mehrere Änderungen vornehmen, so gibt man ffmpeg … -vf "aktion1, aktion2, aktion3" …
an:
Metadaten übernehmen
#!/bin/bash
# Metadaten übernehmen und ?überschreinben
ffmpeg -i "${dateiName}.MOV" \
-map_meta_data "${dateiName}.ogv" \
-metadata title="anderer Titel" \
"${dateiName}.ogv"
Ton- oder Audiobearbeitung
audio2flac, audio2wav - Skripte
Zum Bearbeiten von Audiodateien ist es günstig in einem verlustfreien Format weiterzuarbeiten, damit die Qualität nicht reduziert wird, man kann flac
oder wav
verwenden.
- Audio nach
*.flac
- Speichere folgende BASH-Kommandos als „audio2flac.sh“ ab und setze deren Dateiberechtigung auf „ausführbar“
#!/bin/bash
# require: ffmpeg
# Aufnahmedatei beispielsweise "MDR-Figaro_Hörspiel_Sonntag_2015-03-15_0704.mp3"
cd "`pwd`"
benutzung="###################################
# Benutzung:
# "`basename "$0" `" \"/Pfad/MDR-Figaro_Hörspiel_Sonntag_2015-03-15_0704.mp3\"
###################################"
orginal_datei=$1;
if [[ -z "$orginal_datei" ]] ; then
echo "# Datei fehlt (Stop) " ;
echo "$benutzung" ;
exit 1
fi
if ! [[ -e "$orginal_datei" ]] ; then
echo "# Datei unauffindbar „$orginal_datei“ (Stop) " ;
echo "$benutzung" ;
exit 1
fi
datei_erweiterung_orginal=${orginal_datei##*.}
ffmpeg -i "$orginal_datei" -map_metadata 0 "${orginal_datei%.*}.flac"
- Audio nach
*.wav
- Speichere folgende BASH-Kommandos als „audio2wav.sh“ ab und setze deren Dateiberechtigung auf „ausführbar“
#!/bin/bash
# require: ffmpeg
# Aufnahmedatei beispielsweise "MDR-Figaro_Hörspiel_Sonntag_2015-03-15_0704.mp3"
cd "`pwd`"
benutzung="###################################
# Benutzung:
# "`basename "$0" `" \"/Pfad/MDR-Figaro_Hörspiel_Sonntag_2015-03-15_0704.mp3\"
###################################"
orginal_datei=$1;
if [[ -z "$orginal_datei" ]] ; then
echo "# Datei fehlt (Stop) " ;
echo "$benutzung" ;
exit 1
fi
if ! [[ -e "$orginal_datei" ]] ; then
echo "# Datei unauffindbar „$orginal_datei“ (Stop) " ;
echo "$benutzung" ;
exit 1
fi
datei_erweiterung_orginal=${orginal_datei##*.}
ffmpeg -i "$orginal_datei" -map_metadata 0 "${orginal_datei%.*}.wav"
Tonaufnahmen schneiden oder Ausschnitte anfertigen
Bevor man Metadaten einpflegt und mit Schneiden beginnt, ist es gut, sich einen Überblick zu verschaffen, welche Metadaten und Felder-Typen vorhanden sind (z.B. title, date usw.). Mit ffprobe
kann man das einfach abfragen:
ffprobe "Lange nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3"
# …
# Input #0, mp3, from 'Lange nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3':
# Metadata:
# copyright : 2020 Deutschlandradio
# publisher : Deutschlandfunk Kultur
# album : LANGE NACHT
# title : Lange Nacht über Jacob Böhme, Mystiker und Theosoph
# comment : Deutschlandradio - 28.03.2020 00:05:00
# artist : Deutschlandfunk Kultur
# TOPE : Steckel, Ronald
# date : 2020-03-28 00:05
# Duration: 02:45:58.72, start: 0.000000, bitrate: 128 kb/s
# Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
# Stream mapping:
# Stream #0:0 -> #0:0 (mp3 (native) -> mp3 (libmp3lame))
# …
Mit -metadata title="Mein schöner Titel für meine Tonaufnahme"
erledigt ffmpeg
normalerweise die Aufgabe selbst, den Titel in das richtige technische Metadaten-Feld einzuspeichern. Später während des Konvertierens stellt ffmpeg jedoch auch die tatsächlichen technischen Metadaten-Bezeichner dar, die man zur Not auch gezielt ansteuern kann mit -metadata TIT2="Mein schöner Titel für meine Tonaufnahme"
, aber das ist normalerweise nicht nötig jedoch hilfreich zu wissen. Beim Konvertieren von MP3 können z.B. folgende technischen Felder zur Ansicht kommen:
# Metadata:
# TCOP : 2020 Deutschlandradio
# TPUB : Deutschlandfunk Kultur
# TLAN : DEU
# TALB : LANGE NACHT
# TDRC : 2020-03-28 00:05
# comment : Deutschlandradio - 28.03.2020 00:05:00
# TPE1 : Deutschlandfunk Kultur
# TOPE : Steckel, Ronald
# TIT2 : Schau der Geburt Gottes - Ausschnitt Lange Nacht über Jacob Böhme, Mystiker und Theosoph
# TSSE : Lavf57.83.100
Eine Kommando-Ausführung, ohne Variablen und dann mit Variablen, kann folgendermaßen aussehen (in diesem Beispiel lassen wir mit -y
die Ausgabe immer überschreiben, ohne daß ffmpeg nachfragt):
# cd "/run/media/andreas/LINUX-ext4-930GB/andreas/Musik/Audio/Universum/Jakob Böhme"
ffmpeg -y -i "Lange Nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3" \
-ss 02:16:50 -to 02:23:25 \
-metadata title="Schau der Geburt Gottes - Ausschnitt Lange Nacht über Jacob Böhme, Mystiker und Theosoph" \
"Lange Nacht über Jacob Böhme - Ausschnitt 02h16m50s…02h23m25s - Geburt Gottes.mp3"
# herausgeschnitten wird ab (-ss) 2 Stunden 16 Minuten 50 Sekunden bis (-to) 2 Stunden 23 Minuten 25 Sekunden
# mit Variablen
ss="02:16:50"; ss_hms=$(sed -r "s@([0-9]+):([0-9]+):([0-9]+)@\1h\2m\3s@" <<< "$ss");
to="02:23:25"; to_hms=$(sed -r "s@([0-9]+):([0-9]+):([0-9]+)@\1h\2m\3s@" <<< "$to");
quelldatei="Lange Nacht über Jacob Böhme - Mystiker und Theosoph - 02h45m59s (DRKultur, 20200328_0005_2e1330d8).mp3";
ausgabedatei="Lange Nacht über Jacob Böhme - Ausschnitt ${ss_hms}…${to_hms} - Geburt Gottes.mp3";
metadaten_titel="Schau der Geburt Gottes - Ausschnitt Lange Nacht über Jacob Böhme, Mystiker und Theosoph";
ffmpeg -y -i "${quelldatei}" -ss ${ss} -to ${to} \
-metadata title="$metadaten_titel" \
"${ausgabedatei}"
# selbiges Ergebnis wie oben: Es wird Datei "Lange Nacht über Jacob Böhme - Ausschnitt 02h16m50s…02h23m25s - Geburt Gottes.mp3" ausgeschrieben
Metadaten, Eigenschaften
Alte Metadaten löschen und neue hineinschreiben geht mit -map_metadata -1
, hierbei legen wir besser eine Kopie der Datei an (Video und Ton werden 1:1 kopiert -c:v copy -c:a copy
)
datei="Am See ~ Friedrich Rückert (20230205).mp4"
datei_kopie="Am See ~ Friedrich Rückert (20230205) + Eigenschaften.mp4"
ffmpeg -y -i "${datei}" -c:v copy -c:a copy \
-map_metadata -1 \
-metadata Title="Am See (Gedicht von Friedrich Rückert, 1832)" \
-metadata Author="Friedrich Rückert, Andreas Plank" \
-metadata Year="2023" \
-metadata Comment="Namensnennung - Weitergabe unter gleichen Bedingungen. Rückert, Friedrich: 29 Gedichte - BSB Cgm 7201, 1832. (Handschriftensammlung) Quelle: https://mdz-nbn-resolving.de/urn:nbn:de:bvb:12-bsb00102935-5" \
"${datei_kopie}"