Ich möchte zwei FLV-Dateien (von Youtube.com heruntergeladen) mit Linux-Befehlszeilentools verketten.
Das ffmpeg
Tutorial ist zu kompliziert, so dass ich das versucht mencode
Tutorial .
Aber ich bekomme eine leere Ausgabe. Ich weiß nicht, wie ich das Problem beheben soll.
ffmpeg -i input_1.flv
ffmpeg version 0.8.1-4:0.8.1-0ubuntu1, Copyright (c) 2000-2011 the Libav developers
built on Mar 22 2012 05:29:10 with gcc 4.6.3
This program is not developed anymore and is only provided for compatibility. Use avconv instead (see Changelog for the list of incompatible changes).
[flv @ 0x89faaa0] Estimating duration from bitrate, this may be inaccurate
Seems stream 0 codec frame rate differs from container frame rate: 59.94 (2997/50) -> 29.97 (30000/1001)
Input #0, flv, from 'input_1.flv':
Metadata:
starttime : 0
totalduration : 173
totaldatarate : 457
bytelength : 9874241
canseekontime : true
sourcedata : B4A7D6704MH1334385311768958
purl :
pmsg :
Duration: 00:02:52.83, start: 0.000000, bitrate: 459 kb/s
Stream #0.0: Video: h264 (Main), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 360 kb/s, 29.97 tbr, 1k tbn, 59.94 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 99 kb/s
At least one output file must be specified
ffmpeg -i input_2.flv
ffmpeg version 0.8.1-4:0.8.1-0ubuntu1, Copyright (c) 2000-2011 the Libav developers
built on Mar 22 2012 05:29:10 with gcc 4.6.3
This program is not developed anymore and is only provided for compatibility. Use avconv instead (see Changelog for the list of incompatible changes).
[flv @ 0x85b7aa0] Estimating duration from bitrate, this may be inaccurate
Seems stream 0 codec frame rate differs from container frame rate: 59.94 (2997/50) -> 29.97 (30000/1001)
Input #0, flv, from 'input_2.flv':
Metadata:
starttime : 0
totalduration : 488
totaldatarate : 254
bytelength : 15467674
canseekontime : true
sourcedata : BADC21903MH1334385484128583
purl :
pmsg :
Duration: 00:08:07.54, start: 0.000000, bitrate: 250 kb/s
Stream #0.0: Video: h264 (Main), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 151 kb/s, 29.97 tbr, 1k tbn, 59.94 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 99 kb/s
At least one output file must be specified
mencoder -of lavf -oac copy -ovc copy -o output.flv input_1.flv input_2.flv
MEncoder svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
success: format: 0 data: 0x0 - 0x96ab41
libavformat version 53.21.0 (external)
Mismatching header version 53.19.0
libavformat file format detected.
[flv @ 0xb6b09d80]Estimating duration from bitrate, this may be inaccurate
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (aac), -aid 0
VIDEO: [H264] 640x360 0bpp 29.970 fps 360.0 kbps (43.9 kbyte/s)
[V] filefmt:44 fourcc:0x34363248 size:640x360 fps:29.970 ftime:=0.0334
** 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.
videocodec: framecopy (640x360 0bpp fourcc=34363248)
Audio format 0x4134504d is incompatible with '-oac copy', please try '-oac pcm' instead or use '-fafmttag' to override it.
Exiting...
mencoder -of lavf -oac pcm -ovc copy -o output.flv input_1.flv input_2.flv
MEncoder svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
success: format: 0 data: 0x0 - 0x96ab41
libavformat version 53.21.0 (external)
Mismatching header version 53.19.0
libavformat file format detected.
[flv @ 0xb6bb6d80]Estimating duration from bitrate, this may be inaccurate
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (aac), -aid 0
VIDEO: [H264] 640x360 0bpp 29.970 fps 360.0 kbps (43.9 kbyte/s)
[V] filefmt:44 fourcc:0x34363248 size:640x360 fps:29.970 ftime:=0.0334
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
AUDIO: 44100 Hz, 2 ch, s16le, 99.0 kbit/7.02% (ratio: 12376->176400)
Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
** 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.
videocodec: framecopy (640x360 0bpp fourcc=34363248)
VIDEO CODEC ID: 28
AUDIO CODEC ID: 2e, TAG: 0
Writing header...
[flv @ 0xb6bb6d80]Codec for stream 0 does not use global headers but container format requires global headers
[flv @ 0xb6bb6d80]Codec for stream 1 does not use global headers but container format requires global headers
[NULL @ 0xb6472380]codec not compatible with flv
Floating point exception (core dumped)
stat output.flv
File: `output.flv'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 700h/1792d Inode: 1722857 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ kev) Gid: ( 1000/ kev)
Access: 2012-05-04 10:44:45.153319669 +0800
Modify: 2012-05-04 10:44:45.153319669 +0800
Change: 2012-05-04 10:44:45.153319669 +0800
Birth: -
mencoder -forceidx -of lavf -oac copy -ovc copy -o output.flv clip1.flv clip2.flv clip3.flv
QuelleAntworten:
Ich würde das persönlich mit ffmpeg's machen
Concat Demuxer
Erstellen Sie zuerst eine Datei mit dem Namen,
inputs.txt
die folgendermaßen aussieht:Dann benutze ffmpeg wie folgt:
(Sie können verwenden
output.flv
, obwohl MP4 ein allgemein nützlicheres Format ist). Der Demuxer ist ab Version 1.1 auf ffmpeg verfügbar. Wenn Sie sich aus irgendeinem Grund an eine veraltete Version von ffmpeg halten möchten, können Sie die verwendenConcat-Protokoll
Das ist ein bisschen kompliziert. Der FLV-Container unterstützt keine Verkettung auf Dateiebene, daher müssen Sie einen Remux in einen Container ausführen, der dies tut - wie ein MPEG-Transport-Stream. Leider müssen Sie bei h.264-Video und AAC-Audio einige Bitstream-Filter anwenden.
Da Sie unter Linux arbeiten, können Sie Named Pipes verwenden.
In drei separaten Hauptfenstern (oder Registerkarten, wenn Ihr Terminal-Emulator sie unterstützt -
ctrl+shift+t
öffnet normalerweise eine neue Registerkarte) müssen Sie folgende Schritte ausführen :Tatsächlich können Sie alle diese Befehle in einer (ziemlich kompliziert aussehenden) Befehlszeile ausführen:
Stellen Sie sicher, dass output.mp4 noch nicht existiert, da dies nicht funktioniert. Wenn jemand dies auf einem System liest, das Named Pipes nicht unterstützt, muss er Folgendes verwenden:
Dadurch wird ein Paar von Zwischendateien mit den Namen temp0.ts und temp1.ts erstellt, die nach Abschluss sicher zerstört werden können.
Beachten Sie, dass diese Anweisungen für die im OP angegebenen FLV-Dateien und die wahrscheinlich modernsten FLVs aus dem Internet funktionieren, da sie fast universell h264-Video und aac-Audio verwenden. Für andere Codecs müssen diese Anweisungen etwas angepasst werden.
quelle
Bestehen Sie darauf, das FLV-Format zu verwenden? Sie können sie in mpg oder andere Formate konvertieren (siehe dies ) und sie dann verbinden (siehe dies ).
Oder vielleicht können Sie einfach die Verbindungsmethode direkt für FLV-Dateien ausprobieren.
BEARBEITEN
Lies das oder das . Es werden verschiedene Parameter für MEncoder verwendet.
quelle
Ich habe ein Python-Paket gefunden: http://pypi.python.org/pypi/vnc2flv/
flvcat.py
flvcat.py
ist ein vereinfachtes Schnittprogramm für einen FLV-Film. Es unterstützt die Verkettung mehrerer Filme, das Zuschneiden der Bildgröße eines Films, das Neuabtasten eines Films in eine kleinere Größe mit automatischem Schwenken usw. Syntax:Für jede Filmdatei können Sie die Teile des Films ausschneiden, um sie hinzuzufügen, indem Sie die Bereiche angeben. Ranges ist eine durch Kommas getrennte Liste von Millisekunden mit Bindestrich. Beispielsweise,
bedeutet einen 10-Sekunden-Clip aus movie out.flv (0: 10-0: 20). Die Angabe nur eines Bereichsendes wird ebenfalls unterstützt:
bedeutet den gesamten Film mit Ausnahme der ersten 10 Sekunden. Wenn Bereiche weggelassen werden, wird der gesamte Film verwendet.
Beispiele:
Optionen:
quelle