Ich habe eine Folge von PNGs ( hier ist ein Exemplar ), die ich mit ffmpeg in ein Video verwandle:
ffmpeg -r 10 -i image%03d.png -s 1380x720 -c:v libx264 -qscale 10 -r 30
basf_merck_libx264.mp4
Mit VLC sieht alles schön und gut aus, aber auf Youtube sehe ich nur Grau!? Warum?
Nach einer Weile wird ein horizontaler Balken mit bunten Flecken angezeigt:
Wenn ich dem Befehl '-pix_fmt yuv420p' hinzufüge, zeigt youtube den Clip korrekt an. Aber dann ist die höchste Qualität, die ich wählen kann, 480p, was für diesen Zweck zu niedrig ist.
ffmpeg Ausgabe
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
Ich habe die Informationen auf meiner Website gesammelt: http://www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/
Antworten:
YouTube erwartet, dass dein Video H.264-codiert ist . Wenn Sie verwenden
libx264
, halten Sie sich an die Codierungsvorschläge von YouTube:Tipps:
-qscale
ist ein Weg, um Qualität zu setzen, aber-qscale
allein ist nicht eindeutig. Verwendung-qscale:v
für Video- und-qscale:a
Audio-Encoder, die dies unterstützen. Verwenden Sie diese Option nur, wenn Sie wissen, was sie bedeutet.x264 bietet eine bessere Option zum Einstellen der Qualität :
-crf
. Der Konstantratenfaktor ist ein Codierungsmodus mit konstanter Qualität. Niedrigere Werte bedeuten eine bessere Qualität, aber alles unter 18 ist möglicherweise optisch nicht besser. Der Standardwert ist 23, aber ungefähr 20 wäre besser, da YouTube dein Video erneut neu codiert.-pix_fmt yuv420p
sollte verwendet werden, um das 4: 2: 0-Downsampling für den PNG-Eingang zu aktivieren, der normalerweise überhaupt nicht heruntergesampelt wird (4: 4: 4, wie in Ihrem Ausgang beobachtet) und häufig einen Alpha-Kanal enthält. YouTube wird damit nicht richtig umgehen.-r
wird zum Einstellen der Ausgabe-Framerate nicht benötigt, da YouTube ohnehin fast alle Bildraten verarbeitet. Wenn Sie 10 Bilder pro Sekunde als Eingabe lesen und die Ausgabebildrate auf etwas Höheres (z. B. 30) ändern, werden nur Bilder dupliziert, was nicht erforderlich ist.-s:v 1380x720
ist eine seltsame Auflösung. Denken Sie daran, die native 16: 9 720p-Auflösung 1280 × 720 zu verwenden und Ihre Diagramme bei Bedarf neu zu generieren. Dies erspart Ihnen einige Probleme und Probleme mit dem Letterboxing auf YouTube. Wenn Sie sich an ungewöhnliche Abmessungen halten, wird Ihr Video möglicherweise nicht in voller Auflösung angezeigt oder in der 720p-Qualitätseinstellung angeboten.Verwenden Sie den MP4-Container anstelle von MOV, den YouTube Ihnen empfiehlt. MP4 ist in der Funktionalität praktisch identisch mit MOV, bietet jedoch eine bessere Unterstützung für Wiedergabegeräte. Ziehen Sie dies im Allgemeinen MOV vor, wenn Sie können.
quelle
-qscale
für sinnvoll. Dennlibx264
es ist dasselbe wie das Einstellen-qp
, nicht wahr? Diese Option gilt für die x264-Komprimierung, sodass die Quelle PNG keine Rolle spielt. Unabhängig davon-crf
ist eine bessere Wahl als-qp
oder-b:v
für einen Durchgang mit einer Zielqualität. (anstatt einer Zielbitrate).-framerate 10 -i input -r 30
generiert Duplikate bei der Ausgabe auf mp4. (Nicht für mkv, aus Gründen, die sich auf ffmpeg beziehen, das vfr in mkv unterstützt, denke ich.) Wenn Ihr Inhalt 10 fps beträgt, erstellen Sie einfach ein 10 fps-Ausgabevideo. Ich denke, YouTube unterstützt jede gewünschte Framerate (bis zu 60). Handykameras zeichnen h.264-Videos mit variabler Bildrate in mp4 auf (insbesondere bei schlechten Lichtverhältnissen). Wenn Sie diese also direkt auf YouTube hochladen können, ist alles in Ordnung.-r 30
den Befehl des OP übernommen, ohne ihn zu ändern.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
) basierenden Befehl basiert , erhalte ich leider immer noch den mysteriösen Fehler "Video konnte nicht verarbeitet werden". Ich bin mir leider nicht sicher, wie ich es debuggen soll.