Odpowiedzi:
To jest odpowiedź na twój ostatni komentarz @abrahab.
Nie potrzebujesz mp4boxpliku, aby móc pseudo strumieniować go przez nginx. Moduł strumieniowy MP4 dba o to bez względu na położenie atomów moov ( mp4boxprzesuwa 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 mp4boxpseudo-streamingu jest przeplatanie filmów w celu lepszego wyszukiwania. Przesunięcie atomów Moova jest dodatkową zaletą.
Zawsze robię to dla mp4boxpliku 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.
faststartopcjiTeraz 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 faststartpowinien 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 2Mdo 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.mp4to, mp4boxa mp4 nie może szukać i nginx raportuje 500 internal server errorparametr 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 faststartdokł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