'Geçmiş süre X.XXX çok büyük' ​​ne anlama geliyor?


142

H.264'ü ffmpeg kullanarak kodlarken, aşağıdaki türden uyarıları toplu olarak alıyorum:

Past duration 0.603386 too large
Past duration 0.614372 too large
Past duration 0.606377 too large

Ne demek istiyorlar? Çevrimiçi veya ffmpeg belgelerinde net bir şey bulamadım.


2
Lütfen ffmpeg sorularını video.stackexchange.com beta sürümüne yönlendirin. Ffmpeg etiketi açıklamasına bakın.
Ondra Žižka

34
@Ondra Başka bir yığın değiş tokuş? Bu 100+ alt siteyle karışıyorum, bunun stackexchange'in gittiği olumlu bir yön olup olmadığından emin değilim.
mxmlnkn

1
@mxmlnkn Kabul ediyorum, daha basit süreler için seni uzun yapıyor ... :)
Erik

4
Sanırım öyle. StackOverflow programlama içindir, bu programlama değildir. Video işleme için bir Soru-Cevap sitesi var, bu video işleme hakkında bir soru. Anlamayacak ne var?
Ondra Žižka

Etiket açıklamasını da okuyun.
Ondra Žižka

Yanıtlar:


23

Binlerce uyarıyı belirli bir kodlamayla alıyordum. 1080p videoyu 480p'ye düşürüyordum. Kaynak lazer diskindeki bir kusur nedeniyle bazı tehlikeli videoların olduğu bir düzenleme noktasında, bu mesajlar ortaya çıkmaya başladı ve daha sonra her karede ortaya çıktı. Bu kısa alıntı gibi devam ettiler:

Past duration 0.901115 too large=  535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 31 times
Past duration 0.901115 too large=  535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 34 times
Past duration 0.901115 too large=  535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 36 times
Past duration 0.901115 too large=  535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 39 times

Orijinal ffmpeg çağrısı şuydu:

ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv

Buradaki önerileri izleyerek girişe ilk olarak -framerate 60000/1001 ekledim. Bu hiçbir şeyi geliştirmedi. -Frame'i korudum ve çıktıya -r 60000/1001 ekledim. Bu hala hiçbir şey geliştirmedi. Her ikisini de tuttum sonunda -async 1 -vsync 1 ekledim. Bu, tek bir uyarı almamla sonuçlandı ve hepsi bu. Bu çağrı şuydu:

ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -r 60000/1001 -async 1 -vsync 1

MediaInfo'dan ayrıntılı bir dökümde bulduğum tek fark, orijinal çağırmada bulunan ancak ikincisinde olmayan bu satırın kaldırılmasıydı:

Delay relative to video                  : -33ms

Ancak, dosyaların başına ve sonuna yakın A / V senkronizasyonunu kontrol ettim ve iki dosya arasında senkronizasyonda fark edilebilir bir fark yoktu. Çalışma süreleri de aynıydı, ancak bu VLC'de sadece en yakın saniyeye kadar ölçüldü. Bu yüzden ffmpeg kullanarak çerçeve sayılarını kontrol ettim:

ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -

ve çıktının sonuna yakın "frame = #" araması yapar.

Kaynak videonun 375226 kare uzunluğunda olduğu, orijinal çağrının 375195 kare ve ikinci çağrının 375200 sağlandığı ortaya çıktı.

Müteakip testler -frame ve -r'nin gereksiz olduğunu ve sadece iki senkronizasyon bayrağının kullanılmasının yeterli olduğunu gösterdi. Bu, yukarıdaki ikinci çağrı ile aynı sonuçları verdi, bu yüzden sorunu çözmek için bulduğum üçüncü ve en basit çağrı şu:

ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1

Ve yine başka bir dosya, senkronizasyon bayrakları ile bile bu uyarıların bir demetini üretti, ancak "sabit" oran bayraklarını ekleyerek (binlerce uyarı yerine sadece iki tane üretti). Bu yüzden bazen ikinci çağrı üçüncüsü çalışmadığında çalışır. Anlık amaçlarım için ikinci çağrıyı çözeceğim ve umarım bu sorunların çoğunu çözeceğim.

Tüm bunlar ffmpeg sürüm 4.0'dı.


2
Bunun için teşekkür ederim! Günlerce sorun yaşadıktan sonra, -async 1 -vsync 1benim için düzeltti.
Offek

1
Bu analiz için teşekkürler @larryy very helpful
deepelement

90

SourceForge'daki DVDStyler projesinin destekçilerinden biri bu konuda şunları söyledi :

15 Ocak 2015'ten sonraki FFMpeg sürümlerinde genellikle bu uyarı görüntülenir. Olası hız kontrolü bozulması hakkında uyarmak için eklenmiştir, aksi takdirde herhangi bir zarara neden olmaz.


'hız kontrolü bozulması' (esas olarak video) kodlamasıyla ilgilidir ve bu uyarıyla hiçbir ilgisi yoktur, bu da çıkış zaman damgasının giriş zaman damgasına kıyasla çok fazla (nispeten) farklılık gösterip göstermediği ile ilgilidir
Gyan

Uyarıyı ilk aldığımda dönüşümü sonlandırdım, ancak bu tavsiye beni çalıştırmamı sağladı ve uyarılar bir süre sonra durdu ve dönüşüm başarıyla tamamlandı. Teşekkürler.
IRTFM

58

Bu uyarı mesajı, yüksek bir kare hızı kaynağını düşük bir kare hızı çıkışına kodlamaya çalışırken görünür, yani karelerin düşürülmesi gerekir.


