Risposte:
Questa è una risposta all'ultimo commento da te @abrahab.
Non è necessario mp4box
un file per essere in grado di pseudo streaming tramite nginx. Il modulo di streaming MP4 se ne occupa indipendentemente dal posizionamento degli atomi moov ( mp4box
sposta l'atomo moov all'inizio del file).
Ora per l'errore del server 500, stai usando l'opzione "-frag" con mp4box? Il modulo di streaming MP4 non è in grado di leggere file MP4 frammentati. Un buon uso di mp4box
pseudo streaming è di intercalare i video per una migliore ricerca. Lo spostamento dell'atomo di Moov è un ulteriore vantaggio.
Faccio sempre questo in mp4box
un file codificato FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Ciò consentirà inoltre di interfogliare il file MP4 in 500 millisecondi di blocchi per impostazione predefinita.
In genere, si desidera creare video x264 all'interno di un contenitore MP4. Questa opzione è supportata praticamente da qualsiasi dispositivo e browser.
Quanto segue dovrebbe essere sufficiente. Assicurati di sostituire il nome di input e le opzioni CRF. Quest'ultimo imposta la qualità, dove i valori sani vanno da 19 a 25: minore significa migliore qualità, ma anche bitrate più elevato:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
Puoi anche usare il freno a mano per la codifica se ti piace la GUI.
faststart
opzioneOra, ciò che devi fare è spostare l' atomo MOOV del container MP4 all'inizio. Questo atomo (in sostanza, un'unità di dati nel contenitore MP4) conterrà importanti metadati sui flussi video / audio stessi. -movflags faststart
dovrebbe fare esattamente questo.
Se la tua versione di FFmpeg non ha questa opzione, prendi in considerazione l'aggiornamento. Se non riesci a eseguire l'upgrade, puoi ottenere lo stesso risultato con uno dei seguenti strumenti:
QTIndexSwapper , un'applicazione Adobe AIR
MP4Box , gratuito e open source, che esegue un comando simile al seguente, in cui è possibile modificare l'intervallo (qui, 500):
mp4box -inter 500 input.mp4
qt-faststart in Python , che funziona ovunque sia installato Python.
qtfaststart input.mp4
Questo è tutto.
Ora, naturalmente, per lo streaming potresti effettivamente voler limitare il bitrate per rimanere entro certi limiti. Puoi leggere di più al riguardo nel mio post sul blog sui metodi di controllo delle tariffe .
Ad esempio, aggiungendo -maxrate 2M -bufsize 2M
alle opzioni di codifica, si limita la codifica a 2 Mbit / s, che può essere sufficiente per video a 720p. Il bitrate richiesto dipenderà, ovviamente, dalla complessità del contenuto. Questo richiede alcuni tentativi ed errori.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
allora mp4box
e mp4 non può cercare e nginx segnala 500 internal server error
per il parametro di avvio più di questo 0
. Quando il video è codificato senza -vcoded libx264
(codificatore mp4 predefinito) tutto il file di lavoro (ma qualità! malato!) :( (scusate, ora, non è consentito votare la vostra risposta)
-movflags faststart
esattamente quello di cui avevo bisogno
Puoi semplicemente convertire un AVI o MP4 non streaming, anche senza ricodificare tutto, facendo questo:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Non è necessario ricodificare nulla, perché solo l'atomo moov deve essere spostato.
Puoi provarlo con 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
(errore:) Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
. Una buona ragione come una bozza IETF sul perché scegliere esattamente questi parametri sembra mancare.
MP4Box -isma -inter 500 Myvideo.mp4