Audio aus mp4 extrahieren
- VB.NET
- .NET (FX) 4.0
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.
-
-
-
Lese die Spezifikation und schreibe auf dieser Basis ein Programm, das die Tracks der MP4-Datei extrahieren kann.
Ich habe selbst einen Demuxer für den MP4 Container zu Übungszwecken geschrieben, es ist aufwändig. Wenn du dir diesen Aufwand ersparen willst, dann musst du eben auf eine vorgefertigte Lösung zurückgreifen. Da das Framework hier meines Wissens nach nichts bereitstellt, musst du wohl auf andere Bibliotheken wie ffmpeg, mp4Box, libmp4, ... zurückgreifen.
-
@markus.obi : Ich möchte nicht für jede konversion ein neues programm starten. Ausserdem möchte ich ggf rückmeldungen(erfolgreich,arbeitet,25%,fehlgeschlagen) und das habe ich bei ffmpeg nicht, was ich so gesehen hab ;).
@Infinity : Jo, ich möcht ja nicht gleich was eigenes, ne dll genügt(danke dafür)
ThxWer Rechtschreibfehler findet darf sie behalten -
Den hast du sehr wohl bei ffmpeg du musst ihn nur richtig Interpretieren und natürlich zur dir bzw. deiner Anwendung umleiten (ProcessStartInfo.RedirectStandardOutput & ProcessStartInfo.RedirectStandardError)Antivirus 2.0: Der perfekte Schutz gegen Malware > Weitere Informationen
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten? -
@slice : Jaaa, ok sagen wir mal so: ich bin ein wenig alergisch auf externe consolenanwendungen wo ich mir etwas hilflos vorkomme(ich hoffe du weist was ich meine),ich mein jeder kann mitlesen und so, ausserdem möchte ich das dann unter mono auf nem server laufen lassen und möchte nicht allzu viele fehler bekommen(du weist ja- je weniger fehler desto besser :D). Ausserdem liebe ich dll´s
mfgWer Rechtschreibfehler findet darf sie behalten -
Externe Konsolenanwendungs zu starten ist wesentlich einfach als sich in die API von ffmpeg/avconv oder einer ähnlichen Bibliothek einzulesen und sollte auch unter Mono keine Probleme bereiten (wobei ich wenn eine Linuxdistribution die Zielplattform sein sollte eher zu einer andern Programmiersprache als VB.Net raten würde). Hier trotzdem der Link zur Dokumentation von ffmpeg: ffmpeg.org/doxygen/2.1/index.html
Natürlich gibt es noch weitere Bibliotheken die du nutzen könntest. Nur um der eventuellen nächsten Frage vorzubeugen: Wie du Funktionen aus Programmbiliotheken die mit C geschrieben wurden in VB.Net verwenden kannst wurde hier im Forum glaube ich bereits ganz gut beschrieben (Suche benutzen).
Ausserdem liebe ich dll´s
Unter unixartigen Systemen werden keine "DLLs" verwendet, deswegen solltest du lieber allgemein von Programmbiblotheken reden.
-
Jo, ma gucken xD
Hat wer ne ahnung wie ich das unter vb zum laufen bekomm:avblocks.com/download-try/ ?
Ich hab das schon convertet, so gut´s ging, aber nun hats probleme mit " t.OnContinue ", das gibts nähmlich nicht....irgendwie...
Das originale:
Spoiler anzeigen Quellcode
- /*
- * Copyright (c) 2013 Primo Software. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
- using System;
- using System.Collections.Generic;
- using System.Text;
- using PrimoSoftware.AVBlocks;
- namespace VideoConverter
- {
- class PresetDescriptor
- {
- public Preset Id;
- public string Name;
- public bool AudioOnly;
- public string FileExtension;
- public PresetDescriptor(Preset id, string name, bool audioOnly, string fileExtension)
- {
- this.Id = id;
- this.Name = name;
- this.AudioOnly = audioOnly;
- this.FileExtension = fileExtension;
- }
- public override string ToString()
- {
- if (this.FileExtension == null)
- return this.Name;
- return string.Format("{0} (.{1})", this.Name, this.FileExtension);
- }
- };
- class AvbTranscoder
- {
- private static PresetDescriptor[] presets = new PresetDescriptor[]
- {
- // video presets
- new PresetDescriptor(Preset.DVD_PAL_MP2, "DVD PAL 4:3, MP2", false, "mpg"),
- new PresetDescriptor(Preset.DVD_PAL_WIDE_MP2, "DVD PAL 16:9, MP2", false, "mpg"),
- new PresetDescriptor(Preset.DVD_NTSC_PCM, "DVD NTSC 4:3, PCM", false, "mpg"),
- new PresetDescriptor(Preset.DVD_NTSC_MP2, "DVD NTSC 4:3, MP2", false, "mpg" ),
- new PresetDescriptor(Preset.DVD_NTSC_WIDE_PCM, "DVD NTSC 16:9, PCM", false, "mpg" ),
- new PresetDescriptor(Preset.DVD_NTSC_WIDE_MP2, "DVD NTSC 16:9, MP2", false, "mpg"),
- new PresetDescriptor(Preset.AppleTv_H264, "Apple TV H.264", false, "mp4"),
- new PresetDescriptor(Preset.AppleTv_MPEG4, "Apple TV MPEG-4", false, "mp4"),
- new PresetDescriptor(Preset.Apple_LiveStreaming,"Apple Live Streaming",false, "ts"),
- new PresetDescriptor(Preset.MP4_H264, "MP4 H.264", false, "mp4"),
- new PresetDescriptor(Preset.iPad_H264, "iPad H.264", false, "mp4"),
- new PresetDescriptor(Preset.iPad_H264_HD, "iPad H.264 HD", false, "mp4"),
- new PresetDescriptor(Preset.iPad_MPEG4, "iPad MPEG-4", false, "mp4"),
- new PresetDescriptor(Preset.iPhone_H264, "iPhone, iPod Touch H.264", false, "mp4"),
- new PresetDescriptor(Preset.iPhone_MPEG4, "iPhone, iPod Touch MPEG-4", false, "mp4"),
- new PresetDescriptor(Preset.iPod_H264, "iPod Classic H.264", false, "mp4"),
- new PresetDescriptor(Preset.iPod_MPEG4, "iPod Classic MPEG-4", false, "mp4"),
- new PresetDescriptor(Preset.MPEG1, "MPEG-1", false, "mpg"),
- new PresetDescriptor(Preset.WebM, "WebM", false, "webm"),
- // audio presets
- new PresetDescriptor(Preset.AudioCD, "Audio CD Wav", true, "wav"),
- new PresetDescriptor(Preset.AAC, "AAC ADTS", true, "aac"),
- new PresetDescriptor(Preset.M4A, "AAC M4A", true, "m4a"),
- new PresetDescriptor(Preset.MP2_DVD, "MPEG Audio for DVD", true, "mp2"),
- new PresetDescriptor(Preset.MP3, "MP3", true, "mp3"),
- new PresetDescriptor(Preset.WMA_Standard, "WMA Standard", true, "wma"),
- new PresetDescriptor(Preset.WMA_Professional, "WMA Professional", true, "wma"),
- new PresetDescriptor(Preset.WMA_Lossless, "WMA Lossless", true, "wma"),
- new PresetDescriptor(Preset.OggVorbis, "Ogg (Vorbis)", true, "ogg"),
- };
- public static PresetDescriptor[] Presets
- {
- get { return presets; }
- }
- private static string FormatErrorMessage(ErrorInfo e)
- {
- return string.Format("{0} Error, Code: {1} ({2})", e.Facility, e.Code, e.Message ?? "");
- }
- // return error message or null if success
- public static string ConvertFileWithPreset(string inputFile, string outputFile, Preset outputPreset,
- EventHandler<TranscoderContinueEventArgs> onContinue,
- EventHandler<TranscoderProgressEventArgs> onProgress,
- EventHandler<TranscoderStatusEventArgs> onStatus
- )
- {
- MediaInfo mediaInfo = new MediaInfo();
- mediaInfo.InputFile = inputFile;
- if (!mediaInfo.Load())
- {
- return FormatErrorMessage(mediaInfo.Error);
- }
- using (Transcoder t = new Transcoder())
- {
- if (onContinue != null)
- t.OnContinue += onContinue;
- if (onProgress != null)
- t.OnProgress += onProgress;
- if (onStatus != null)
- t.OnStatus += onStatus;
- MediaSocket insocket = MediaSocket.FromMediaInfo(mediaInfo);
- t.Inputs.Add(insocket);
- MediaSocket outsocket = MediaSocket.FromPreset(outputPreset, Quality.Normal);
- if (outsocket == null)
- {
- return "Cannot create output preset";
- }
- outsocket.File = outputFile;
- t.Outputs.Add(outsocket);
- if (!t.Open())
- return FormatErrorMessage(mediaInfo.Error);
- if (!t.Run())
- return FormatErrorMessage(mediaInfo.Error);
- t.Close();
- }
- return null; // no error
- }
- }
- }
das convertierte:
Spoiler anzeigen Quellcode
- Imports System.Collections.Generic
- Imports System.Text
- Imports PrimoSoftware.AVBlocks
- Imports PrimoSoftware
- Namespace VideoConverter
- Class PresetDescriptor
- Public Id As Preset
- Public Name As String
- Public AudioOnly As Boolean
- Public FileExtension As String
- Public Sub New(ByVal id As Preset, ByVal name As String, ByVal audioOnly As Boolean, ByVal fileExtension As String)
- Me.Id = id
- Me.Name = name
- Me.AudioOnly = audioOnly
- Me.FileExtension = fileExtension
- End Sub
- Public Overrides Function ToString() As String
- If Me.FileExtension Is Nothing Then
- Return Me.Name
- End If
- Return String.Format("{0} (.{1})", Me.Name, Me.FileExtension)
- End Function
- End Class
- Class AvbTranscoder
- ' video presets
- ' audio presets
- Private Shared m_presets As PresetDescriptor() = New PresetDescriptor() {New PresetDescriptor(Preset.DVD_PAL_MP2, "DVD PAL 4:3, MP2", False, "mpg"), New PresetDescriptor(Preset.DVD_PAL_WIDE_MP2, "DVD PAL 16:9, MP2", False, "mpg"), New PresetDescriptor(Preset.DVD_NTSC_PCM, "DVD NTSC 4:3, PCM", False, "mpg"), New PresetDescriptor(Preset.DVD_NTSC_MP2, "DVD NTSC 4:3, MP2", False, "mpg"), New PresetDescriptor(Preset.DVD_NTSC_WIDE_PCM, "DVD NTSC 16:9, PCM", False, "mpg"), New PresetDescriptor(Preset.DVD_NTSC_WIDE_MP2, "DVD NTSC 16:9, MP2", False, "mpg"), _
- New PresetDescriptor(Preset.AppleTv_H264, "Apple TV H.264", False, "mp4"), New PresetDescriptor(Preset.AppleTv_MPEG4, "Apple TV MPEG-4", False, "mp4"), New PresetDescriptor(Preset.Apple_LiveStreaming, "Apple Live Streaming", False, "ts"), New PresetDescriptor(Preset.MP4_H264, "MP4 H.264", False, "mp4"), New PresetDescriptor(Preset.iPad_H264, "iPad H.264", False, "mp4"), New PresetDescriptor(Preset.iPad_H264_HD, "iPad H.264 HD", False, "mp4"), _
- New PresetDescriptor(Preset.iPad_MPEG4, "iPad MPEG-4", False, "mp4"), New PresetDescriptor(Preset.iPhone_H264, "iPhone, iPod Touch H.264", False, "mp4"), New PresetDescriptor(Preset.iPhone_MPEG4, "iPhone, iPod Touch MPEG-4", False, "mp4"), New PresetDescriptor(Preset.iPod_H264, "iPod Classic H.264", False, "mp4"), New PresetDescriptor(Preset.iPod_MPEG4, "iPod Classic MPEG-4", False, "mp4"), New PresetDescriptor(Preset.MPEG1, "MPEG-1", False, "mpg"), _
- New PresetDescriptor(Preset.WebM, "WebM", False, "webm"), New PresetDescriptor(Preset.AudioCD, "Audio CD Wav", True, "wav"), New PresetDescriptor(Preset.AAC, "AAC ADTS", True, "aac"), New PresetDescriptor(Preset.M4A, "AAC M4A", True, "m4a"), New PresetDescriptor(Preset.MP2_DVD, "MPEG Audio for DVD", True, "mp2"), New PresetDescriptor(Preset.MP3, "MP3", True, "mp3"), _
- New PresetDescriptor(Preset.WMA_Standard, "WMA Standard", True, "wma"), New PresetDescriptor(Preset.WMA_Professional, "WMA Professional", True, "wma"), New PresetDescriptor(Preset.WMA_Lossless, "WMA Lossless", True, "wma"), New PresetDescriptor(Preset.OggVorbis, "Ogg (Vorbis)", True, "ogg")}
- Public Shared ReadOnly Property Presets() As PresetDescriptor()
- Get
- Return m_presets
- End Get
- End Property
- Private Shared Function FormatErrorMessage(ByVal e As ErrorInfo) As String
- Return String.Format("{0} Error, Code: {1} ({2})", e.Facility, e.Code, If(e.Message, ""))
- End Function
- ' return error message or null if success
- Public Shared Function ConvertFileWithPreset(ByVal inputFile As String, ByVal outputFile As String, ByVal outputPreset As Preset, ByVal onContinue As EventHandler(Of TranscoderContinueEventArgs), ByVal onProgress As EventHandler(Of TranscoderProgressEventArgs), ByVal onStatus As EventHandler(Of TranscoderStatusEventArgs)) As String
- Dim mediaInfo As New MediaInfo()
- mediaInfo.InputFile = inputFile
- If Not mediaInfo.Load() Then
- Return FormatErrorMessage(mediaInfo.[Error])
- End If
- Using t As New PrimoSoftware.AVBlocks.Transcoder()
- If onContinue IsNot Nothing Then
- t.OnContinue += onContinue
- End If
- If onProgress IsNot Nothing Then
- t.OnProgress += onProgress
- End If
- If onStatus IsNot Nothing Then
- t.OnStatus += onStatus
- End If
- Dim insocket As MediaSocket = MediaSocket.FromMediaInfo(mediaInfo)
- t.Inputs.Add(insocket)
- Dim outsocket As MediaSocket = MediaSocket.FromPreset(outputPreset, Quality.Normal)
- If outsocket Is Nothing Then
- Return "Cannot create output preset"
- End If
- outsocket.File = outputFile
- t.Outputs.Add(outsocket)
- If Not t.Open() Then
- Return FormatErrorMessage(mediaInfo.[Error])
- End If
- If Not t.Run() Then
- Return FormatErrorMessage(mediaInfo.[Error])
- End If
- t.Close()
- End Using
- Return Nothing
- ' no error
- End Function
- End Class
- End Namespace
Wer Rechtschreibfehler findet darf sie behaltenDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „joniator“ ()
-
wenn ich unter Linux FFMPEG nutzen möchte, würde ich das wirklich exzellente node-fluent-ffmpeg nehmen:
github.com/schaermu/node-fluent-ffmpeg
node.js ist IMHO perfekt für solche Aufgaben.
-
Benutzer online 1
1 Besucher
-
Ähnliche Themen
-
Ressourcen Enptacken nach Variable
RadioCity - - Sonstige Problemstellungen
-
5 Benutzer haben hier geschrieben
- WeLoveBurgers (4)
- Infinity (2)
- slice (1)
- markus.obi (1)
- Manawyrm (1)