Odpowiedzi:
To jest odpowiedź na twój ostatni komentarz @abrahab.
Nie potrzebujesz mp4box
pliku, aby móc pseudo strumieniować go przez nginx. Moduł strumieniowy MP4 dba o to bez względu na położenie atomów moov ( mp4box
przesuwa atom moov na początek pliku).
Teraz, jeśli chodzi o błąd serwera 500, czy używasz opcji „-frag” z mp4box? Moduł przesyłania strumieniowego MP4 nie może odczytać pofragmentowanych plików MP4. Dobrym zastosowaniem mp4box
pseudo-streamingu jest przeplatanie filmów w celu lepszego wyszukiwania. Przesunięcie atomów Moova jest dodatkową zaletą.
Zawsze robię to dla mp4box
pliku zakodowanego w FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Spowoduje to również przeplot pliku MP4 domyślnie w 500 milisekundach porcji.
Ogólnie rzecz biorąc, chcesz utworzyć wideo x264 w kontenerze MP4. Ta opcja jest obsługiwana przez praktycznie każde urządzenie i przeglądarkę.
Poniższe powinny wystarczyć. Pamiętaj, aby zastąpić nazwę wejściową i opcje CRF. Ten ostatni określa jakość, w której wartości rozsądne mieszczą się w zakresie od 19 do 25 - niższa oznacza lepszą jakość, ale także wyższą przepływność:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
Możesz także użyć hamulca ręcznego do kodowania, jeśli podoba ci się GUI.
faststart
opcjiTeraz musisz przenieść atom MOOV pojemnika MP4 na początek. Ten atom (w istocie jednostka danych w kontenerze MP4) będzie zawierać ważne metadane dotyczące samych strumieni wideo / audio. -movflags faststart
powinien zrobić dokładnie to.
Jeśli wersja FFmpeg nie ma tej opcji, rozważ aktualizację. Jeśli nie możesz dokonać aktualizacji, możesz to samo osiągnąć za pomocą jednego z poniższych narzędzi:
QTIndexSwapper , aplikacja Adobe AIR
MP4Box , darmowy i open source, uruchamiający polecenie podobne do następującego, w którym możesz zmienić interwał (tutaj 500):
mp4box -inter 500 input.mp4
qt-faststart w Pythonie , który działa wszędzie tam, gdzie jest zainstalowany Python.
qtfaststart input.mp4
O to chodzi.
Teraz, oczywiście, w przypadku przesyłania strumieniowego możesz chcieć ograniczyć przepływność, aby pozostać w określonych granicach. Możesz przeczytać więcej na ten temat w moim blogu na temat metod kontroli stawek .
Na przykład, dodając -maxrate 2M -bufsize 2M
do opcji kodowania, ograniczasz kodowanie do 2 Mbit / s, co może być wystarczające dla wideo 720p. Wymagana szybkość transmisji zależy oczywiście od stopnia złożoności treści. To wymaga trochę prób i błędów.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
to, mp4box
a mp4 nie może szukać i nginx raportuje 500 internal server error
parametr początkowy bardziej niż 0
. kiedy wideo zakodowane bez -vcoded libx264
(domyślny koder mp4) cały plik roboczy (ale jakość! chory!) :( (przepraszam, teraz nie wolno głosować za odpowiedzią)
-movflags faststart
dokładnie to, czego potrzebowałem
Możesz po prostu przekonwertować AVI lub MP4 bez możliwości przesyłania strumieniowego, również bez ponownego kodowania wszystkiego, wykonując następujące czynności:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Nie trzeba ponownie kodować niczego, ponieważ wystarczy przesunąć atom Moova.
Możesz spróbować z 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"
-acodec pcm_s16le
(error:) Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
. Wydaje się, że brakuje też dobrego powodu, takiego jak szkic IETF, dlaczego dokładnie wybrać te parametry.
MP4Box -isma -inter 500 Myvideo.mp4