Mam sekwencję plików PNG ( tutaj jest jedna próbka ), które zamieniam w wideo z ffmpeg:
ffmpeg -r 10 -i image%03d.png -s 1380x720 -c:v libx264 -qscale 10 -r 30
basf_merck_libx264.mp4
Dzięki VLC wszystko wygląda ładnie i elegancko, ale na youtube wszystko, co widzę, jest szare !? dlaczego?
Po chwili wyświetla się poziomy pasek z kolorowymi plamami:
Kiedy dodam do polecenia „-pix_fmt yuv420p”, youtube poprawnie pokazuje klip. Ale wtedy najwyższą jakością, jaką mogę wybrać, jest 480p, co jest zbyt niskie w tym celu.
wyjście ffmpeg
C:\Users\Raffael\Documents\proj>ffmpeg -r 10 -i image%03d.png -s 1380x720 -c:v libx264 -qscale 10 -r 30 basf_merck_libx264.mp4
ffmpeg version N-48785-g2ea3f37 Copyright (c) 2000-2013 the FFmpeg developers
built on Jan 12 2013 20:45:33 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnu
tls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-l
ibopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libtwol
ame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
--enable-filter=frei0r
libavutil 52. 14.100 / 52. 14.100
libavcodec 54. 86.100 / 54. 86.100
libavformat 54. 59.107 / 54. 59.107
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 32.100 / 3. 32.100
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, image2, from 'image%03d.png':
Duration: 00:00:02.04, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 1380x720, 25 fps, 25 tbr, 25 tbn, 25 tbc
Please use -q:a or -q:v, -qscale is ambiguous
File 'basf_merck_libx264.mp4' already exists. Overwrite ? [y/N] y
using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cache64
[libx264 @ 00000000021c6fe0] profile High 4:4:4 Predictive, level 3.2, 4:4:4 8-bit
[libx264 @ 00000000021c6fe0] 264 - core 129 r2230 1cffe9f - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options:
cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 dead
zone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_int
ra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahea
d=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
Output #0, mp4, to 'basf_merck_libx264.mp4':
Metadata:
encoder : Lavf54.59.107
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv444p, 1380x720, q=-1--1, 15360 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame= 151 fps= 16 q=-1.0 Lsize= 1995kB time=00:00:04.96 bitrate=3290.5kbits/s dup=100 drop=0
video:1992kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.127092%
[libx264 @ 00000000021c6fe0] frame I:1 Avg QP:22.19 size: 57949
[libx264 @ 00000000021c6fe0] frame P:54 Avg QP:26.90 size: 36277
[libx264 @ 00000000021c6fe0] frame B:96 Avg QP:21.56 size: 236
[libx264 @ 00000000021c6fe0] consecutive B-frames: 5.3% 1.3% 85.4% 7.9%
[libx264 @ 00000000021c6fe0] mb I I16..4: 71.1% 2.5% 26.4%
[libx264 @ 00000000021c6fe0] mb P I16..4: 0.6% 0.5% 5.7% P16..4: 3.1% 2.1% 2.9% 0.0% 0.0% skip:85.0%
[libx264 @ 00000000021c6fe0] mb B I16..4: 0.2% 0.1% 0.0% B16..8: 4.7% 0.1% 0.0% direct: 0.0% skip:94.9% L0:77.6% L1:22.3% BI: 0.1%
[libx264 @ 00000000021c6fe0] 8x8 transform intra:7.7% inter:5.2%
[libx264 @ 00000000021c6fe0] coded y,u,v intra: 59.5% 54.3% 52.9% inter: 1.3% 1.0% 0.6%
[libx264 @ 00000000021c6fe0] i16 v,h,dc,p: 81% 15% 4% 0%
[libx264 @ 00000000021c6fe0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 5% 64% 3% 2% 4% 3% 4% 3%
[libx264 @ 00000000021c6fe0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 13% 21% 7% 6% 7% 6% 7% 6%
[libx264 @ 00000000021c6fe0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 00000000021c6fe0] ref P L0: 65.3% 9.0% 20.2% 5.5%
[libx264 @ 00000000021c6fe0] ref B L0: 73.0% 21.7% 5.3%
[libx264 @ 00000000021c6fe0] ref B L1: 90.8% 9.2%
[libx264 @ 00000000021c6fe0] kb/s:3241.64
Zebrałem informacje na mojej stronie internetowej: http://www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/
Odpowiedzi:
YouTube oczekuje, że Twój film będzie kodowany w standardzie H.264 . Jeśli używasz
libx264
, trzymaj się sugestii kodowania YouTube:Wskazówki:
-qscale
jest sposobem na ustalenie jakości, ale-qscale
sam jest dwuznaczny. Użyj-qscale:v
do wideo i-qscale:a
koderów audio, które go obsługują. Nie używaj tej opcji, chyba że wiesz, co to znaczy.x264 ma lepszą opcję jakości Otoczenie:
-crf
. Współczynnik stałej szybkości to tryb kodowania o stałej jakości. Niższe wartości oznaczają lepszą jakość, ale wszystko poniżej 18 może nie być wizualnie lepsze. Domyślnie jest to 23, ale coś takiego jak 20 byłoby lepsze, ponieważ YouTube ponownie koduje wideo ponownie.-pix_fmt yuv420p
należy użyć, aby włączyć próbkowanie w dół 4: 2: 0 dla wejścia PNG, które zwykle nie jest w ogóle próbkowane w dół (4: 4: 4, jak zaobserwowano na wydruku) i często zawiera kanał alfa. YouTube nie poradzi sobie z tym poprawnie.-r
nie jest potrzebne do ustawienia wyjściowej liczby klatek na sekundę, ponieważ YouTube i tak poradzi sobie z prawie wszystkimi częstotliwościami klatek. Podczas odczytu 10 obrazów na sekundę jako danych wejściowych, zmiana wyjściowej częstotliwości klatek na coś wyższego (np. 30) spowoduje jedynie powielenie klatek, co nie jest konieczne.-s:v 1380x720
to dziwne rozwiązanie. Pomyśl o użyciu natywnej rozdzielczości 720p 720p 1280 × 720 i ponownym generowaniu wykresów, jeśli to konieczne. Pozwoli ci to zaoszczędzić trochę problemów i problemów ze skrzynkami na litery w YouTube, a trzymanie się nietypowych wymiarów może uniemożliwić wyświetlanie filmu w pełnej rozdzielczości lub oferowanie go przy ustawieniu jakości 720p.Użyj kontenera MP4 zamiast MOV, którego sugeruje YouTube. MP4 ma praktycznie identyczną funkcjonalność jak MOV, ale ma lepszą obsługę urządzeń odtwarzających. Ogólnie rzecz biorąc, lepiej niż MOV, kiedy możesz.
źródło
-qscale
miały sens. Bolibx264
to jest to samo co ustawienie-qp
, prawda? Jest to opcja, która dotyczy kompresji x264, więc źródło PNG nie ma znaczenia. Niezależnie od tego,-crf
jest lepszym wyborem niż-qp
lub-b:v
na jeden przejazd z docelową jakością. (zamiast docelowej szybkości transmisji).-framerate 10 -i input -r 30
wygeneruje duplikaty podczas wysyłania do MP4. (nie dla mkv, z powodów związanych z ffmpeg obsługującym vfr w mkv, myślę.) Jeśli twoja zawartość to 10 fps, po prostu zrób wideo wyjściowe 10 fps. Myślę, że youtube obsługuje dowolną liczbę klatek na sekundę (do 60). Aparaty do telefonów komórkowych nagrywają w formacie mp4 wideo o zmiennej liczbie klatek na sekundę w formacie h.264 (szczególnie przy słabym świetle), więc jeśli możesz przesłać je bezpośrednio na youtube, nic ci nie będzie.-r 30
komendę OP bez zmiany.ffmpeg -y -framerate 1 -i static_image.png -i bg_music.mp3 -s:v 1280x720 -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4
) niestety nadal pojawia się tajemniczy błąd „przetwarzanie wideo nie powiodło się”. Niestety nie wiem, jak to debugować.