image + audio = mp4: videoyu nasıl küçültebilirim?


13

MP4 yapmak için MP4 bir JPG eklemek için ffmpeg kullanıyorum.

Videoyu yapmak için tek bir resim olduğundan, video boyutunu küçültmenin bir yolu olup olmadığını merak ediyorum?

Komut:

$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4

Sonuçlar:

  • image.jpg = 26,7K (görüntü çok net değil)
  • audio.mp3 = 64,6 milyon (54 dakika)
  • output.mp4 = 80,6M (video sonucu o kadar net değil, müzik hala iyi)

MP4 için makul bir boyut mu?


Ben sadece mp3 çalar ve boyutu kurtarmak için bir jpg ekran sabit tutmak için meta mp4 mümkün olup olmadığını merak ediyorum :)
SIDU

Çıktı için hedef oynatıcı, cihaz veya site nedir?
llogan

Yanıtlar:


20

YouTube'a yüklemek için

H.264: en küçük dosyalar

Bu yöntem, H.264 videoyu kodlamak için libx264 kullanır. Aşağıdaki akış kopyalama yönteminden daha yavaştır, ancak potansiyel olarak daha küçük bir dosya boyutu verir.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv

Akış kopyası: en hızlı işlem

Bu yöntem , görüntüyü MKV kabına kopyalar (kodlama yapmaz). Süper hızlı, ancak boyut yukarıdaki yöntemden önemliyse daha küçük bir dosya oluşturabilir.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 -c copy -shortest output.mkv
  • YouTube hemen hemen her şeyi kabul eder, bu nedenle bu komutlar kodlamayı daha hızlı yapmak veya dosya boyutunu küçük yapmak ve kaliteyi yüksek tutmak için birkaç numara kullanır, çünkü YouTube verdiğiniz her şeyi yeniden kodlar. Oynatıcınız muhtemelen beğenmeyecek, ancak YouTube beğenecek.

  • Bu örneklerde, varsayılan 25 fps'den daha hızlı işlemesi gereken çok düşük bir kare hızı kullanılır.


Herhangi bir oyuncu için en geniş uyumluluk

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset medium -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
  • Bu sadece çok eski cihazlar (değiştir dışında, hiçbir konuda üzerinde oynaması gerektiğini -profile:v mainüzere -profile:v baselinebu durumda ise).

  • Ses girişiniz zaten AAC ise gereksiz yeniden kodlamayı önlemek -c:a aaciçin -c:a copyolarak değiştirin .

  • Kodlama süresi daha uzun olacak ve dosya boyutu yukarıdaki YouTube komutlarından daha büyük olacaktır.

  • Daha fazla bilgi için bkz. FFmpeg Wiki: H.264 .


Youtube tarafından izin verilen en düşük kare / sn değerinde 1280 * 720'de a.jpg + a.mp3 = a.mp4 yapmak için bir kod satırı sağlayabilir misiniz? Ayrıca tek bir iş olduğundan, "-loop 1" i silmem gerekir mi? Şimdiden teşekkürler.
SIDU

@SIDU Mevcut komut (MP4 yerine MKV çıktısı dışında) istediğinizi yapar, ancak YouTube tarafından desteklenen en düşük kare hızını bilmiyorum. Sadece denemen gerekecek. Sadece YouTube'a yüklerken neden MP4'e ihtiyacınız var?
llogan

Denedim ama diyor ki:Unrecognized option 'preset'. Error splitting the argument list: Option not found
NineCattoRules

@NineCattoRules Daha fazla bilgi olmadan söylemek zor. ffmpegKomutunuzun tamamını ve komuttan tam konsol çıktısını göstermek için bir macun sitesi kullanın , ardından bağlantıyı bir açıklamada belirtin.
llogan

Teşekkürler, mc3man deposunu kullanarak FFMPEG'i yeniden kurdum ve şimdi iyi çalışıyor!
NineCattoRules

3

Sadece verdiğiniz bilgilerle ne düşünebilirim.

Parçalar halinde gidelim:

