Frage

Ich möchte, dass meine Website einige Webcam-Aufnahmen in FLV-Dateien zusammenfügt (wie diese hier).Dies muss unter Linux ohne Benutzereingabe erfolgen.Wie mache ich das?Der Einfachheit halber verwende ich dasselbe FLV als beide Eingaben in der Hoffnung, ein FLV zu erhalten, das zweimal hintereinander dasselbe abspielt.

Das dürfte einfach genug sein, oder?Es gibt sogar ein vollständiges Codebeispiel im ffmpeg-FAQ.

Nun, Pipes scheinen mir Probleme zu bereiten (sowohl auf meinem Mac mit Leopard als auch auf Ubuntu 8.04), also halten wir es einfach und verwenden normale Dateien.Auch wenn ich keine Rate von 15 fps spezifiziere, spielt der visuelle Teil eine Rolle extrem schnell.Das Beispielskript wird somit zu:

ffmpeg -i input.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 \
  - > temp.a < /dev/null
ffmpeg -i input.flv -an -f yuv4mpegpipe - > temp.v < /dev/null
cat temp.v temp.v > all.v
cat temp.a temp.a > all.a
ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
  -f yuv4mpegpipe -i all.v -sameq -y output.flv

Nun, die Verwendung dieser Funktion funktioniert für den Ton, aber das Video erhalte ich nur beim ersten Mal.Dies scheint bei allen FLVs der Fall zu sein, die ich als input.flv übergebe, einschließlich der Film-Teaser, die mit red5 geliefert werden.

a) Warum funktioniert das Beispielskript nicht wie angekündigt, insbesondere warum bekomme ich nicht alle Videos, die ich erwarte?

b) Warum muss ich eine Framerate angeben, während der Wimpy-Player das FLV mit der richtigen Geschwindigkeit abspielen kann?

Die einzige Möglichkeit, zwei FLVs zu verbinden, war die Verwendung von Mencoder.Das Problem ist, dass Mencoder sich offenbar nicht an flvs anschließt:

mencoder input.flv input.flv -o output.flv -of lavf -oac copy \
-ovc lavc -lavcopts vcodec=flv

Ich erhalte eine Gleitkomma-Ausnahme ...

MEncoder 1.0rc2-4.0.1 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Xeon(R) CPU 5150 @ 2.66GHz (Family: 6, Model: 15, Stepping: 6)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 SSE SSE2

success: format: 0 data: 0x0 - 0x45b2f
libavformat file format detected.
[flv @ 0x697160]Unsupported audio codec (6)
[flv @ 0x697160]Could not find codec parameters (Audio: 0x0006, 22050 Hz, mono)
[lavf] Video stream found, -vid 0
[lavf] Audio stream found, -aid 1
VIDEO: [FLV1] 240x180 0bpp 1000.000 fps 0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:44 fourcc:0x31564C46 size:240x180 fps:1000.00 ftime:=0.0010
** MUXER_LAVF *****************************************************************
REMEMBER: MEncoder's libavformat muxing is presently broken and can generate
INCORRECT files in the presence of B frames. Moreover, due to bugs MPlayer
will play these INCORRECT files as if nothing were wrong!
*******************************************************************************
OK, exit
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffflv] vfm: ffmpeg (FFmpeg Flash video)
==========================================================================
audiocodec: framecopy (format=6 chans=1 rate=22050 bits=16 B/s=0 sample-0)
VDec: vo config request - 240 x 180 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
videocodec: libavcodec (240x180 fourcc=31564c46 [FLV1])
VIDEO CODEC ID: 22
AUDIO CODEC ID: 10007, TAG: 0
Writing header...
[NULL @ 0x67d110]codec not compatible with flv
Floating point exception

c) Gibt es für Mencoder eine Möglichkeit, FLVs korrekt zu dekodieren und zu kodieren?

Die einzige Möglichkeit, die ich bisher gefunden habe, um FLVs beizutreten, besteht darin, ffmpeg zu verwenden, um zwischen FLV und AVI hin und her zu wechseln, und Mencoder zu verwenden, um den Avis beizutreten:

ffmpeg -i input.flv -vcodec rawvideo -acodec pcm_s16le -r 15 file.avi
mencoder -o output.avi -oac copy -ovc copy -noskip file.avi file.avi
ffmpeg -i output.avi output.flv

d) Es muss einen besseren Weg geben, dies zu erreichen ...Welcher?

e) Aufgrund des Problems der Framerate allerdings nur FLVs mit konstanter Framerate (wie das, über das ich aufgenommen habe). Facebook) korrekt in avis konvertiert, aber das funktioniert nicht für die FLVs, die ich anscheinend aufzeichne (z Dieses hier oder Dieses hier).Gibt es eine Möglichkeit, dies auch für diese FLVs zu tun?

Jede Hilfe wäre sehr dankbar.

War es hilfreich?

Lösung

Ich dachte, es wäre eine schöne Lernübung, es in Ruby neu zu schreiben.

Es war.

Sechs Monate später und drei Juwelen später, Hier ist das veröffentlichte Produkt.

Ich werde noch ein wenig daran arbeiten, aber es funktioniert.

Andere Tipps

Sie werden ein sehr subtiles Problem hier begegnen, weil die meisten Video- und Audioformate (insbesondere in gewöhnlichen Containern) verwenden „globale Header“ am Anfang der Datei bedeuten, dass sie einen einzigen Header haben, die Komprimierungsinformationen (wie Breite angibt, Höhe, usw.) für die gesamte Datei. Concatting zwei Ströme wird deutlich ausfallen, wie es jetzt zwei Header statt einer und muxer kann dies nicht gefallen haben. Konvertieren in AVI wahrscheinlich das Problem in Ihrem Fall ist die Lösung, weil mencoder Code hat AVIs zu verketten -., Dass Code richtig behandelt den Kopf Ausgabe

meine Frage auf mencoder Mailingliste Nach der Buchung, versuchen andere Dinge, griff ich mein eigenes Werkzeug zu schreiben! Ich begann von flvtool und nach einigen Graben in dem Code und etwa 40 Zeilen Code zu schreiben, es funktioniert, ohne Qualitätsverlust (da es keine Umcodierung).

Ich werde es so schnell wie möglich freigeben, in der Zwischenzeit jemand interessiert ist, kann mit mir in Verbindung.

weiß nicht, ob dies tatsächlich funktionieren wird aber versuchen, diesen Befehl:

cat yourVideos/*.flv >> big.flv

Dies wird wahrscheinlich Metainformationen beschädigen so nach diesem Befehl verwenden „flvtool“ Ausführen (Ruby-Skript Sie es mit Google finden), um es zu beheben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top