두 개의 flv 파일을 연결하는 방법은 무엇입니까?


15

Linux 명령 줄 도구로 두 개의 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 출처
Sebastian

답변:


11

나는 개인적으로 ffmpeg의

Concat demuxer

먼저 inputs.txt다음과 같은 파일을 작성 하십시오.

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

그런 다음 ffmpeg를 사용하십시오.

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

MP4가 일반적으로 더 유용한 형식이지만을 사용할 수 있습니다output.flv . 디먹서는 1.1 이후 버전의 ffmpeg 버전에서 사용 가능합니다. 어떤 이유로 든 오래된 버전의 ffmpeg를 고수하려는 경우

연결 프로토콜

이것은 약간 복잡합니다. 당신이 컨테이너에 remux해야하므로 FLV 컨테이너는, 파일 수준에서 연결을 지원하지 않습니다 않습니다 는 MPEG 전송 스트림과 같은 -. 불행히도 h.264 비디오 및 AAC 오디오의 경우 몇 가지 비트 스트림 필터를 적용해야합니다.

리눅스를 사용하기 때문에 명명 된 파이프를 사용할 수 있습니다.

mkfifo temp0 temp1

세 개의 별도의 터미널 창 (또는 터미널 에뮬레이터가 지원하는 경우 탭- 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

실제로 하나의 (보다 복잡한 모양의) 명령 줄에서 모든 것을 실행할 수 있습니다.

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에 대해 작동합니다. 대부분 범용 적으로 h264 비디오 및 aac 오디오를 사용하기 때문입니다. 다른 코덱의 경우이 지침을 약간 조정해야합니다.


환상적인 답변! 이것이 비디오를 다시 코딩하지 않고 FLV를 병합 할 수있는 유일한 방법이었습니다.
neu242

1
@DaveJarvis 아마도 ffmpeg의 오래된 버전 (예 : 대부분의 주요 Linux 배포판의 저장소에서 제공되는 것과 같은)을 사용하고있을 것입니다. 귀하의 의견에서 다른 답변에 이르기까지 실제 ffmpeg가 포함되어 있지 않지만 libav 팀의 가짜 고의로 주름진 버전 인 데비안 또는 우분투 (또는 파생 상품)를 사용하고 있다고 생각합니다 (불쾌한 이유로 인해) 프로젝트 중심 정치). 여기 에서 정적 버전의 ffmpeg를 사용해 보거나 ffmpeg Wiki 의 지침에 따라 직접 컴파일하십시오 .
evilsoup

2

FLV 형식을 사용해야합니까? 당신은 MPG 또는 다른 형식으로 변환 할 수 있습니다 (참조 ) 다음 (참조 그들에 가입 ).

또는 flv 파일에서 직접 결합 방법을 시도해 볼 수 있습니다.

편집하다

이것 또는 이것을 읽으십시오 . MEncoder에 몇 가지 다른 매개 변수를 사용합니다.


감사. 그러나 mpg 파일을 저장하는 데 더 많은 디스크 공간이 필요합니다. 그리고 인코딩하는 데 시간이 오래 걸립니다. 두 개의 flv 파일을 연결하고 헤더를 수정하고 싶습니다.
kev

확인. 링크의 결합 방법이 flv 파일과 작동합니까? ( "cat"방법)
tumchaaditya

1

파이썬 패키지를 찾았습니다 : http://pypi.python.org/pypi/vnc2flv/


flvcat.py

flvcat.pyFLV 영화를위한 간단한 편집 프로그램입니다. 여러 개의 영화를 연결하고, 동영상의 프레임 크기를 클리핑하고, 자동 패닝 등을 사용하여 동영상을 더 작은 크기로 다시 샘플링하는 기능을 지원합니다. 구문 :

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

각 동영상 파일에 대해 범위를 지정하여 추가 할 동영상 부분을 클립 할 수 있습니다. 범위는 쉼표로 구분되고 하이픈으로 표시된 밀리 초 목록입니다. 예를 들어

out.flv:10000-20000 

는 movie out.flv (0 : 10-0 : 20)에서 10 초 클립을 의미합니다. 범위의 한쪽 끝만 지정하는 것도 지원됩니다.

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.