Videoya yalnızca bir resim eklendiğinden. Video boyutunu azaltmak için bir yol olup olmadığını merak ediyorum mesela 28 bit yerine kuvvet bit hızı / saniye = 1?

Hareketsiz bir görüntü olduğu için değiştirmeye gerek yok. sadece yerinde dur.

Orada bahsettiğiniz şey, bit hızı değil, saniye başına kare (fps) . Ve konseptte haklısın. Beign sadece bir fotoğraf 1 fps sorun olmaz.

Mp4 için makul bir boyut mu? Görüntü boyutu çok mu önemli?

Bu durumda, görüntü boyutunun önemli bir ağırlığı olmazdı, çünkü sadece bir fotoğrafla uğraşıyoruz. Yüksek kaliteli bir video olsaydı, farklı bir konudur.

Jpg'yi 1080 * 720 olarak yeniden boyutlandırmalı ve 720p olarak çıktı almak için ffmpeg'de ek ayarlar yapmalıyım (o zaman ffmpeg ayarı nedir :)?

Söylediğiniz çözünürlük 1280x720.

-loop 1Buradaki seçenekteki noktayı görmüyorum, sadece süreci yavaşlatacak. Kullanmak mı -shortestdosya 1'den fazla giriş akışı vardır çünkü? Hayır ise, kullanmak için bir neden yoktur. Kullandığınızdan beri -acodec copy, yeniden kodlamak istemediğinizi varsaymak zorunda kalacağım.

720p 1fps çıkışı için yeniden kodlama yapmadan ve bit hızına dokunmadan:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4

Birden fazla giriş akışı olduğu ve ffmpeg'in en kısa akışta kodlamayı bitirmesini istediğiniz duruma gelin:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4

Şimdi bit hızını değiştirmeniz gerekiyorsa (örnek olarak 1024k diyelim);

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4

Bkz . Çıktı bit hızını sınırlama

-c: bir kopyala = Yeniden ses kodlamamamız için giriş ses akışını kopyalayın.

-b: v = (kesin olarak değil) sabit olarak belirtilen bit hızı.

-bufsize = Ortalama bit hızını hesaplayan aralık. -B: v'de belirtilenlere göre en düşük kayıp kalitesinde görüntü ancak daha doğru bit hızları anlamına gelir .

-s = Video çıkışının gerçek boyutu.

-framerate = Çıktının kullanmasını istediğimiz girdi kare hızı.

Hala bir noktada daha küçük boyutlu bir video istiyorsanız, bunu başarmak için kaliteden ödün vermeniz gerektiğini unutmayın. Ve bunu yapmanın diğer yolları, kayıplı sıkıştırma ile yeniden kodlamayı içerir.

Söylediklerinizden, sağladığınız bilgilerden ve ne yapmaya çalıştığınızdan, hedefinizin mp3 albümüne albüm yerleştirmek olduğunu düşünüyorum. Hedefiniz buysa, bu ihtiyaçlarınızı daha iyi karşılar:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

-map_metadata = Dosyayı dosyadan çıktılamak için ffmpeg meta veri belirteci. Bu durumda ( sıfır ) global meta veriler.

-map 0 = Giriş akışı 1 (ses).

-map 1 = Giriş akışı 2 (görüntü).

Burada hiçbir şey isteklerinize uygun değilse lütfen daha fazla bilgi verin.


-framerateBir giriş seçeneği olarak kullanmayı ve çıktıyı kaldırmayı düşünün -r: aksi takdirde 25 olan varsayılan giriş kare hızı kullanılır ve daha sonra ffmpegelde etmek için kareler düşer -r 1. Yalnızca giriş kare hızını bildirirseniz, çıkış aynı kare hızını kullanır.
llogan

Teşekkürler. Bunu bilmiyordum. Önerilen değişiklikleri yansıtacak şekilde düzenlendi.
Fenrir

Eğitim için teşekkürler. Benim origianl ffmpeg kod satırı ne arama hakkında hiçbir fikrim yok, google arama kopyala-yapıştır oldu.
SIDU
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.