Ffmpeg kullanarak .flv videodan nasıl küçük resim oluşturulur?


1

Flv videodan küçük resim oluşturmak için aşağıdaki komutu kullanıyorum, resim oluşturuldu ancak hata oluştu (resim açılmıyor)

ffmpeg -ss 00:00:10 -i output.mp4 -f image2  -s 150x150 -vframes 1  -c:v libx264  assetPathNew.jpg

ffmpeg version 0.9.2, Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 22 2012 11:15:53 with gcc 4.4.4 20100630 (Red Hat 4.4.4-10)
  configuration: --enable-libx264 --enable-gpl
  libavutil    51. 32. 0 / 51. 32. 0
  libavcodec   53. 42. 4 / 53. 42. 4
  libavformat  53. 24. 2 / 53. 24. 2
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 53. 0 /  2. 53. 0
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.64.2
  Duration: 00:00:16.96, start: 0.000000, bitrate: 873 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 825 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 22050 Hz, stereo, s16, 40 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : 
[buffer @ 0xa1c7620] w:320 h:240 pixfmt:yuv420p tb:1/1000000 sar:0/1 sws_param:
[scale @ 0xa1befa0] w:320 h:240 fmt:yuv420p -> w:150 h:150 fmt:yuv420p flags:0x4
[libx264 @ 0xa1bc540] using cpu capabilities: none!
[libx264 @ 0xa1bc540] profile High, level 1.1
Output #0, image2, to 'assetPathNew.jpg':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.24.2
    Stream #0:0(und): Video: h264, yuv420p, 150x150, q=-1--1, 90k tbn, 25 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
Press [q] to stop, [?] for help
frame=    1 fps=  0 q=28.0 Lsize=       0kB time=00:00:00.-4 bitrate=  -0.0kbits/s dup=0 drop=41    
video:5kB audio:0kB global headers:0kB muxing overhead -100.000000%
[libx264 @ 0xa1bc540] frame I:1     Avg QP:32.24  size:  4707
[libx264 @ 0xa1bc540] mb I  I16..4:  0.0% 43.0% 57.0%
[libx264 @ 0xa1bc540] 8x8 transform intra:43.0%
[libx264 @ 0xa1bc540] coded y,uvDC,uvAC intra: 94.8% 97.0% 74.0%
[libx264 @ 0xa1bc540] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 10%  9% 12%  8%  7%  3% 10%  5%
[libx264 @ 0xa1bc540] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 17% 13% 10%  7%  8%  6% 10%  8%
[libx264 @ 0xa1bc540] i8c dc,h,v,p: 49% 19% 19% 13%
[libx264 @ 0xa1bc540] kb/s:941.40

Yanıtlar:


4

Sınavı geçtikten sonra -c:v libx264sonra -i, sen x264 video giriş video akışı kodlamak için FFmpeg söylüyoruz. Ancak, videoyu image2bir JPEG dosyası içinde bir formata yazmasını söylüyorsunuz . Bu, doğal olarak, işe yaramaz. Bunu akış haritalamasında gerçekten görebilirsiniz:

Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)

Öyleyse FFmpeg'in JPEG görüntüsünü yazmasını sağlayalım. Bunun yerine basit bir komut kullanın:

ffmpeg -ss 00:00:10 -i output.mp4 -s 150x150 -vframes 1 assetPathNew.jpg

Bu sefer, doğru akış eşlemesini alıyoruz:

Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mjpeg)

FFmpeg'in otomatik olarak doğru kabı seçeceğini unutmayın. Bu nedenle ihtiyacınız yok -f image2.

Kullanmak 150x150muhtemelen uzatılmış bir görüntü oluşturur ve girişin orijinal en boy oranını korumaz. En scaleboy oranını korurken filtreyi otomatik olarak yeniden boyutlandırmak için kullanabilirsiniz :

ffmpeg -ss 00:00:10 -i output.mp4 -filter:v scale=150:-1 -vframes 1 assetPathNew.jpg

Bu muhtemelen 150x113 değerinde bir çıktı verecektir. 150x150 boyutuna sahip olmanız gerekiyorsa pad, ekstraları doldurmak için filtre ekleyebilirsiniz :

ffmpeg -ss 00:00:10 -i output.mp4 -filter:v "scale=150:-1,pad=iw:150:0:(ow-ih)/2" -vframes 1 assetPathNew.jpg

Ffmpeg -ss 00:00:10 -i output.mp4 -filter: v "scale = 150: -1, pad = iw: 150: 0: (ow-ih) / 2" -vframes 1 komutunu güncelleyerek aşağıdaki komutu uygularım. assetPathNew.jpg ve şu hatayı alıyorum: Akış haritalaması: Akış # 0: 0 -> # 0: 0 (h264 -> mjpeg) Durdurmak için [q], yardım çerçevesi için [?] tuşuna basın = 1 fps = 0 q = 4.0 Lsize = 0kB zaman = 00: 00: 00.04 bit hızı = 0.0kbits / s dup = 0 bırak = 41 video: 7kB ses: 0kB genel başlıklar: 0kB muxing havai -100.000000%
Shishir Mudliyar

Bu gerçekten bir hata değil. Akış eşlemeniz doğru ve bir kare çıktı.
slhck

Ben bu görüntü var. Ffmpeg ile ilgili sorunu çözmek için tekrar teşekkürler.
Shishir Mudliyar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.