Mam problemy z transkodowaniem niektórych filmów. Uruchomiłem najprostszą komendę ffmpeg i zajmuje to bardzo dużo czasu, a plik wyjściowy jest około 10 razy większy. Jeśli podam parametr szybkości klatek -r, działa to dobrze (mały plik, szybkie transkodowanie). Na czym polega problem i jak mogę go rozwiązać? Nie chcę ustawiać stałej liczby klatek, ponieważ myślę, że lepiej pozostawić to samo co źródło, prawda?
Być może problemem jest coś innego, ponieważ znalazłem wiele przykładów w Internecie, w których nie użyto opcji -r. Także transkodowanie do innego formatu lub z innego źródła działa dobrze bez opcji -r (próbowałem z ffmpeg 0.7.13 i 1.2.1 na Mac OS (dostarczany przez porty Mac) i 0.7.15 na serwerze Linux Debian). Filmy są dostarczane przez użytkowników mojej witryny i automatycznie konwertowane na odpowiednie dla sieci. Potrzebuję więc najbardziej ogólnego polecenia do automatycznej konwersji.
W poniższym wyjściu ffmpeg znajdziesz te dwie podejrzane wiadomości:
- Bardzo wysoka częstotliwość klatek dla multipleksera, który nie obsługuje go skutecznie. Proszę rozważyć podanie niższej liczby klatek na sekundę, innego multipleksera lub -vsync 2
- Szybkość MB (36000000)> limit poziomu (983040)
Komenda i wyjście ffmpeg (bez opcji -r):
ffmpeg -i '/tmp/standort_aquarium.mp4' -vcodec libx264 output.mp4 ffmpeg wersja 0.7.15, Copyright (c) 2000-2013 programiści FFmpeg zbudowali 22 lutego 2013 07:18:58 z konfiguracją gcc 4.4.5: --enable-libdc1394 --prefix = / usr --extra-cflags = '-Wall -g' --cc = 'ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid - -enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree - disable-stripping --enable-avfilter --enable-libdirac --disable-decoder = libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder = libschroedinger --enable-version3 --enable-libopenjpeg --enable -libvpx --enable-librtmp --extra-libs = -lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis libavutil 50. 43. 0 / 50. 43. 0 libavcodec 52.123. 0 / 52,123 0 libavformat 52.111. 0 / 52,111. 0 libavdevice 52. 5. 0 / 52. 5. 0 libavfilter 1. 80. 0 / 1. 80. 0 libswscale 0. 14. 1 / 0. 14. 1 libpostproc 51. 2. 0 / 51. 2. 0 Wprowadź nr 0, mov, mp4, m4a, 3gp, 3g2, mj2, z '/tmp/standort_aquarium.mp4': Metadane: major_brand: mp42 minor_version: 0 Kompatybilne_brands: mp423gp4isom Creation_time: 19.04.2013 15:04:05 Czas trwania: 00: 00: 18,24, początek: 0,000000, szybkość transmisji: 2095 kb / s Strumień # 0.0 (und): Wideo: mpeg4, yuv420p, 640x480 [PAR 1: 1 DAR 4: 3], 2001 kb / s, 14,97 fps, 30k tbr, 30k tbn, 30k tbc Metadane: Creation_time: 19.04.2013 15:04:05 Strumień # 0,1 (und): Audio: aac, 48000 Hz, mono, s16, 96 kb / s Metadane: Creation_time: 19.04.2013 15:04:05 Plik „output.mp4” już istnieje. Zastąpić? [t / n] r [mp4 @ 0x20eed80] Bardzo wysoka częstotliwość klatek dla multipleksera, który nie obsługuje go skutecznie. Proszę rozważyć podanie niższej liczby klatek na sekundę, innego multipleksera lub -vsync 2 [bufor @ 0x20f8820] w: 640 h: 480 pixfmt: yuv420p tb: 1/1000000 sar: 1/1 sws_param: [libx264 @ 0x20efde0] Wykryto ustawienia domyślne przy użyciu profilu średniego [libx264 @ 0x20efde0] przy użyciu SAR = 1/1 [libx264 @ 0x20efde0] Szybkość MB (36000000)> limit poziomu (983040) [libx264 @ 0x20efde0] z wykorzystaniem możliwości procesora: MMX2 SSE2 Fast SSSE3 FastShuffle SSE4.2 [libx264 @ 0x20efde0] profil Wysoki, poziom 5.1 [libx264 @ 0x20efde0] 264 - rdzeń 118 - kodek AVC H.264 / MPEG-4 AVC - Copyleft 2003-2011 - http://www.videolan.org/x264.html - opcje: cabac = 1 ref = 3 deblock = 1 : 0: 0 zanalizuj = 0x3: 0x113 me = hex subme = 7 psy = 1 psy_rd = 1,00: 0,00 mixed_ref = 1 me_range = 16 chroma_me = 1 krata = 1 8x8dct = 1 cqm = 0 deadzone = 21,11 fast_pskip = 1 chroma_qp_offset = -2 wątki = 1 wątki pocięte na plastry = 0 nr = 0 dziesiętne = 1 z przeplotem = 0 bluray_compat = 0 constrained_intra = 0 ramek = 3 b_piramid = 2 b_adapt = 1 b_bias = 0 bezpośrednio = 1 wagab = 1 open_gop = 0 waga = 2 keyint = 250 keyint_min = 25 scenecut = 40 intra_refresh = 0 rc_lookahead = 40 rc = crf mbtree = 1 crf = 23,0 qcomp = 0,60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1,40 aq = 1: 1,00 Wyjście # 0, mp4, na 'output.mp4': Metadane: major_brand: mp42 minor_version: 0 Kompatybilne_brands: mp423gp4isom Creation_time: 19.04.2013 15:04:05 enkoder: Lavf52.111.0 Strumień # 0.0 (und): Wideo: libx264, yuv420p, 640x480 [PAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 30 kb / s, 30 kb Metadane: Creation_time: 19.04.2013 15:04:05 Strumień # 0.1 (und): Audio: libfaac, 48000 Hz, mono, s16, 64 kb / s Metadane: Creation_time: 19.04.2013 15:04:05 Mapowanie strumienia: Strumień # 0,0 -> 0,0 Strumień # 0,1 -> # 0,1 Naciśnij [q], aby zatrzymać, [?], Aby uzyskać pomoc ramka = 542630 fps = 132 q = 33,0 Lsize = 77226kB czas = 00: 00: 18,08 bitrate = 34976.2kbits / s dup = 542358 drop = 0 wideo: 68604 kB audio: 143 kB globalnych nagłówków: obciążenie kumulacyjne 0 kB 12,333275% ramka I: 2174 Śr. QP: 18,72 rozmiar: 25040 [libx264 @ 0x20efde0] ramka P: 136846 Śr. QP: 25,27 rozmiar: 56 [libx264 @ 0x20efde0] ramka B: 403610 Śr. QP: 32,99 rozmiar: 20 [libx264 @ 0x20efde0] kolejne ramki B: 0,8% 0,0% 0,1% 99,1% [libx264 @ 0x20efde0] MB I I16..4: 5,5% 83,3% 11,1% [libx264 @ 0x20efde0] MB P I16..4: 0,0% 0,0% 0,0% P16..4: 0,5% 0,0% 0,0% 0,0% 0,0% pominięcie: 99,4% [libx264 @ 0x20efde0] MB B I16..4: 0,0% 0,0% 0,0% B16..8: 0,0% 0,0% 0,0% bezpośredni: 0,0% pominąć: 100,0% L0: 21,2% L1: 78,8% BI: 0,0% [libx264 @ 0x20efde0] Transformacja 8x8 intra: 83,1% inter: 85,2% [libx264 @ 0x20efde0] zakodowane y, uvDC, uvAC intra: 91,2% 95,8% 80,7% inter: 0,0% 0,1% 0,0% [libx264 @ 0x20efde0] i16 v, h, dc, p: 13% 40% 12% 35% [libx264 @ 0x20efde0] i8 v, h, dc, ddl, ddr, vr, hd, vl, hu: 19% 34% 15% 4% 4% 5% 6% 7% 8% [libx264 @ 0x20efde0] i4 v, h, dc, ddl, ddr, vr, hd, vl, hu: 20% 38% 6% 4% 6% 6% 8% 6% 6% [libx264 @ 0x20efde0] i8c dc, h, v, p: 39% 32% 19% 10% [libx264 @ 0x20efde0] Ważone ramki typu P: Y: 0,0% UV: 0,0% [libx264 @ 0x20efde0] ref. P L0: 91,5% 5,2% 2,8% 0,4% 0,0% [libx264 @ 0x20efde0] ref B L0: 55,7% 43,5% 0,8% [libx264 @ 0x20efde0] ref B L1: 97,9% 2,1% [libx264 @ 0x20efde0] kb / s: 31071.04
Komenda i wyjście ffmpeg z opcją -r 24:
ffmpeg -i '/tmp/standort_aquarium.mp4' -r 30000/1001 -vcodec libx264 output.mp4 ffmpeg wersja 0.7.15, Copyright (c) 2000-2013 deweloperzy FFmpeg zbudowany 22 lutego 2013 07:18:58 z gcc 4.4.5 konfiguracja: --enable-libdc1394 --prefix = / usr --extra-cflags = '- Wall -g' --cc = 'ccache cc' --enable-shared --enable-libmp3lame --enable-gpl - enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore -amrwb --enable-libx264 --enable-libspeex --enable-nonfree - disis-stripping --enable-avfilter --enable-libdirac --disable-decoder = libdirac --enable-libfreetype --enable-libschroedinger - -disable-encoder = libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs = -lgcrypt --disable-altivec --disable-armv5te --disable-armv6 - -disable-vis libavutil 50. 43. 0 / 50. 43. 0 libavcodec 52.123. 0 / 52,123 0 libavformat 52.111. 0 / 52,111. 0 libavdevice 52. 5. 0 / 52. 5. 0 libavfilter 1. 80. 0 / 1. 80. 0 libswscale 0. 14. 1 / 0. 14. 1 libpostproc 51. 2. 0 / 51. 2. 0 Wprowadź nr 0, mov, mp4, m4a, 3gp, 3g2, mj2, z '/tmp/standort_aquarium.mp4': Metadane: major_brand: mp42 minor_version: 0 Kompatybilne_brands: mp423gp4isom Creation_time: 19.04.2013 15:04:05 Czas trwania: 00: 00: 18,24, początek: 0,000000, szybkość transmisji: 2095 kb / s Strumień # 0.0 (und): Wideo: mpeg4, yuv420p, 640x480 [PAR 1: 1 DAR 4: 3], 2001 kb / s, 14,97 fps, 30k tbr, 30k tbn, 30k tbc Metadane: Creation_time: 19.04.2013 15:04:05 Strumień # 0,1 (und): Audio: aac, 48000 Hz, mono, s16, 96 kb / s Metadane: Creation_time: 19.04.2013 15:04:05 Plik „output.mp4” już istnieje. Zastąpić? [t / n] r [bufor @ 0x132e820] w: 640 h: 480 pixfmt: yuv420p tb: 1/1000000 sar: 1/1 sws_param: [libx264 @ 0x1325de0] Wykryto ustawienia domyślne przy użyciu profilu średniego [libx264 @ 0x1325de0] przy użyciu SAR = 1/1 [libx264 @ 0x1325de0] z wykorzystaniem możliwości procesora: MMX2 SSE2 Fast SSSE3 FastShuffle SSE4.2 [libx264 @ 0x1325de0] profil Wysoki, poziom 3.0 [libx264 @ 0x1325de0] 264 - rdzeń 118 - kodek AVC H.264 / MPEG-4 AVC - Copyleft 2003-2011 - http://www.videolan.org/x264.html - opcje: cabac = 1 ref = 3 deblock = 1 : 0: 0 zanalizuj = 0x3: 0x113 me = hex subme = 7 psy = 1 psy_rd = 1,00: 0,00 mixed_ref = 1 me_range = 16 chroma_me = 1 krata = 1 8x8dct = 1 cqm = 0 deadzone = 21,11 fast_pskip = 1 chroma_qp_offset = -2 wątki = 1 wątki pocięte na plastry = 0 nr = 0 dziesiętne = 1 z przeplotem = 0 bluray_compat = 0 constrained_intra = 0 ramek = 3 b_piramid = 2 b_adapt = 1 b_bias = 0 bezpośrednio = 1 wagab = 1 open_gop = 0 waga = 2 keyint = 250 keyint_min = 25 scenecut = 40 intra_refresh = 0 rc_lookahead = 40 rc = crf mbtree = 1 crf = 23,0 qcomp = 0,60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1,40 aq = 1: 1,00 Wyjście # 0, mp4, na 'output.mp4': Metadane: major_brand: mp42 minor_version: 0 Kompatybilne_brands: mp423gp4isom Creation_time: 19.04.2013 15:04:05 enkoder: Lavf52.111.0 Strumień # 0.0 (und): Wideo: libx264, yuv420p, 640x480 [PAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 30 kb / s, 29,97 tbc Metadane: Creation_time: 19.04.2013 15:04:05 Strumień # 0.1 (und): Audio: libfaac, 48000 Hz, mono, s16, 64 kb / s Metadane: Creation_time: 19.04.2013 15:04:05 Mapowanie strumienia: Strumień # 0,0 -> 0,0 Strumień # 0,1 -> # 0,1 Naciśnij [q], aby zatrzymać, [?], Aby uzyskać pomoc ramka = 542 fps = 36 q = 29,0 Lsize = 2059kB czas = 00: 00: 18,01 bitrate = 936,3 kb / s dup = 270 drop = 0 wideo: 1904kB audio: 143kB nagłówki globalne: obciążenie nadmiarowe 0kB 0,609224% ramka I: 3 Śr. QP: 22,39 rozmiar: 14773 [libx264 @ 0x1325de0] ramka P: 514 Śr. QP: 23,98 rozmiar: 3675 [libx264 @ 0x1325de0] ramka B: 25 Śr. QP: 27,44 rozmiar: 643 [libx264 @ 0x1325de0] kolejne ramki B: 93,7% 0,0% 1,1% 5,2% [libx264 @ 0x1325de0] mb I I16..4: 16,4% 78,3% 5,3% [libx264 @ 0x1325de0] MB P I16..4: 1,6% 6,3% 0,3% P16..4: 30,8% 8,6% 3,1% 0,0% 0,0% pominięcie: 49,4% [libx264 @ 0x1325de0] MB B I16..4: 0,4% 0,7% 0,0% B16..8: 13,2% 1,6% 0,2% bezpośrednie: 0,3% pominięcie: 83,6% L0: 50,0% L1: 47,1% BI: 2,9% [libx264 @ 0x1325de0] Transformacja 8x8 intra: 77,1% inter: 83,1% [libx264 @ 0x1325de0] zakodowane y, uvDC, uvAC intra: 62,0% 76,4% 24,4% inter: 17,9% 26,3% 2,3% [libx264 @ 0x1325de0] i16 v, h, dc, p: 14% 60% 13% 13% [libx264 @ 0x1325de0] i8 v, h, dc, ddl, ddr, vr, hd, vl, hu: 15% 35% 33% 2% 3% 3% 3% 3% 4% [libx264 @ 0x1325de0] i4 v, h, dc, ddl, ddr, vr, hd, vl, hu: 15% 40% 12% 4% 7% 7% 7% 5% 4% [libx264 @ 0x1325de0] i8c dc, h, v, p: 46% 34% 16% 4% [libx264 @ 0x1325de0] Ważone ramki typu P: Y: 8,0% UV: 4,5% [libx264 @ 0x1325de0] ref. P L0: 65,6% 16,7% 8,8% 7,9% 0,9% [libx264 @ 0x1325de0] ref B L0: 85,9% 13,3% 0,8% [libx264 @ 0x1325de0] ref B L1: 88,7% 11,3% [libx264 @ 0x1325de0] kb / s: 862,28
Źródło wideo jest tymczasowo dostępne pod adresem : https://www.dropbox.com/s/4xg147z77u40g87/standort_aquarium.mp4
-vsync 2
stosuje. To właśnie spowodowało ogromne duplikowanie klatek, które widziałeś (a nie oryginalny błąd, który doprowadził do tego obejścia).-vsync 2
Wydaje mi się jednak, że mxing do mp4 działa z obecnym git ffmpeg.Odpowiedzi:
Problem polega na tym, że ffmpeg wybiera wartość domyślną dla
-vsync
na podstawie wyjściowego multipleksera. Domyślnie multiplekser mp4 to vsync 1, ale wybiera bardzo wysoką szybkość klatek, dzięki czemu może umieścić ramkę we właściwym czasie dla każdej ramki wejściowej.(Czas wyświetlania klatek wejściowych nie jest stały. Średnio wynosi 14,97 fps, według ffmpeg. Prawdopodobnie z aparatu telefonicznego? Robią zmienne FPS. Myślę, że zwalniają, aby uzyskać więcej światła dla każdej klatki, ale może to być inny powód. )
Więc ffmpeg powieli klatki do 30k fps, które wybrał, czy coś takiego. h.264 jest dość wydajny w przechowywaniu zduplikowanych ramek, ale to śmieszne.
W każdym razie rozwiązaniem jest użycie
-vsync 2
w wierszu polecenia ffmpeg. Lub wyjście do mkv, a następnie remux do mp4, ale powodem jest to, że domyślnie mkv-vsync 2
. To naprawdę takie proste. Nie musisz tworzyć wyjściowego CFR. Youtube radzi sobie z dowolną<= 60
liczbą klatek na sekundę, o ile są one dostępne , podobnie jak większość innych graczy. Zakładam, że telefony są w porządku, ponieważ przede wszystkim tworzą zmienne filmy FPS. Nie musisz używać-r something
do wymuszenia powielania klatek, aby uzyskać dokładnie 30 klatek na sekundę lub cokolwiek innego.źródło
-vsync 2
, chociaż nie jest to ustawienie domyślne dla multipleksera MP4 ffmpeg. Ale powinieneś szukać zmiennej ilości klatek na sekundę, npmediainfo
. Przy użyciu . Jeśli ma minimalną / maksymalną liczbę klatek na sekundę, które nie są równe, jest to VFR. Być może będziesz w stanie powiedzieć coś bardziej szczegółowego na temat danych wejściowych MP4 w odniesieniu do podstawy czasu i tak dalej, ale nie znam się na tym, w jaki sposób MP4 reprezentuje znaczniki czasu.Nie mogłem zobaczyć żadnego problemu z twoim wideo, używając następującego polecenia w wersji ffmpeg 1.1.2:
ffmpeg -i standort_aquarium.mp4 -r 30000/1001 -vcodec libx264 output.mp4
Rozmiar pliku wynikowego jest zgodny z oczekiwaniami (około połowy rozmiaru), wideo odtwarzało się poprawnie, a konwersja szybkości klatek wydaje się działać dobrze (więc nie jest to błąd).
Jedyny problem, jaki widzę w twoich wynikach, to brak mapowania pary (z nieznanego powodu). Na twoim wyjściu:
Gdzie powinno być napisane:
Zakładam, że masz problem ze swoim plikiem binarnym / wersją ffmpeg (również wersja 1.2.1 nigdy nie została wydana). Spróbuj ponownie pobrać lub ponownie skompilować z wersją 1.1.2
źródło