Giriş olarak görüntü dosyaları ile ffmpeg giriş seçeneği için açıklama


34

Bazı resimlerim var ve ffmpeg ile hareketli bir gif yapmak istiyorum. Resimlerin adları şöyle:

837_1.png
838_1.png
...

Ffmpeg'nin -i komut satırı seçeneğini anlamaya çalışıyorum ama bazı sorunlara karşı çarpıyorum.

Hiçbir şey belirtmezsem, dosyaları değiştirmemi isteyin:

ffmpeg -i * -vcodec libx264 out.mp4

ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, image2, from '358_1.png':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 550x550, 25 tbr, 25 tbn, 25 tbc
File '359_1.png' already exists. Overwrite ? [y/N]

Ve internette en çok kullanılan formattan (% d) birini kullanmaya çalışırsam .. ffmpeg dosyaları bulamıyor:

fmpeg -i '%3d_1.png' -vcodec libx264 out.mp4

ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[image2 @ 0x7f963a006600] Could find no file with with path '%3d_1.png' and index in the range 0-4
%3d_1.png: No such file or directory

So .. burada soru, ffmpg ile -i komut satırı seçeneği nasıl kullanılır ?

Netlik sağlamak için Mac OSX 10.8, ffmpeg sürüm 1.2.1, zsh 4.3.11

Yanıtlar:


47

Başka bir seçenek olmadan, ffmpeg'in image2suçlayıcısı, 0 ile başlayan bir diziyi arayacaktır. Bu dizini de 5 varsayılan değerle kontrol edecektir (bu nedenle 0-4 aralığında hiç dizin bulunmadığından şikayetçi olur). Başına belgelere Eğer 837 gibi keyfi bir endeksinde başlamak istiyorsanız, başlangıç numarasını belirlemek zorunda.

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 out.mp4

PNG'den H.264'e dönüşümde renk alanı

PNG dosyaları pikselleri temsil etmek için RGB renk alanını kullandığından, H.264'e dönüşüm YUV 4: 4: 4 ( alt örneklenmemiş ) olur. Sonuçta ortaya çıkan video, FFmpeg tabanlı olmayan herhangi bir şey olmak üzere tüm oynatıcılarda oynatılamayabilir. Müzik çalarınız yalnızca siyah kareler gösterebilir veya büyük olasılıkla çökebilir. Bunu düzeltmek için, piksel biçimini YUV 4: 2: 0 olarak değiştirin:

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 -pix_fmt yuv420p out.mp4

Kaliteyi kontrol etmek için -crfseçeneği kullanın. Daha fazla bilgi için x264 kodlama kılavuzuna bakın .

*Glob neden çalışmıyor

*Bir giriş seçeneği olarak kullanmayın . Kabuk görmeden önce ffmpegonu geçerli dizindeki tüm dosyalara genişletir , böylece komut genişler ffmpeg -i file1 file2 … filen. Tüm giriş dosyalarının ffmpegbu -iseçeneğe ihtiyaç duyması nedeniyle , bunun file2 … filenyerine çıktı dosyaları olarak kabul edilir ve üzerine yazılır. İyi değil.


çok eksiksiz cevap! Ayrıca animasyonlu gif ile ilgili tavsiyelerin var mı?
nkint

Animasyonlu GIF'ler için, ffmpeg sürüm 2.0 ve üstü sürümlere güncelleme yapmak istiyorsunuz, çünkü görsel kaliteyi büyük ölçüde artırdılar. İndir statik eski Ffmpeg için OS X için Derlemelere sayfa bkz bazı bağlantıları vardır: korkunç kaliteli ile .gif için ffmpeg dönüştürür .flv Video
slhck

Aslında, yalnızca + 0..4'ü değil, aynı zamanda 8,16,32,64 vb.'yi de denetler. HTTP url'leri kullanılırken bu fark edilir. Ancak, image2bunun 200 OK"Bulunan dosyanın" eşdeğeri olduğunu kabul etmemesi dolayısıyla aramayı durdurmaz.
MSalters

1
Önerilerinizi uygulamaya çalıştıktan sonra bile aynı şeyi alıyorum. Benim adlandırılan dosyaların DSCxxxxx.jpgnerede xxxxxsıfır ile 5 haneli bir sayı başlangıç (not hiçbir alt çizgiler) 'dir. Yine de, çalıştırdıktan sonra ffmpeg -r 30 -start_number 04606 -i DSC%d.jpg out.mp4yukarıdaki orijinal
Anonymous

@jphollowed Dosya adı desenini tırnak içinde yazdınız mı?
slhck

29

Globbing -pattern_type globseçeneği belirtilerek etkinleştirilebilir :

ffmpeg -pattern_type glob -i '*.png' -vcodec libx264 out.mp4

2
Çok daha iyi bir yol :)
Gustav

3
Sadece bu benim için çalıştı. Hiçbir şekilde bu olsun xxx%d.png, xxx%3d.png, 'xxx%d.png'veya 'xxx%3d.png'şey çalışma
yPhil

Bunu denedikten sonra aynı hatayı alıyorum:[image2 @ 0x2552560] Could find no file with path '*.jpg' and index in the range 0-4 *.jpg: No such file or directory
Anonymous

'Glob' desen tipi seçildi ancak globbing bu libavformat derlemesi tarafından desteklenmiyor [Windows ffmpeg kullanıyor] [oof, bir yanıtı aşağı kaydırmalıydı]
Katastic Voyage

7

Not: Desen globbingi Windows altında çalışmaz (ve Windows altında libavfilter'de globbing desteği olmadığı için asla çalışmayabilir.) Dolayısıyla, bunu Windows altında yaparsanız, dosyaları sırayla numaralandırmak için yeniden adlandırmanız gerekir. ve boşluklar olmadan.

Bunları basit bir Powershell komut satırıyla yeniden adlandırabilirsiniz:

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName “Base$x”; $x++ }

Bu, geri dönecek file1.jpg file2.jpgfile10.jpgalfabetik olarak sıralarsanız file1.jpg, file10.jpgfile2.jpg
stib

Bu Base $ x.jpg olmamalı mı? Olduğu gibi, seninki tüm isimleri değiştirdi ve dosya uzantılarını öldürdü.
Katastic Voyage

5

PowerShell ile yeniden adlandırmanın daha iyi bir yolu (siparişi koru):

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName "Base$($x.tostring('000000')).jpg"; $x++ }

Her dirzaman alfabetik olarak sıralanmış dosyaları döndürür mü? sort-objectKarışıma eklemek daha güvenli olur mu?
stib
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.