Który wiersz polecenia ffmpeg powoduje, że wideo jest bardziej kompatybilne na wszystkich urządzeniach?

15

Mam więc użytkowników, którzy mówią, że filmy wideo H264 MP4 nie odtwarzają dźwięku na iPadzie Apple i mam trudności z poprawnym odtwarzaniem filmów MP4 na Androidzie.

Istnieją dwie różne linie poleceń, która to linia poleceń, której powinienem używać.

-profile:v baseline -level 3.0

I :

-vpre baseline

Jakiego należy użyć, aby działał na wszystkich urządzeniach?

Przeczytałem również, że może to być bitrate audio, jakim jest mój obecny bitrate audio

-ab 192k

Być może powinienem to obniżyć do

-ab 160k

Linia poleceń używana do kodowania dźwięku MP3 w plikach 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
C0nw0nk
źródło

Odpowiedzi:

26

Najpierw powinieneś zrozumieć różnicę między używaniem profili FFmpeg a opcjami bezpośredniego wiersza poleceń. -vpreużywa .ffpresetpliku znajdującego się w /usr/share/ffmpeg/lub gdziekolwiek zainstalowano ffmpeg. Jest to seria par opcja = wartość , w twoim przypadku musiałbyś to zdefiniować sam (przynajmniej nie znam baselinepresetu dostarczanego z ffmpeg).

Odradzam używanie presetów, chyba że sam je utworzyłeś i nie wiesz, do czego służą opcje wiersza poleceń. Używam ffmpeg od lat i nigdy nie używałem presetów - nigdy tak naprawdę nie musiałem.

Typowa linia poleceń do generowania wideo H.264 zgodnego z większością urządzeń to:

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

Niektóre uwagi:

  • H.264 / AAC to najlepsza kombinacja do szerokiego wsparcia w HTML5. Przeglądarki, które nie mają dekoderów H.264, będą jednak również wymagały wideo VP8 / Vorbis. Aby uzyskać przykłady wiersza polecenia, zobacz tę odpowiedź . Zobacz także stronę wsparcia przeglądarki Wikipedia dla innych kodeków.

  • H.264 działa również dobrze na różnych urządzeniach mobilnych.

  • -profile:v baselineI -level 3.0opcje są potrzebne tylko dla starych urządzeń mobilnych, które nie obsługują funkcji procesora intensywnie H.264. Zazwyczaj możesz je pominąć lub zamiast tego użyć -profile:v main.

  • CRF określa jakość (18–28 to rozsądny zakres, niższy oznacza lepszą jakość). Oczywiście możesz również użyć stałej szybkości transmisji z -b:v 1000klub podobną. Wybierz szybkość transmisji, która odpowiada rozdzielczości filmu. Niektóre urządzenia o niskiej mocy mogą nie być w stanie obsłużyć niepotrzebnie dużych przepływności.

  • Ta -movflags faststartopcja jest niezbędna do przesyłania strumieniowego, ponieważ przenosi metadane kontenera na początek pliku zamiast pozostawiać go na końcu. Pozwoli to na natychmiastowe rozpoczęcie odtwarzania zamiast czekać na całkowite załadowanie pliku.

Wszystko sprowadza się jednak do znalezienia najniższego wspólnego mianownika dla wszystkich urządzeń, na które celujesz, co może nie zawsze istnieć. Na pewno nie chciałbyś używać żadnego innego (tj. Gorszego ) kodeka niż H.264. W rzeczywistości nie byłoby rozsądnie oferować wideo zakodowane w linii bazowej klientom, którzy mogą dekodować profil główny lub wysoki. Odłożyłbyś jakość na zmniejszoną złożoność dekodowania.

Z mojego doświadczenia wynika, że ​​urządzenia z Androidem mogą odtwarzać Baseline H.264 z dźwiękiem AAC-LC w kontenerze MP4. Nigdy nie miałem z tym problemów. W rzeczywistości niektóre urządzenia mogą również odtwarzać wyższe profile, chociaż nie jest to oficjalnie obsługiwane. iOS ogólnie obsługuje również Baseline H.264, ale z pewnością możesz używać profilu głównego na niektórych urządzeniach. Zobacz ten post (nieco przestarzały), aby uzyskać wskazówki.

Jeśli masz problemy z odtwarzaniem, musisz dowiedzieć się, który film powoduje problemy, i uzyskać więcej informacji na temat używanego sprzętu i oprogramowania odtwarzacza. Następnie moglibyśmy porozmawiać o rozwiązywaniu problemów z tym konkretnym przypadkiem.

slhck
źródło
1
Dzięki za tak szczegółową odpowiedź, wciąż ją czytam :) Również koduję przy użyciu -acodec libmp3lame -ab 160k, a użytkownicy korzystający z urządzeń iPad Apple twierdzą, że mogą oglądać wideo, ale nie słyszą dźwięku, więc zakładam, że to miało coś wspólnego z kodek audio lub szybkość transmisji. Użytkownicy systemów Android i Windows twierdzą, że jest w porządku i mają audio w strumieniu wideo, więc nie jestem pewien, dlaczego użycie libmp3lame zamiast AAC spowodowałoby, że użytkownicy Apple nie mieliby audio do wideo.
C0nw0nk
Rzadko widziałem dźwięk MP3 używany w kontenerach MP4. Być może AAC jest bezpieczniejszym wyborem.
slhck
Cóż, używam tylko MP3, ponieważ ciągle otrzymywałem bit_rate, błędy wysokości z aac, przełączyłem się na libmp3lame i wszystkie te błędy się zatrzymują, a następnie użytkownicy Apple mówią, że nie mają dźwięku, ale wszyscy inni mogą oglądać ten sam plik i jest w porządku z dźwiękiem na wszystkich innych urządzeniach, być może znalazłem błąd, który wie :( I według Apple MP3 powinno być w porządku developer.apple.com/library/mac/documentation/…
C0nw0nk
@ user2068371 To łącze odnosi się do strumienia transportowego MPEG-2, a nie formatu kontenera MP4.
llogan
1
@ user2068371 Nigdy nie miałem problemów z MediaElementjs. H.264 i MP3 nie są obsługiwane we wszystkich przeglądarkach . W przypadku wideo HTML5 zawsze używaj H.264 / AAC i ewentualnie VP8 / Vorbis jako rezerwowego. Jeśli masz problemy z konwersją AAC, zadaj nowe pytanie na ten temat i upewnij się, że dołączasz również pełny wynik wiersza poleceń.
slhck