문제

내 웹사이트가 FLV 파일(예: 이와 같은)의 일부 웹캠 녹화에 참여하기를 원합니다.이 작업은 Linux에서 사용자 입력 없이 수행되어야 합니다.어떻게 해야 하나요?단순화를 위해 동일한 내용을 두 번 연속으로 재생하는 flv를 얻기 위해 두 입력에 동일한 flv를 사용하겠습니다.

충분히 쉬울 것입니다. 그렇죠?심지어 전체 코드 예제도 있습니다. ffmpeg FAQ.

글쎄, 파이프가 나에게 문제를 일으키는 것 같습니다(Leopard를 실행하는 Mac과 Ubuntu 8.04 모두에서). 간단하게 유지하고 일반 파일을 사용하겠습니다.또한 15fps의 속도를 지정하지 않으면 시각적 부분이 재생됩니다. 매우 빠르다.따라서 예제 스크립트는 다음과 같습니다.

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

음, 이것을 사용하면 오디오에는 효과가 있지만 처음으로 비디오만 얻을 수 있습니다.이는 red5와 함께 제공되는 영화 티저를 포함하여 input.flv로 던지는 모든 flv의 경우인 것 같습니다.

a) 예제 스크립트가 광고된 대로 작동하지 않는 이유는 무엇입니까? 특히 기대한 비디오를 모두 얻지 못하는 이유는 무엇입니까?

b) Wimpy 플레이어가 flv를 올바른 속도로 재생할 수 있는데 왜 프레임 속도를 지정해야 합니까?

두 flv에 합류하는 유일한 방법은 mencoder를 사용하는 것이었습니다.문제는 mencoder가 flv에 가입하지 않는 것 같습니다.

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

부동 소수점 예외가 발생합니다...

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) mencoder가 flv를 올바르게 디코딩하고 인코딩할 수 있는 방법이 있습니까?

따라서 지금까지 flv에 가입하기 위해 제가 찾은 유일한 방법은 ffmpeg를 사용하여 flv와 avi 사이를 오가며 mencoder를 사용하여 avis에 가입하는 것입니다.

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) 이를 달성하는 더 좋은 방법이 있어야 합니다...어느 것?

e) 하지만 프레임 속도 문제 때문에 일정한 프레임 속도를 갖는 flv만 사용 가능합니다(제가 녹화한 것과 같은 것). 페이스북)은 avis로 올바르게 변환되지만, 녹음 중인 flv(예: 이 하나 또는 이 하나).이 flv에도 이 작업을 수행할 수 있는 방법이 있나요?

어떤 도움이라도 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

나는 그것을 Ruby로 다시 작성하는 것이 좋은 학습 연습이 될 것이라고 생각했습니다.

그랬다.

6개월 후, 그리고 보석 3개를 받은 후, 여기 출시된 제품이 있어요.

나는 여전히 그것에 대해 조금 노력할 것이지만 작동합니다.

다른 팁

대부분의 비디오 및 오디오 형식(특히 일반 컨테이너)은 "전역 헤더"를 사용하기 때문에 여기서 매우 미묘한 문제에 직면하게 됩니다. 즉, 파일 시작 부분에 압축 정보(예: 너비, 높이 등)를 지정하는 단일 헤더가 있음을 의미합니다. ) 전체 파일에 대해.두 개의 스트림을 연결하는 것은 이제 하나가 아닌 두 개의 헤더를 갖게 되고 다중화기가 이를 좋아하지 않을 수 있으므로 확실히 실패합니다.mencoder에는 AVI를 연결하는 코드가 있으므로 AVI로 변환하면 문제가 해결될 수 있습니다. 해당 코드는 헤더 문제를 올바르게 처리합니다.

mencoder의 메일링 리스트에 내 질문을 게시하고 다른 작업을 시도한 후 나만의 도구를 작성하기로 결정했습니다!나는부터 시작했다 flvtool 그리고 코드를 좀 파고 약 40줄의 코드를 작성한 후에는 품질 저하 없이 작동합니다(트랜스코딩이 없기 때문에).

최대한 빨리 공개하겠습니다. 그동안 관심 있는 사람은 누구나 저에게 연락할 수 있습니다.

이것이 실제로 작동하는지 모르겠지만 다음 명령을 사용해보십시오.

cat yourVideos/*.flv >> big.flv

이렇게 하면 메타 정보가 손상될 수 있으므로 해당 명령을 실행한 후 "flvtool"(Google에서 찾을 수 있는 Ruby 스크립트)을 사용하여 문제를 해결하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top