it-swarm.com.de

Python extrahiert wav aus der Videodatei

Verbunden:

Wie extrahiere ich Audio aus einer Videodatei mit Python?

Audio aus Video als wav extrahieren

Wie kann ich das Audio von einem Video kopieren?

Meine Frage ist, wie ich Wav-Audiospur aus einer Videodatei extrahieren kann, sagen Sie video.avi? Ich lese viele Artikel und überall schlagen Menschen vor, (von Python) ffmpeg als Unterprozess zu verwenden (da es keine zuverlässigen Python-Bindungen für ffmpeg gibt - die einzige Hoffnung war PyFFmpeg, aber ich fand es jetzt unbemerkt). Ich weiß nicht, ob es die richtige Lösung ist und suche nach einer guten Lösung.
Ich schaute zu gstreamer und fand es schön, aber konnte meine Bedürfnisse nicht befriedigen - der einzige Weg, den ich von der Kommandozeile aus finden konnte, sieht so aus

 gst-launch-0.10 playbin2 uri=file://`pwd`/ex.mp4  audio-sink='identity single-segment=true ! audioconvert ! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)16000, channels=(int)1 ! wavenc !  filesink location=foo.wav’ 

Es ist jedoch nicht effizient, da ich beim Abspielen von Videos und beim gleichzeitigen Schreiben in wav-Dateien ewig warten muss. 

ffmpeg ist viel besser:

avconv  -i foo.mp4  -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav

Aber ich kann es nicht von Python aus starten (nicht als Befehlszeilen-Subprozess). Könnten Sie mir bitte die Vor- und Nachteile des Startens von ffmpeg aus Python als Befehlszeilenhilfsprogramm aufzeigen? (Ich meine mit Python multiprocessing Modul oder etwas Ähnlichem).

Und zweite Frage. 

Was ist der einfache Weg, lange WAV-Dateien in Stücke zu schneiden, damit ich keine Worte zerbreche? Ich meine Stücke von 10-20 Sekunden Länge mit Beginn und Ende während der Pause in Sätzen/Wörtern? 

ich weiß, wie man sie an beliebigen Stücken zerlegt:

import wave


win= wave.open('ffaudio.wav', 'rb')
wout= wave.open('ffsegment.wav', 'wb')

t0, t1= 2418, 2421 # cut audio between 2413, 2422 seconds
s0, s1= int(t0*win.getframerate()), int(t1*win.getframerate())
win.readframes(s0) # discard
frames= win.readframes(s1-s0)

wout.setparams(win.getparams())
wout.writeframes(frames)

win.close()
wout.close()
16
xolodec

Es ist eine sehr einfache Aufgabe mit ffmpeg mit python subprozess und es gibt einen Grund, warum Leute auf diese Lösung als gute Lösung hinweisen.

Dies ist der grundlegende Befehl zum Extrahieren von Audio aus einer bestimmten Videodatei:

ffmpeg -i test.mp4 -ab 160k -ac2 -ar 44100 -vn audio.wav

Der Python-Code umfasst nur diesen Befehl:

import subprocess

command = "ffmpeg -i C:/test.mp4 -ab 160k -ac 2 -ar 44100 -vn audio.wav"

subprocess.call(command, Shell=True)

Sie müssen sicherstellen, dass ffmpeg eine bekannte Aufgabe ist. In Ihren Systemumgebungsvariablen sollte unter path der Pfad zu ffmpeg.exe aufgeführt sein, oder Sie können einfach den vollständigen Pfad zum Exe in Ihrem Python-Code verwenden.

23
user1767754

Audioclips können aus einer Audiodatei oder aus dem Soundtrack einer Videodatei erstellt werden

from moviepy.editor import *
audioclip = AudioFileClip("some_audiofile.mp3")
audioclip = AudioFileClip("some_video.avi")

https://zulko.github.io/moviepy/getting_started/audioclips.html

dies könnte besser und einfacher zu verwenden sein als ffmpeg, es wird als Python-Video-Konverter bezeichnet und kann verwendet werden, um das Audio aus dem Video zu extrahieren, https://github.com/senko/python-video-converter könnte in Verbindung mit mpg123 wie folgt verwendet werden 

    from converter import Converter
    import os
    c = Converter()
    clip = 'clip.avi'
    conv = c.convert(clip, 'audio.mp3', {'format':'mp3','audio':{'codec': 'mp3','bitrate':'22050','channels':1}})
    for timecode in conv:
        pass    
    os.system("mpg123 -w audio.wav audio.mp3")

das Konvertermodul extrahiert das Audio aus dem Video und speichert es als MP3-Datei, während mpg123 die MP3-Datei in mp4 konvertiert.

eine andere Lösung sieht folgendermaßen aus: Verwendung des Moviepy-Moduls in Python https://github.com/Zulko/moviepy

    import moviepy.editor as mp
    clip = mp.VideoFileClip("video.avi").subclip(0,20)
    clip.audio.write_audiofile("theaudio.mp3")

die Zahlen in der Subclip-Funktion geben den Beginn und das Ende des Audios in Sekunden an. Sie können dann mpg123 verwenden, um das Audio in ein anderes Format zu ändern

4
programmer44

oder extrahiere mp3 aus

import os

VIDEOS_PATH = '/Users/****/videos'
VIDEOS_EXTENSION = '.webm'  # for example
AUDIO_EXT = 'wav'

EXTRACT_VIDEO_COMMAND = ('ffmpeg -i "{from_video_path}" '
                         '-f {audio_ext} -ab 192000 '
                         '-vn "{to_audio_path}"')

os.chdir(VIDEOS_PATH)
files = os.listdir(VIDEOS_PATH)
for f in files:
    if not f.endswith(VIDEOS_EXTENSION):
        continue

    audio_file_name = '{}.{}'.format(f, AUDIO_EXT)
    command = EXTRACT_VIDEO_COMMAND.format(
        from_video_path=f, audio_ext=AUDIO_EXT, to_audio_path=audio_file_name,
    )
    os.system(command)
0
Nick Korolkov