YouTube için sesli ve sabit görüntü içeren video oluşturma


23

Aşağıdaki komutu çalıştırıyorum:

ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov

Bu başarıyla kaydedilmiş sesim ve üzerinde bir görüntü bulunan bir videonun çıktısını alır.

Bunu YouTube'a yüklemeyi denediğimde, denediğim biçimlerden bağımsız olarak işlem yapamıyor: .mov, .avi, .flv, .mp4

Youtube’un kabul edeceği bir format oluşturacak olan yukarıda belirttiğim bir ayar var mı? Ffmpeg belgelerine bakmayı denedim ama kafamın içindeyim.

30 saniyelik bir mp3 ile 2 saniyelik bir video koyarak bir deney yaptım. Youtube'a yüklediğimde, ortaya çıkan video sadece 2 saniye sürdü. Öyleyse, YouTube yalnızca uzunluk için video parçasına bakıyor olabilir ve bir resim yalnızca bir kare uzunluğunda ya da her neyse, belki de onu sıkar.

Yanıtlar:


13

İşte ne çalıştı:

ffmpeg -i audio.mp3 -f image2 -loop 1 -i logo.jpg 
-r 15 -s 640x480 \
-c:v libx264 -crf 18 -tune stillimage -preset medium \
-shortest foo.mov

Özellikle, loopgörüntüyü kareler olarak çoğaltacak olan seçenek. Ayrıca shortest, dosyanın büyümesini ve büyümesini önleme seçeneğine de ihtiyaç duyacaktır (bu şekilde en kısa akış uzunluğunu - burada, ses dosyasını kısaltır).

Bu rseçenek kare hızını değiştirir ve crf 18kalitesini ayarlar (daha düşük video kalitesi için burada daha yüksek bir değer kullanın). Daha fazla ayrıntı için buraya bakın: FFmpeg: Nihai Video ve Ses İşleme Aracı


2
Benim için çalışmıyor. Tek kare bir film alıyorum.
Pavel Vlasov

Şimdi benim için çalışıyorum.
molnarg

4

Başka bir forumdan benim için çalışan bir kod:

ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv 

2

Pavel'in kodunu aldım, bu benim için de işe yaradı ve gereksiz seçenekleri azaltarak kısaltdım:

ffmpeg -loop 1 -shortest -i <audio file> -i <image file> <output video file>

Bu, herhangi bir görüntü ve ses dosyasıyla giriş olarak çalışan ve bir video dosyasını çıkış olarak üreten genel bir formdur.

Bununla birlikte, video akışınız süresiz olarak tekrarlanan tek bir fotoğraftan oluşacağı için, düşük bir kare hızı (bir saniyede görünen görüntü sayısı) olarak ayarlayabilirsiniz -r. Tüm çıkış kaplarının düşük kare hızlarına izin vermediğini unutmayın. Bunu yapan şey avi, yani şunları yapabilirsiniz:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> output.avi

bu, varsayılan 25 değerinin yerine 0,1 kare hızında (yani her 10 saniyede bir görüntü) bir video dosyası oluşturur. Bu, dosya boyutunu etkiler ancak video kalitesini etkilemez. Sonunda, daha iyi bir ses kalitesi elde etmek için ses bit hızını ayarlayabilirsiniz -ab. Aslında youtube için bu tür videoları yapmak için kullandığım komut:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi

Teşekkürler. Koştum ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.aviama 'Seçenek döngüsü bulunamadı.' Herhangi bir fikir?
Albay Panik

@col Hala ilgileniyorsanız: ses girişinden önce, görüntü girişinden önce loop seçeneğine ihtiyacınız var.
slhck

bu benim için çalıştığı şeydi:ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
Karolinger

2

avconv ile:

avconv -i input.mp3 -loop 1 -f image2 -i logo.png -r 30 -s 640x480 -ab 128k -ar 44100 -ac 1 -ss 00:00:00.000 -t 01:02:03.123 foo.ogv

SuperUser'a hoş geldiniz ve cevabınız için teşekkürler. Ne önerdiğiniz ve neden yardımcı olacağınız konusunda biraz daha ayrıntılı.
Brad Patton

1
Yanıt,
ffmpeg'in

2
Hiçbir ffmpeg projesi devam ediyor. Kullanımdan kaldırılan iletiye yol açan bir anlaşmazlık vardı. Bkz stackoverflow.com/questions/9477115/...
Brad Patton

2
Kullan -shortestelle kez (ayrıca, kullanmak ilan yerine çıkış seçenekleri ffmpegyerine avconvmümkünse).
llogan

2
Herkesin ilgisini
çekmesi

0

Bunu çok denemeden sonra işe aldım: https://www.youtube.com/watch?v=qjlDT819Q3s

  1. Görüntüyü https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images uyarınca videoya dönüştürün :

    ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4

    Burada birkaç görüntü kullanıyorum ve her 20 saniyede bir değiştirmelerini sağlıyorum.

  2. Yukarıdaki videonun yeterli kopyasını, https://trac.ffmpeg.org/wiki/Concatenate uyarınca sesinizin süresini uzatmak için bir araya getirin . ffmpeg -i wav.wav -i png.mp4 youtube.mp4Doğru şeyi yapmayı beklemek gibi diğer çözümler de YouTube tarafından reddedildi (ayrıca, VLC gibi oyuncuların kafası karışık ve düzgün bir şekilde aranamıyor). Tahminime göre zaman pozisyonları bir araya getirilmediği ffmpegsürece yapılmayan kopyalarda ayarlanmalıdır :

    ffmpeg -f concat -i pngs.txt -c copy pngs.mp4

    (dosyanın pngs.txtgerektiği kadar kopya içermesi için el ile üretilmiştir: kopyalar = ses uzunluğu / video uzunluğu)

  3. Sesinizi https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ uyarınca 2'de elde edilen video ile karıştırın :

    ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4

Şimdi dosya youtube.mp4YT tarafından kabul edilmelidir.

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.