일련의 PNG 이미지를 YouTube 비디오로 변환하려면 어떻게해야합니까?


13

나는 ffmpeg가있는 비디오로 바꾸는 일련의 PNG ( 여기에는 하나의 표본 )가 있습니다.

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

VLC를 사용하면 멋지고 멋지게 보이지만 YouTube에서는 내가 보는 모든 것이 회색입니다!? 왜?

여기에 이미지 설명을 입력하십시오

잠시 후 화려한 반점이있는 가로 막대가 표시됩니다.

여기에 이미지 설명을 입력하십시오

명령에 '-pix_fmt yuv420p'를 추가하면 youtube가 클립을 올바르게 표시합니다. 그러나 내가 선택할 수있는 최고 품질은이 목적을 위해 480p입니다.

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

내 웹 사이트에서 정보를 수집했습니다. http://www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/


FFmpeg 명령에 대해 자르지 않은 콘솔 출력을 모두 제공하십시오. 픽셀 형식은 크기와 관련이 없으므로 소스가 720p 이상인 경우 YouTube에서 항상 480p 이상의 해상도를 선택할 수 있어야합니다.
slhck

ffmpeg 명령의 출력을 추가했습니다. VLC로 시청 한 클립은 여전히 ​​오래된 더 큰 해상도를 보여줍니다. 그러나 YouTube는 480p 만 제공합니다.
라파엘

답변:


34

YouTube는 동영상이 H.264로 인코딩 될 것으로 예상합니다 . 를 사용하는 경우 libx264YouTube의 인코딩 제안을 따르십시오.

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

팁 :

  • -qscale품질을 설정하는 방법이지만 -qscale모호합니다. -qscale:v비디오 및 비디오 -qscale:a를 지원하는 오디오 인코더에 사용하십시오 . 이 옵션의 의미를 모르면이 옵션을 사용하지 마십시오.

    x264에는 품질 설정을위한 더 나은 옵션이 있습니다 -crf. 일정한 속도 계수는 일정한 품질 인코딩 모드입니다. 값이 낮을수록 품질은 좋아 지지만 18 미만이면 시각적으로 좋지 않을 수 있습니다. 기본값은 23이지만 YouTube가 동영상을 다시 인코딩하므로 20과 같은 것이 더 좋습니다.

  • -pix_fmt yuv420pPNG 입력에 대해 4 : 2 : 0 다운 샘플링을 활성화하는 데 사용해야합니다. 일반적으로 전혀 다운 샘플링되지 않으며 (출력에서 관찰 된대로 4 : 4 : 4) 알파 채널이 포함됩니다. YouTube는이를 올바르게 처리하지 못합니다.

  • -rYouTube는 거의 모든 프레임 속도를 처리하므로 출력 프레임 속도를 설정하는 데 필요하지 않습니다. 초당 10 개의 이미지를 입력으로 읽을 때 출력 프레임 속도를 더 높은 값 (예 : 30)으로 변경하면 프레임 만 복제되므로 필요하지 않습니다.

  • -s:v 1380x720이상한 해상도입니다. 기본 16 : 9 720p 해상도 1280 × 720을 사용하고 필요한 경우 플롯을 다시 생성하십시오. 이렇게하면 YouTube에서 문제 및 레터 박스 문제가 발생하지 않으며 비정상적인 크기로 인해 동영상이 전체 해상도로 표시되지 않거나 720p 품질 설정으로 제공되지 않을 수 있습니다.

  • YouTube에서 권장하는 MOV 대신 MP4 컨테이너를 사용하십시오. MP4는 MOV와 기능면에서 거의 동일하지만 재생 장치에서 더 잘 지원됩니다. 일반적으로 가능하면 MOV보다 선호합니다.


나는 이해가되지 않는다고 생각한다 -qscale. 의 경우 libx264설정과 동일 -qp합니까? x264 압축에 적용되는 옵션이므로 PNG 인 소스는 관련이 없습니다. 에 관계없이, -crf보다 더 나은 선택 -qp또는 -b:v목표 품질 원 패스는. (대상 비트 전송률이 아닌).
Peter Cordes

1
복제 프레임 효과도 수정해야합니다. -framerate 10 -i input -r 30mp4로 출력 할 때 중복을 생성합니다. (mkv에서 vfr을 지원하는 ffmpeg와 관련된 이유로 mkv가 아니라고 생각합니다.) 콘텐츠가 10fps 인 경우 10fps 출력 비디오를 만드십시오. YouTube는 원하는 프레임 속도 (최대 60)를 지원한다고 생각합니다. 휴대 전화 카메라는 가변 프레임 속도 h.264 비디오를 mp4 (저조도에서)로 기록하므로 YouTube에 직접 업로드 할 수 있으면 괜찮습니다.
Peter Cordes

@PeterCordes는 물론입니다. 나는 -r 30OP의 명령을 변경하지 않고 가져 왔습니다 .
slhck

이 답변 ( 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) 의 명령을 기반으로 한 명령으로 불행히도 여전히 "비디오 처리에 실패했습니다"라는 오류가 발생합니다. 불행히도 디버깅 방법을 모르겠습니다.
라돈 로스 버러
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.