Jakiego rodzaju skryptów ffmpeg potrzebuję, aby uzyskać „Wideo dla wszystkich” zgodne z HTML5?

12

Jaką listę poleceń powinienem wykonać w ffmpeg / mencoder / some_other_CLI_app, aby uzyskać wideo we wszystkich odpowiednich formatach, aby używać Video dla wszystkich ?

tj. Czy istnieje subtelność, która zapobiega mechanicznemu samouczkowi, który mówi

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

Następnie skopiuj i wklej kod wideo dla każdego na swojej stronie?

Moim celem jest posiadanie osadzonego wideo na mojej osobistej stronie internetowej. Preferowany jest HTML5 z rezerwowym flashowaniem, więc najprostszym sposobem wydaje się być wideo dla każdego. Ale ta strona pozostawia najbardziej skomplikowaną część, kodowanie wideo we wszystkich różnych formatach, do czytelnika, aby dowiedzieć się, czytając długi i kompletny artykuł o formatach wideo . Z pewnością nie jest to konieczne. Mógłbym podać listę poleceń dla użytkownika, aby ślepo przekonwertować plik audio na kilka różnych formatów. Mam nadzieję, że guru ffmpeg mógłby zrobić to samo w przypadku wideo.

John Baber-Lucero
źródło
1
Drobny komentarz do przykładów twojego pseudokodu: Nie ma .movwideo HTML5 i nie ma też h.264rozszerzenia. Jest to .264 , co jest surowy Załącznik B bytestream dla jednostek NAL. Kodowanie wideo nie jest nauką o rakietach, ale musisz poświęcić trochę czasu, aby poznać pojęcia.
slhck

Odpowiedzi:

21

Uwaga: ta odpowiedź została mocno zredagowana od czasu jej opublikowania. Teraz jest 2017; streaming działa inaczej niż kiedyś. Ten przewodnik zakłada proste progresywne pobieranie jednego strumienia wideo w danej rozdzielczości - bez adaptacyjnego przesyłania strumieniowego.

Wymagania

Po pierwsze, pamiętaj, aby pobrać najnowszą ffmpegwersję (pobierz kompilację statyczną; nie dzwoń apt-get install ffmpegani nic podobnego). Najlepiej skompiluj to sam . Nie trwa to długo.

Aby generować filmy obsługiwane przez większość przeglądarek, zawsze sprawdź najnowszą tabelę zgodności . Nie ma jednego kodeka / formatu, który działałby w każdej przeglądarce, ale jeśli wygenerujesz H.264 w MP4 i VP9 w WebM, z odpowiednim kodekiem audio, będziesz obsługiwać Chrome, Firefox, Safari i niektóre wersje IE.

WebM (VP9 / Vorbis)

Postępuj zgodnie z zaleceniami zawartymi w przewodniku FFmpeg VP9 i zastosuj dwuprzebiegowe kodowanie z ograniczeniami szybkości:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

Docelowa przepływność zależy od rozdzielczości, liczby klatek na sekundę, rodzaju treści i pożądanej jakości. 2,5 MBit / s powinno być dobrym kompromisem dla wideo HD przy 30 fps. Zobacz kilka wskazówek w tym przewodniku Google .

MP4 (H.264 / AAC)

Postępuj zgodnie z zaleceniami zawartymi w przewodniku FFmpeg H.264 i zastosuj dwuprzebiegowe kodowanie z ograniczeniami szybkości:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

W tym przypadku docelowa szybkość transmisji powinna być o około 50% wyższa niż w przypadku wideo VP9, ​​ponieważ H.264 nie jest tak wydajny. Dodaj -movflags faststartopcję do drugiego przejścia, aby przyspieszyć początkowe ładowanie wideo.

Aby ustawić opcje audio, patrz przewodnik po kodowaniu AAC .

slhck
źródło
1
Wersja 2013-12-19 jednego z akapitów ucina się w połowie zdania. „Domyślne ustawienie audio to 128 kBit / s, ale można ustawić q: a dla zmiennej przepływności, gdzie wartości mieszczą się w zakresie od 0 do 500. 100 jest domyślne, a wyższa oznacza lepszą. Jeśli”
Alan De Smet
@slhck ma wiele sensu, ale moje dwa centy to upuszczenie Ogga i zastąpienie go mpegts / m3u8, aby obsługiwać wszystkie urządzenia z iOS lub te, które akceptują HLS. Możesz ponownie użyć plików .mp4 i po prostu dodać przetwarzanie mpeg-ts w ffmpeg.
Paul Gregoire,
@Mondain Rzeczywiście, ale MPEG-TS / .m3u8 zasadniczo nie jest kompatybilny z HTML5. Potrzebujesz serwera HLS i musisz dowiedzieć się więcej na temat przesyłania strumieniowego, co tak naprawdę nie wchodzi w zakres tego pytania.
slhck,
Dobre strony, ale z mojego dotychczasowego doświadczenia prosty serwer http może obsługiwać m3u8 do tagu wideo. Jedyne, co zwykle trzeba zrobić, to dodać typy MIME dla m3u8 i ts do odpowiedniej konfiguracji serwera.
Paul Gregoire,