Quale riga di comando di ffmpeg produce video più compatibili su tutti i dispositivi?


15

Quindi alcuni utenti dicono che i video H264 di MP4 non riproducono l'audio sull'iPad di Apple e faccio fatica a far funzionare correttamente i video MP4 anche su Android.

Esistono due diverse righe di comando, quella che è quella che dovrei usare.

-profile:v baseline -level 3.0

E :

-vpre baseline

Cosa dovrei usare per farlo funzionare su tutti i dispositivi?

Ho anche letto che potrebbe essere il bitrate audio del mio attuale bitrate audio

-ab 192k

Forse dovrei abbassarlo a

-ab 160k

Riga di comando utilizzata per codificare l'audio MP3 in file MP4.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1

Risposte:


25

Innanzitutto dovresti capire la differenza tra l'utilizzo dei profili FFmpeg e le opzioni della riga di comando diretta. -vpreusa un .ffpresetfile che si trova in /usr/share/ffmpeg/o dove è stato installato ffmpeg. È una serie di coppie option = value e nel tuo caso avresti dovuto definirlo tu stesso (almeno non conosco un baselinepreset fornito con ffmpeg).

Vorrei sconsigliare l'uso dei preset a meno che tu non l'abbia creato tu stesso e sappia a cosa servono le opzioni della riga di comando. Uso ffmpeg da anni ormai e non ho mai usato i preset: non ho mai dovuto farlo.

Una tipica riga di comando per generare video H.264 compatibile con la maggior parte dei dispositivi sarebbe:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

Alcune note:

  • H.264 / AAC è la migliore combinazione per un ampio supporto in HTML5. I browser che non dispongono di decodificatori H.264 avranno tuttavia bisogno anche di un video VP8 / Vorbis. Per alcuni esempi da riga di comando, vedi questa risposta . Vedi anche la pagina di supporto del browser di Wikipedia per altri codec.

  • H.264 funziona anche su tutti i dispositivi mobili.

  • Le opzioni -profile:v baselinee -level 3.0sono necessarie solo per i vecchi dispositivi mobili che non sono in grado di gestire le funzionalità H.264 ad alta intensità di CPU. In genere è possibile lasciarli fuori o invece utilizzare -profile:v main.

  • Il CRF imposta la qualità (18-28 è un intervallo ragionevole, inferiore significa migliore qualità). Ovviamente puoi anche usare un bitrate fisso con -b:v 1000ko simile. Scegli un bitrate che corrisponda alla risoluzione del video. Alcuni dispositivi a bassa potenza potrebbero non essere in grado di gestire bitrate inutilmente elevati.

  • L' -movflags faststartopzione è essenziale per lo streaming, poiché sposta i metadati del contenitore all'inizio del file anziché lasciarlo alla fine. Ciò consentirà di avviare immediatamente la riproduzione invece di dover attendere il completo caricamento del file.

Tuttavia, tutto si riduce alla ricerca del minimo comune denominatore per tutti i dispositivi a cui ti rivolgi, che potrebbe non esistere sempre. Certamente non vorrai usare nessun altro codec (cioè peggio ) di H.264. In effetti, non sarebbe saggio offrire video con codifica Baseline ai client che possono decodificare il profilo principale o alto. Scambieresti la qualità contro la ridotta complessità della decodifica.

Dalla mia esperienza, i dispositivi Android possono riprodurre Baseline H.264 con audio AAC-LC in un contenitore MP4. Non ho mai avuto problemi con esso. In effetti, alcuni dispositivi possono anche riprodurre profili più alti, sebbene non sia ufficialmente supportato. iOS in genere supporta anche Baseline H.264, ma puoi sicuramente utilizzare il profilo principale anche su alcuni dispositivi. Vedi questo post (che è un po 'obsoleto) per alcune linee guida.

Se hai utenti con problemi di riproduzione, dovresti scoprire quale video sta causando problemi e ottenere maggiori dettagli sull'hardware e sul software del lettore che stanno utilizzando. Quindi potremmo parlare della risoluzione di quel caso particolare.


1
Grazie per una risposta così dettagliata continuo a rileggerlo :) Inoltre codifico con -acodec libmp3lame -ab 160k e gli utenti che utilizzano dispositivi Apple iPad stanno dicendo che potrebbero guardare il video ma non sentire l'audio, quindi presumo che fosse qualcosa a che fare con il codec audio o il bitrate. Gli utenti Android e Windows dicono che va bene e hanno l'audio nel flusso video, quindi non sono sicuro del motivo per cui l'uso di libmp3lame invece di aac farebbe sì che gli utenti Apple non avessero audio per il video.
C0nw0nk,

Raramente ho visto l'audio MP3 usato nei contenitori MP4. Forse AAC è la scelta più sicura.
slhck,

Beh, sto usando solo MP3 perché ho continuato a ricevere bit_rate, errori di altezza in altezza con aac sono passato a libmp3lame e tutti quegli errori si fermano e quindi gli utenti di apple dicono che non hanno audio ma tutti gli altri possono guardare lo stesso file e va bene con il suono su tutti gli altri dispositivi, forse ho trovato un bug che lo sa :( E secondo Apple MP3 dovrebbe andare bene developer.apple.com/library/mac/documentation/…
C0nw0nk

@ user2068371 Quel collegamento si riferisce al flusso di trasporto MPEG-2, non al formato contenitore MP4.
Llogan

1
@ user2068371 Non ho mai avuto problemi con MediaElementjs. H.264 e MP3 non sono supportati in tutti i browser . Per i video HTML5 in particolare, utilizzare sempre H.264 / AAC e possibilmente VP8 / Vorbis come fallback. In caso di problemi con una conversione AAC, porre una nuova domanda al riguardo e assicurarsi di includere anche l'output completo della riga di comando.
slhck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.