Yanıtlar:
Bu, @ abrahab'ın son yorumuna bir cevap.
mp4box
Bir dosyaya nginx üzerinden akış yapabilmek için dosyaya ihtiyacınız yoktur . MP4 akış modülü, moov atomlarının konumlandırılmasından bağımsız olarak ilgilenir ( mp4box
moov atomunu dosyanın başlangıcına kaydırır).
Şimdi 500 sunucu hatası için mp4box ile "-frag" seçeneğini kullanıyor musunuz? MP4 akış modülü, parçalanmış MP4 dosyalarını okuyamaz. mp4box
Sözde yayın için iyi bir kullanım, daha iyi arama için videoları bir araya getirmektir. Moov atomunun kayması ilave bir avantajdır.
Bunu her zaman mp4box
FFmpeg kodlu bir dosyaya yapıyorum
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Bu aynı zamanda, MP4 dosyasını varsayılan olarak 500 milisaniye boyutunda araya sokacaktır.
Genellikle, bir MP4 kabı içinde x264 video oluşturmak istersiniz. Bu seçenek temelde herhangi bir cihaz ve tarayıcı tarafından desteklenir.
Aşağıdakiler yeterli olmalı. Giriş adını ve CRF seçeneklerini değiştirdiğinizden emin olun. İkincisi, akıl sağlığı değerlerinin 19 ile 25 arasında değiştiği kaliteyi ayarlar - daha düşük daha iyi kalite, aynı zamanda daha yüksek bit hızı anlamına gelir:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
GUI yöntemini isterseniz kodlama için El Freni de kullanabilirsiniz .
faststart
Seçeneği kullanmaŞimdi yapmanız gereken, MP4 taşıyıcısının MOOV atomunu başlangıcına taşımak . Bu atom (özünde, MP4 kabındaki bir veri birimi), video / ses akışlarının kendileri hakkında önemli meta veriler içerecektir. -movflags faststart
tam olarak bunu yapmalı.
FFmpeg sürümünüzde bu seçenek yoksa, yükseltmeyi düşünün. Yükseltme yapamıyorsanız, aşağıdaki araçlardan herhangi biriyle aynı şeyi başarabilirsiniz:
QTIndexSwapper , bir Adobe AIR uygulaması
MP4Box , serbest ve açık kaynak kodlu, aşağıdakine benzer bir komut çalıştırarak, aralığını değiştirebilir (burada, 500):
mp4box -inter 500 input.mp4
Python'un kurulu olduğu her yerde çalışan Python'da qt-faststart .
qtfaststart input.mp4
Bu konuda.
Şimdi, tabii ki, akış için, aslında belirli sınırlar içinde kalmak için bit hızını sınırlamak isteyebilirsiniz. Bu konuda daha fazla bilgiyi blog yazımda ücret kontrol yöntemleri hakkında okuyabilirsiniz .
Örneğin -maxrate 2M -bufsize 2M
, kodlama seçeneklerine ekleyerek , kodlamayı 720p video için yeterli olabilecek 2 Mbit / s değerine kadar kaplarsınız. Gerekli bit hızı, elbette, içeriğin ne kadar karmaşık olduğuna bağlı olacaktır. Bu bazı deneme yanılma alır.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
zaman mp4box
ve mp4 arama yapamıyorum ve nginx raporunu 500 internal server error
başlatmak için daha fazla parametre başlattı 0
. -vcoded libx264
( video, varsayılan mp4 kodlayıcı olmadan) kodlandığında (ama quality! sick!) :( (üzgünüm, şimdi, cevabını değiştirmemize izin verilmiyor)
-movflags faststart
Tam ihtiyacım olan şey için +1
Akışı olmayan bir AVI veya MP4'ü, her şeyi yeniden kodlamadan da, basitçe, aşağıdakileri yaparak dönüştürebilirsiniz:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Herhangi bir şeyi yeniden kodlamaya gerek yok çünkü sadece moov atomunun taşınması gerekiyor.
Bunu ffmpeg ile deneyebilirsiniz:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(hata :) ile bile çalışmıyor Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
. IETF taslağı gibi iyi bir neden tam olarak bu parametrelerin seçilmesinin de eksik olduğu görülüyor.
MP4Box -isma -inter 500 Myvideo.mp4