HTTP 스트리밍을위한 MP4 비디오 제작


25

어떻게 변환 할 수 있습니다 some.flv또는 some.avi또는 some.wmvFFmpeg에 함께이 비디오는 JW Player에서 재생하고 시크 될 것이라고 확신 할 수 있나요?

답변:


9

이것은 @abrahab의 마지막 코멘트에 대한 답변입니다.

mp4boxnginx를 통해 파일을 의사 스트리밍 할 수 있도록 파일이 필요하지 않습니다 . MP4 스트리밍 모듈은 무브 원자의 위치에 관계없이 처리 mp4box합니다 (무브 원자를 파일의 시작 부분으로 이동).


이제 500 서버 오류의 경우 mp4box에 "-frag"옵션을 사용하고 있습니까? MP4 스트리밍 모듈은 조각난 MP4 파일을 읽을 수 없습니다. mp4box의사 스트리밍을 잘 사용하려면 더 나은 탐색을 위해 비디오를 인터리브하는 것이 좋습니다. Moov 원자 이동은 추가 장점입니다.

나는 항상 mp4boxFFmpeg로 인코딩 된 파일 에이 작업을 수행 합니다.

MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4

또한 기본적으로 MP4 파일을 500 밀리 초 청크로 인터리브합니다.


1
새 파일을 만들지 않고 "in-place"파일 인터리빙을 수행하려면 다음을 사용하십시오.MP4Box -isma -inter 500 Myvideo.mp4
Vineet

45

MP4의 H.264

일반적으로 MP4 컨테이너 내에 x264 비디오를 만들려고합니다. 이 옵션은 기본적으로 모든 장치 및 브라우저에서 지원됩니다.

다음으로 충분합니다. 입력 이름과 CRF 옵션을 교체하십시오. 후자는 제인 값의 범위가 19에서 25까지 인 품질을 설정합니다. 낮을수록 품질은 좋아 지지만 비트 전송률은 높아집니다.

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4

GUI 방식이 마음에 들면 핸드 브레이크 를 사용 하여 인코딩 할 수도 있습니다 .

faststart옵션 사용

이제해야 할 일은 MP4 컨테이너의 MOOV 아톰 을 처음으로 옮기는 것입니다 . 이 원자 (본질적으로 MP4 컨테이너의 데이터 단위)에는 비디오 / 오디오 스트림 자체에 대한 중요한 메타 데이터가 포함됩니다. -movflags faststart정확히 그렇게해야합니다.

FFmpeg 버전에이 옵션이 없으면 업그레이드를 고려하십시오. 업그레이드 할 수없는 경우 아래 도구 중 하나를 사용하여 동일한 작업을 수행 할 수 있습니다.

  • Adobe AIR 응용 프로그램 인 QTIndexSwapper

  • MP4Box , 무료 및 오픈 소스로, 다음과 유사한 명령을 실행하여 간격을 변경할 수 있습니다 (여기서는 500).

    mp4box -inter 500 input.mp4

  • qt-faststart in Python은 Python이 설치된 모든 곳에서 작동합니다.

    qtfaststart input.mp4

그게 다야.

비트 전송률 / 품질 제어

물론, 스트리밍의 경우 실제로 비트 전송률을 제한하여 특정 범위 내에 머무를 수 있습니다. 내 블로그 게시물에서 요금 관리 방법에 대해 자세히 알아볼 수 있습니다 .

예를 들어, -maxrate 2M -bufsize 2M인코딩 옵션 을 추가 하면 인코딩을 2Mbit / s로 제한하여 720p 비디오에 충분할 수 있습니다. 필요한 비트 전송률은 물론 콘텐츠의 복잡도에 따라 다릅니다. 약간의 시행 착오가 필요합니다.


덕분에, 나는 모두에게 같은 방법으로 할 수 있지만, 내가 할 :( 비디오 여전히 문제를 보인다 ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4다음 mp4box과 MP4가 추구하고 nginx를보고 할 수 없습니다 500 internal server error시작 매개 변수에 대한 더 그 0. 때없이 코딩 비디오 -vcoded libx264(기본 MP4 코더) 모든 작업 파일 (하지만 quality! sick!) :( (죄송합니다, 지금 당신은 대답 할 수 없습니다)
abrahab

이것은 비디오 변환 문제가 아니라 NginX의 h.264 플러그인 문제처럼 보입니다. 나는 웹 비디오 스트리밍 자체 의 전문가는 아니지만 Stack Overflow에서 이미 이것에 대해 질문 했습니까? stackoverflow.com/questions/11079748/…
slhck 2016 년

또한 nginx 가이 비디오 형식을 제대로 읽을 수 없다고 생각합니다. YouTube의 비디오도 잘 재생됩니다. 예, nginx 문제에 대해 스택에 묻는 것이 있지만 대답이없는 것 같습니다. :(
abrahab

3
-movflags faststart내가 정확히 필요한 것에 대해 +1
Andrew

: 링크가 죽었 필요가 web.archive.org 사용하는 web.archive.org/web/20140201142344/http://www.longtailvideo.com/...
MALAT

5

다음을 수행하여 스트리밍 할 수없는 AVI 또는 MP4를 모든 것을 다시 인코딩하지 않고도 간단히 변환 할 수 있습니다.

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

무브 원자 만 이동하면되기 때문에 아무것도 다시 인코딩 할 필요가 없습니다.


-1

ffmpeg로 이것을 시도 할 수 있습니다 :

ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"

5
인터넷 스트리밍 비디오를위한 22kHz PCM 스테레오 오디오? 너무 효율적으로 들리지 않습니다. 그러면 왜 오디오 비트 전송률을 128k로 설정하겠습니까?
slhck

@slhck, "-ar 22050"을 "ar 44100"으로 대체하여 22k에서 44k로 변경할 수 있습니다.
Searush

1
@SEARAS 문제는 샘플링 속도가 아닙니다. 오디오는 압축되지 않은 PCM 스테레오라는 사실입니다. 인터넷 스트리밍 용. 그건 아냐
slhck

이 답변은 품질이 매우 낮으므로 제거해야합니다. 매개 변수는 내용의 프레임 속도, 비디오 해상도 및 오디오 샘플링 속도를 변경하고 비효율적이거나 낮은 품질의 결과를 생성 할 수 있습니다 (ffmpeg는 더 안전하거나 더 나은 매개 변수 자체를 선택할 수 있음). 더 적은 수의 스레드로 제한되어 성능이 저하되며 -acodec pcm_s16le(오류 :)에서도 작동하지 않습니다 Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument. IETF 초안과 같이 이러한 매개 변수를 정확하게 선택해야하는 좋은 이유도없는 것으로 보입니다.
LiveWireBT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.