Antworten:
Dies ist eine Antwort auf den letzten Kommentar von dir @abrahab.
Sie brauchen keine mp4box
Datei, um sie per Pseudo-Streaming über Nginx zu übertragen. Das MP4-Streaming-Modul erledigt dies unabhängig von der Positionierung der Moov-Atome ( mp4box
verschiebt das Moov-Atom zum Dateianfang).
Verwenden Sie für den 500-Server-Fehler die Option "-frag" für mp4box? MP4-Streaming-Modul kann keine fragmentierten MP4-Dateien lesen. Gute Verwendung mp4box
für Pseudo-Streaming ist das Interleaven der Videos für eine bessere Suche. Moov Atom Shifting ist ein zusätzlicher Vorteil.
Ich mache das immer mit mp4box
einer FFmpeg-kodierten Datei
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Dies verschachtelt die MP4-Datei standardmäßig in 500 Millisekunden.
Im Allgemeinen möchten Sie x264-Videos in einem MP4-Container erstellen. Diese Option wird grundsätzlich von jedem Gerät und Browser unterstützt.
Folgendes sollte ausreichen. Stellen Sie sicher, dass Sie die Optionen für Eingabenamen und CRF ersetzen. Letzteres legt die Qualität fest, wobei die normalen Werte zwischen 19 und 25 liegen. Niedriger bedeutet bessere Qualität, aber auch höhere Bitrate:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
Sie können Handbrake auch zum Codieren verwenden, wenn Sie die GUI-Art mögen.
faststart
OptionBewegen Sie nun das MOOV-Atom des MP4-Containers an den Anfang. Dieses Atom (im Wesentlichen eine Dateneinheit im MP4-Container) enthält wichtige Metadaten zu den Video- / Audiostreams selbst. -movflags faststart
sollte genau das tun.
Wenn Ihre FFmpeg-Version diese Option nicht bietet, sollten Sie ein Upgrade in Betracht ziehen. Wenn Sie kein Upgrade durchführen können, können Sie dasselbe mit einem der folgenden Tools erreichen:
QTIndexSwapper , eine Adobe AIR-Anwendung
MP4Box , frei und Open Source, mit einem Befehl ähnlich dem folgenden, in dem Sie das Intervall ändern können (hier 500):
mp4box -inter 500 input.mp4
qt-faststart in Python , das überall dort funktioniert, wo Python installiert ist.
qtfaststart input.mp4
Das ist alles.
Zum Streamen möchten Sie jetzt möglicherweise die Bitrate einschränken, um innerhalb bestimmter Grenzen zu bleiben. Sie können mehr darüber in meinem Blog-Beitrag über Methoden zur Ratenkontrolle lesen .
Wenn Sie beispielsweise -maxrate 2M -bufsize 2M
die Codierungsoptionen erweitern, begrenzen Sie die Codierung auf 2 Mbit / s, was für 720p-Videos ausreichend sein kann. Die erforderliche Bitrate hängt natürlich davon ab, wie komplex der Inhalt ist. Dies erfordert einige Versuche und Irrtümer.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
dann mp4box
und kann mp4 nicht suchen und nginx berichte 500 internal server error
für startparameter mehr als das 0
. wenn video codiert ohne -vcoded libx264
(default mp4 coder) alle arbeitsdatei (aber Qualität! krank!) :( (Entschuldigung, jetzt nicht erlaubt, Sie Antwort zu stimmen)
-movflags faststart
genau das, was ich brauchte
Sie können ein nicht-streambares AVI oder MP4 einfach konvertieren, auch ohne alles neu zu kodieren:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Es ist nicht notwendig, irgendetwas neu zu codieren, da nur das Moov-Atom bewegt werden muss.
Sie können dies mit ffmpeg versuchen:
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
. Ein guter Grund wie ein IETF-Entwurf, warum genau diese Parameter ausgewählt werden sollten, scheint ebenfalls zu fehlen.
MP4Box -isma -inter 500 Myvideo.mp4