Bagaimana saya bisa mengonversi serangkaian gambar PNG ke video untuk YouTube?

13

Saya memiliki urutan PNG (di sini adalah satu spesimen ) yang saya ubah menjadi video dengan ffmpeg:

ffmpeg -r 10 -i image%03d.png -s 1380x720 -c:v libx264 -qscale 10 -r 30
       basf_merck_libx264.mp4

Dengan VLC kelihatannya bagus dan keren tetapi di youtube yang saya lihat adalah abu-abu !? Mengapa?

masukkan deskripsi gambar di sini

Setelah beberapa saat, bar horizontal dengan bintik-bintik berwarna ditampilkan:

masukkan deskripsi gambar di sini

Ketika saya menambahkan '-pix_fmt yuv420p' ke perintah maka youtube menunjukkan klip dengan benar. Tapi kemudian kualitas tertinggi yang bisa saya pilih adalah 480p yang rendah untuk tujuan ini.

keluaran 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

Saya mengumpulkan informasi di situs web saya: http://www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/

Raffael
sumber
Silakan berikan output konsol penuh, belum dipotong untuk perintah FFmpeg. Format piksel tidak terkait dengan dimensi, jadi Anda harus selalu dapat memilih lebih dari 480p resolusi di YouTube jika sumber Anda 720p ke atas.
slhck
menambahkan output dari perintah ffmpeg. Klip ditonton dengan VLC masih menunjukkan resolusi lama yang lebih besar. Tapi youtube menawarkan saya hanya 480p.
Raffael

Jawaban:

34

YouTube mengharapkan video Anda dikodekan H.264 . Jika Anda menggunakan libx264, patuhi saran penyandian YouTube:

ffmpeg -framerate 10 -i image%03d.png -s:v 1280x720 -c:v libx264 \
-profile:v high -crf 20 -pix_fmt yuv420p daimler_man.mp4

Kiat:

  • -qscaleadalah cara untuk menetapkan kualitas, tetapi -qscalesendirian saja yang ambigu. Gunakan -qscale:vuntuk video dan -qscale:auntuk encoders audio yang mendukungnya. Jangan gunakan opsi ini kecuali Anda tahu artinya.

    x264 memiliki pilihan yang lebih baik untuk kualitas pengaturan: -crf. The Constant Tingkat Factor adalah mode encoding kualitas konstan. Nilai yang lebih rendah berarti kualitas yang lebih baik, tetapi apa pun di bawah 18 mungkin tidak secara visual lebih baik. Standarnya adalah 23, tetapi kira-kira 20 akan lebih baik karena YouTube menyandikan ulang video Anda lagi.

  • -pix_fmt yuv420pharus digunakan untuk mengaktifkan downsampling 4: 2: 0 untuk input PNG, yang biasanya tidak downsampled sama sekali (4: 4: 4, seperti yang diamati pada output Anda) dan sering mengandung saluran Alpha. YouTube tidak akan menangani ini dengan benar.

  • -rtidak diperlukan untuk mengatur framerate output, karena YouTube akan menangani hampir semua frame rate. Saat membaca 10 gambar per detik sebagai input, mengubah laju bingkai output menjadi sesuatu yang lebih tinggi (misalnya 30) hanya akan menduplikasi bingkai, yang tidak perlu.

  • -s:v 1380x720adalah resolusi yang aneh. Pikirkan tentang menggunakan resolusi asli 16: 9 720p 1280 × 720, dan buat kembali plot Anda jika perlu. Ini akan menghindarkan Anda dari masalah dan masalah letterboxing di YouTube, dan tetap pada dimensi yang tidak biasa mungkin mencegah video Anda ditampilkan dalam resolusi penuh atau ditawarkan pada pengaturan kualitas 720p.

  • Gunakan wadah MP4 alih-alih MOV, yang disarankan YouTube untuk Anda gunakan. MP4 pada dasarnya identik dalam fungsi untuk MOV, tetapi memiliki dukungan yang lebih baik dalam perangkat pemutaran. Secara umum, lebih suka daripada MOV bila Anda bisa.

slhck
sumber
Saya tidak berpikir komentar tentang itu -qscalemasuk akal. Karena libx264, itu sama dengan pengaturan -qp, bukan? Ini adalah opsi yang berlaku untuk kompresi x264, jadi sumber yang menjadi PNG tidak relevan. Apapun, -crfadalah pilihan yang lebih baik daripada -qpatau -b:vuntuk sekali jalan dengan kualitas target. (daripada bitrate target).
Peter Cordes
1
Anda harus memperbaiki efek bingkai duplikat juga. -framerate 10 -i input -r 30akan menghasilkan duplikat saat menghasilkan ke mp4. (bukan mkv, untuk alasan yang berkaitan dengan ffmpeg yang mendukung vfr di mkv, saya kira.) Jika konten Anda adalah 10 fps, cukup buat video keluaran 10 fps. Saya pikir YouTube mendukung framerate apa pun yang Anda inginkan (hingga 60). Kamera ponsel merekam video frame-rate-h.264 dalam mp4 (khususnya dalam cahaya rendah), jadi jika Anda dapat mengunggahnya langsung ke youtube, maka Anda akan baik-baik saja.
Peter Cordes
@PeterCordes Benar-benar. Saya telah mengambil -r 30dari perintah OP tanpa mengubahnya.
slhck
Dengan perintah berdasarkan yang ada di jawaban ini ( 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), sayangnya saya masih mendapatkan kesalahan "video gagal proses" yang misterius. Sayangnya, tidak yakin cara men-debug-nya.
Radon Rosborough