Bir dizi görüntüyü bir videoya dönüştürmek istediğim için bu hatayla karşılaştım:

ffmpeg -i %05d.png -r 24 -c:v libx264 -crf 5 out.mkv

Sorun, giriş için herhangi bir kare hızı verilmezse, 25 fps'lik bir kare hızının varsayıldığıdır:

Input #0, image2, from 'frames/%04d.bmp':
  Duration: 00:00:15.96, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: bmp, bgra, 920x650, 25 fps, 25 tbr, 25 tbn, 25 tbc

Bu, kodlanan toplam kare sayısı üzerinde de görülebilir. 400 resim vardı, ancak yukarıdaki komut sadece 384 kodladı:

frame=  384 fps= 68 q=-1.0 Lsize=   10931kB time=00:00:15.91 bitrate=5626.1kbits/s dup=0 drop=15    
video:10928kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.033807%

Hata mesajları, çıkış kare hızı yerine giriş kare hızını ayarlayarak kaybolur. Çıkış kare hızı otomatik olarak girişin hızı olarak seçilecektir. Ayrıca yeni ffmpeg versiyonlarında sen PNG görüntüleri kullanırken, çünkü dikkat etmeliyiz -iseçeneği doğrusu image2ya v4l2girdi biçimi, kullanmak zorunda -framerateyerine -r, bakınız belgelerine -rseçeneği .

ffmpeg -framerate 24 -i %05d.png -c:v libx264 -crf 5 out.mkv

Hem giriş hem de çıkış için kare hızını ayrı ayrı belirlemek de mümkündür:

ffmpeg -framerate 25 -i %05d.png -r 10 -c:v libx264 -crf 5 out.mkv

Bu durumda yalnızca 161/400 kare kodlanır. Diğer kare aralıkları kaldırılacaktır. Ayrıca hata mesajı kaybolur, sanırım stdout'a spam göndererek ffmpeg'i yavaşlatmamak için, bkz:


3
"Çünkü sadece -i seçeneği ile PNG görüntüleri kullanırken, -r yerine -framerate kullanmak zorundasınız" - bu sorunumu tamamen çözdü, teşekkürler!
İsimsiz

1
Bir wmv dönüştürmek için çalışırken mp4, kullanarak kullanarak -rişe -framerateyaramadı.
1934286

+1 ve ben "özetleme" yi en üste taşımanızı öneririz. Dahası, görüntüleri videoya dönüştürme ve çıktı kare hızını arttırma ve çıktıyı hızlandırma durumumu çözdüğü için. Bundan ffmpeg -pattern_type glob -i '*.jpg' -filter:v "setpts=0.25*PTS" -r 50 "$( date "+%Y-%m-%d_%H%M%S")-timelapse-x4-50fps.mp4"daha fazla uyarı yapmadan buna başladım ffmpeg -framerate 50 -pattern_type glob -i '*.jpg' -filter:v "setpts=0.25*PTS" -r 50 "$( date "+%Y-%m-%d_%H%M%S")-timelapse-x4-50fps.mp4"( -framerate 50giriş için eklenen not )
el-teedee

49

Bakıldığında kaynak kodu gibi görünüyor, 0.6 sabit bir sınır set daha fazla çıkış akımı içinde bir giriş akışı farklılık sunum zaman arasındaki farkı (hasta).

Kaynaktan parçacıklar:

    delta0 = sync_ipts - ost->sync_opts;
    delta  = delta0 + duration;

...

        if (delta0 < 0 &&
        delta > 0 &&
        format_video_sync != VSYNC_PASSTHROUGH &&
        format_video_sync != VSYNC_DROP) {
        double cor = FFMIN(-delta0, duration);
        if (delta0 < -0.6) {
            av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
        } else
            av_log(NULL, AV_LOG_DEBUG, "Cliping frame in rate conversion by %f\n", -delta0);
        sync_ipts += cor;
        duration -= cor;
        delta0 += cor;
    }

Bu sadece hızlı bir bakış, bu yüzden lütfen daha derine inmekten çekinmeyin.


Bu sorunu "düzeltmek" veya çıkış puanlarını açıkça ayarlamak için yapabileceğimiz bir şey var mı?
Baodad

1
Bu sorunu çevreleyen ayrıntıları hatırlamıyorum, ancak "düzeltme" ile uyarıdan kurtulmak demek sonra yukarıdaki koda dayalı seçeneği inceleyebilir format_video_sync = VSYNC_DROPveya format_video_sync = VSYNC_PASSTHROUGHve bunlardan birinin kullanım durumda geçerli olup olmadığını görmek.
Erik

Teşekkürler. -rBu uyarılar "sabit" anahtarı kullanarak kare hızı ayarını açıkça öğrendim .
Baodad

1
Sadece kişisel deneyim bir şey: "geçmiş süre" mesaj spam sorunu vardı ve giriş kare hızı -r 25 ile zorlayarak düzeltti, ama sonra ses yoğun senkronize almaya başladı. -R seçeneğinin kaldırılması ve "-async 1 -vsync 1" kullanılması, ses uyumsuzluğunu önlemek için ses sorununu engelledi, ancak "geçmiş süre" spam'i de gitmiş gibi görünüyor.
Jason Lang

V 4.1 ve sonraki sürümlerde, günlük düzeyi yükseltilmiştir, bu nedenle varsayılan günlük düzeyinde görünmez.
Gyan


1

Komut aslında şöyle olmalıdır:

ffmpeg -loglevel quiet -i input_file.xyz ...

Bir seçenek olmadığından, "-loglevel" seçeneği için bir değer olduğundan "sessiz" parametresinin "-" öneki yoktur.

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.