2010-12-29 22 views
14

Mein Ziel ist es, mit wget eine FLV-Datei herunterzuladen und die Ausgabe zu ffmpeg zu leiten, um es in eine MP3 zu konvertieren. Auf diese Weise kann der Benutzer die MP3 herunterladen, ohne darauf warten zu müssen, dass der FLV zuerst auf meinen Server lädt. Ich habe damit herumgespielt, und es scheint, dass ffmpeg nur auf Rohvideo pumpen kann. So war ich mit so etwas wie dies funktioniert:Wie verwende ich Rohrleitungen mit ffmpeg?

wget -O - 'videoinput.flv' | ffmpeg -y -i - -vcodec rawvideo -f yuv4mpegpipe - | ffmpeg -y -i - -ab 128k audiooutput.mp3 

Wer Erfahrung mit dieser Art von on-the-fly ffmpeg Encodierung?

+0

Frage zu Superuser? – marcog

Antwort

2

"ffmpeg kann nur Piping auf rohen Video" < - Es ist nicht.

Sie können ein beliebiges Format ffmpeg unterstützen.

Und in Ihrem Befehlszeilenbeispiel extrahieren Sie Raw-Video aus dem FLV und kodieren in MP3. Es kann nie so gemacht werden.

2

Ein Teil des Problems, dem Sie begegnen werden, ist, dass einige Dateiformate wichtige Dateicontainerinformation unter der Ende der Datei haben. Ein wget-Aufruf direkt an ffmpeg ist daher ein potentieller Dateiunterbrecher, da ffmpeg sich ersticken kann, bevor die Datei vollständig heruntergeladen wurde.

Sie sind besser dran, eine Reihe von Befehlen zu betrachten: wget'ing die Datei dann ffmpeg darauf ausführen. Es ignoriert die Pipe-Fähigkeiten, aber das ist das Problem, das Sie mit bestimmten Dateien arbeiten. Auch

, würde ich einen Blick auf dieser FAQ Antwort von FFmpegs Website in Bezug auf eine Reihe von Methoden nehmen, wenn Videos mit mkfifo und verketten FLV die Rohrleitungen: http://www.ffmpeg.org/faq.html#TOC27

15

Ich habe nicht getestet dies sollte aber so oder sehr sein schließen.

2

Eine potenziell bessere Option für die Verrohrung von einem separaten HTTP-Client ist die Verwendung der integrierten Datei von ffmpeg. Zumindest neuere Versionen können eine URL als Eingabedateiargument verwenden. Auf diese Weise kann FFmpeg die Datei selbst herunterziehen, und bei Formaten, die Container-Daten nahe dem Ende der Datei haben, kann sie (wenn der Server dies unterstützt) zuerst diesen Teil der Datei entgegennehmen, im Gegensatz zu Locken aus curl oder wget, die holen die Datei der Reihe nach. Siehe http://ffmpeg.org/ffmpeg-all.html#http

+1

Manchmal haben Sie einfach nicht den Link, d. H. Beim Herunterladen eines Videos mit 'youtub-dl'. –

+0

huh, TIL, dass youtube-dl das Video an STDOUT ausgeben kann – dn3s

+0

Ja, mit der Option '-o -' wird es auf stdout ausgegeben –