Làm cách nào tôi có thể chuyển đổi một loạt hình ảnh PNG thành video cho YouTube?


13

Tôi có một chuỗi các PNG ( đây là một mẫu ) mà tôi chuyển thành video với ffmpeg:

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

Với VLC, nó trông rất đẹp và bảnh bao nhưng trên youtube, tất cả những gì tôi thấy là màu xám!? tại sao?

nhập mô tả hình ảnh ở đây

Sau một thời gian, một thanh ngang với các điểm đầy màu sắc được hiển thị:

nhập mô tả hình ảnh ở đây

Khi tôi thêm '-pix_fmt yuv420p' vào lệnh thì youtube sẽ hiển thị clip chính xác. Nhưng sau đó, chất lượng cao nhất tôi có thể chọn là 480p, mức thấp cho mục đích này.

đầu ra 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

Tôi đã thu thập thông tin trên trang web của mình: http://www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/


Vui lòng cung cấp đầu ra giao diện điều khiển đầy đủ, không bị cắt cho (các) lệnh FFmpeg. Các định dạng pixel không liên quan đến kích thước, vì vậy bạn sẽ luôn có thể chọn độ phân giải hơn 480p trên YouTube nếu nguồn của bạn là 720p trở lên.
slhck

đã thêm đầu ra của lệnh ffmpeg. Đoạn clip được xem với VLC vẫn cho thấy độ phân giải cũ lớn hơn. Nhưng youtube cung cấp cho tôi chỉ 480p.
Raffael

Câu trả lời:


34

YouTube hy vọng video của bạn được mã hóa H.264 . Nếu bạn sử dụng libx264, hãy bám vào các đề xuất mã hóa của 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

Lời khuyên:

  • -qscalelà một cách để thiết lập chất lượng, nhưng -qscalemột mình là mơ hồ. Sử dụng -qscale:vcho video và -qscale:acho các bộ mã hóa âm thanh hỗ trợ nó. Đừng sử dụng tùy chọn này trừ khi bạn biết ý nghĩa của nó.

    x264 có một tùy chọn tốt hơn để cài đặt chất lượng : -crf. Hệ số tỷ lệ không đổi là chế độ mã hóa chất lượng không đổi. Giá trị thấp hơn có nghĩa là chất lượng tốt hơn, nhưng bất cứ điều gì dưới 18 có thể không tốt hơn về mặt trực quan. Mặc định là 23, nhưng thứ gì đó như 20 sẽ tốt hơn vì YouTube mã hóa lại video của bạn một lần nữa.

  • -pix_fmt yuv420pnên được sử dụng để cho phép lấy mẫu xuống 4: 2: 0 cho đầu vào PNG, thường không được ghép xuống (4: 4: 4, như được quan sát trong đầu ra của bạn) và thường chứa kênh Alpha. YouTube sẽ không xử lý việc này một cách chính xác.

  • -rkhông cần thiết để thiết lập tốc độ khung hình đầu ra, vì YouTube sẽ xử lý gần như tất cả tốc độ khung hình. Khi đọc 10 hình ảnh mỗi giây làm đầu vào, việc thay đổi tốc độ khung hình đầu ra thành thứ gì đó cao hơn (ví dụ 30) sẽ chỉ trùng lặp các khung hình, điều này không cần thiết.

  • -s:v 1380x720là một giải pháp kỳ lạ. Hãy suy nghĩ về việc sử dụng độ phân giải 16: 9 720p gốc 1280 × 720 và tạo lại các lô của bạn nếu cần thiết. Điều này sẽ giúp bạn giải quyết một số vấn đề và các vấn đề về hộp thư trên YouTube và việc dính vào các kích thước khác thường có thể khiến video của bạn không được hiển thị ở độ phân giải đầy đủ hoặc được cung cấp ở cài đặt chất lượng 720p.

  • Sử dụng bộ chứa MP4 thay vì MOV, mà YouTube gợi ý bạn sử dụng. MP4 hầu như giống hệt về chức năng với MOV, nhưng có hỗ trợ tốt hơn trong các thiết bị phát lại. Nói chung, thích hơn MOV khi bạn có thể.


Tôi không nghĩ những bình luận về -qscaleý nghĩa. Đối với libx264, nó giống như cài đặt -qp, phải không? Đây là một tùy chọn áp dụng cho nén x264, vì vậy nguồn là PNG không liên quan. Bất kể, -crflà một lựa chọn tốt hơn -qphoặc -b:vcho một lượt với chất lượng mục tiêu. (chứ không phải là bitrate mục tiêu).
Peter Cordes

1
bạn cũng nên sửa hiệu ứng khung trùng lặp. -framerate 10 -i input -r 30sẽ tạo ra các bản sao khi xuất ra mp4. (không phải với mkv, vì những lý do liên quan đến ffmpeg hỗ trợ vfr trong mkv, tôi nghĩ vậy.) Nếu nội dung của bạn là 10 khung hình / giây, chỉ cần tạo video đầu ra 10 khung hình / giây. Tôi nghĩ rằng youtube hỗ trợ bất cứ thứ gì bạn muốn (tối đa 60). Máy ảnh điện thoại di động ghi lại video h.264 tốc độ khung hình biến đổi ở dạng mp4 (đặc biệt là trong điều kiện ánh sáng yếu), vì vậy nếu bạn có thể tải chúng trực tiếp lên youtube, thì bạn sẽ ổn thôi.
Peter Cordes

@PeterCordes Hoàn toàn. Tôi đã lấy -r 30từ lệnh của OP mà không thay đổi nó.
slhck

Với một lệnh dựa trên câu trả lời trong câu trả lời này ( 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), thật không may, tôi vẫn nhận được lỗi "video đã không xử lý" bí ẩn. Không chắc chắn làm thế nào để gỡ lỗi nó, thật không may.
Radon Rosborough
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.