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.