2つのflvファイルを連結する方法は?


15

Linuxコマンドラインツールで2つのflvファイル(Youtube.comからダウンロード)を連結します。チュートリアルは複雑すぎるので、私が試しているチュートリアルを。 しかし、空の出力が得られます。問題を修正する方法がわかりません。
ffmpegmencode

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 出典
セバスチャン

回答:


11

私は個人的にffmpegのでこれを行うだろう

Concatデマルチプレクサ

まず、inputs.txt次のようなファイルを作成します。

file 'input1.flv'
file 'input2.flv'

次に、ffmpegを次のように使用します。

ffmpeg -f concat -i inputs.txt -c copy output.mp4

使用できますoutput.flvが、MP4は一般的にはより便利な形式です)。デマルチプレクサは、1.1以降のffmpegのバージョンで利用可能です。何らかの理由でffmpegの古いバージョンに固執したい場合は、

連結プロトコル

これは少し複雑です。あなたはコンテナにリマックスする必要がありますので、FLVコンテナは、ファイルレベルで連結をサポートしていない MPEGトランスポートストリームのように- 。残念ながら、h.264ビデオとAACオーディオでは、いくつかのビットストリームフィルターを適用する必要があります。

Linuxを使用しているため、名前付きパイプを使用できます。

mkfifo temp0 temp1

3つの別々のターミナルウィンドウ(またはターミナルエミュレータがサポートしている場合はタブ- ctrl+shift+t通常は新しいタブを開きます)で次の操作を行う必要があります。

ffmpeg -i input0.flv -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp0

ffmpeg -i input1.flv -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1

ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

実際、これらすべてを1つの(かなり複雑に見える)コマンドラインで実行できます。

ffmpeg -i input0.flv -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp0 2> /dev/null & \
ffmpeg -i input1.flv -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

output.mp4がまだ存在していないことを確認してください。これは機能しません。誰かがこれを読んでいる場合、名前付きパイプをサポートしていないシステム上で、彼らは使用する必要があります:

ffmpeg -i input0.flv -map 0 -c copy -f mpegts -bsf h264_mp4toannexb temp0.ts
ffmpeg -i input1.flv -map 0 -c copy -f mpegts -bsf h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -absf aac_adtstoasc output.mp4

これにより、temp0.tsおよびtemp1.tsと呼ばれる中間ファイルのペアが作成されます。これらのファイルは、完了したら安全に破棄できます。

これらの手順は、OPで指定されたFLVファイル、およびほとんどの場合インターネットからの最新のFLVで機能することに注意してください。他のコーデックについては、これらの手順を少し調整する必要があります。


素晴らしい答え!これは、ビデオを再コーディングせずにFLVをマージする唯一の方法でした。
neu242

1
@DaveJarvisは、おそらくffmpegの古いバージョン(ほとんどの主要なLinuxディストリビューションのリポジトリで提供されているものなど)を使用しています。あなたのコメントから別の答えへのあなたは、本当のffmpegさえも含まないDebianまたはUbuntu(または派生物)を使用していると思いますが、libavチームからの偽の意図的に不自由なバージョンプロジェクト分岐政治)。ここから静的バージョンのffmpegを試すか、ffmpeg wikiの指示に従って独自のバージョンをコンパイルします。
evilsoup

2

FLV形式の使用を主張していますか?それらをmpgまたは他の形式に変換し(これを参照)、それらを結合することができます(これを参照)。

または、flvファイルで直接結合方法を試すことができます。

編集

これまたはこれを読んでください。MEncoderにはいくつかの異なるパラメーターが使用されます。


感謝。ただし、mpgファイルを保存するには、より多くのディスク容量が必要です。また、エンコードには時間がかかります。2つのflvファイルを連結し、ヘッダーを修正したい。
ケブ

OK。リンクの参加方法はflvファイルで機能しますか(「cat」方法)。
-tumchaaditya

1

Pythonパッケージを見つけました:http : //pypi.python.org/pypi/vnc2flv/


flvcat.py

flvcat.pyFLVムービー用の単純な編集プログラムです。複数のムービーの連結、ムービーのフレームサイズのクリッピング、自動パンによるムービーの小さいサイズへの再サンプリングなどをサポートしています。

flvcat.py [options] src1[:ranges1] src2[:ranges2] ... output 

ムービーファイルごとに、範囲を指定して追加するムービーの部分をクリップできます。範囲は、コンマで区切られた、ハイフンで区切られたミリ秒のリストです。例えば、

out.flv:10000-20000 

ムービーout.flvの10秒のクリップ(0:10-0:20)を意味します。範囲の一方の端のみの指定もサポートされています。

out.flv:10000- 

最初の10秒を除く映画全体を意味します。範囲を省略すると、ムービー全体が使用されます。

例:

$ flvcat.py movie1.flv movie2.flv output.flv
(Concatenate movie1.flv and movie2.flv and save it as output.flv)

$ flvcat.py -W 640x480 movie1.flv output.flv
(Resize the movie1.flv with auto-panning with its window size 640x480 and save it as output.flv)

$ flvcat.py movie1.flv:15000-30000 output.flv
(Clip the part of movie1.flv from 0:15 to 0:30 and save it as output.flv)

$ flvcat.py movie1.flv:2500- output.flv
(Chop the first 2.5 seconds off and save it as output.flv)

オプション:

-r fps
    Specifies the number of frames per second. (default: 15) 
-K keyframe
    Specifies the rate of key frames that is inserted in every this number of frames. (default: every 150 frames) 
-B blocksize
    Specifies the block size. (default: 32) 
-C wxh{+|-}x{+|-}y
    Specifies the clipping. (default: entire frame) 
-W wxh
    Specifies the window size for auto panning. Auto panning tracks the changes in the screen and tries to focus on the active part of the screen. This helps reducing the movie screen size. (default: no auto panning) 
-S speed
    Specifies the speed of auto panning. (default: 60 frames) 
-f
    Forces overwriting the output file. 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.