Portál AbcLinuxu, 1. května 2025 05:51
V nejnovějších verzí FFmpegu se objevil jeden docela otravný problém (od cca 12. 2007), některé mpeg soubory nahrané z TV karet pod Linuxem pomocí getstreamu mají chybné časové stopy (timestamps), FFmpeg to dříve ignoroval, ale stavající verze už to bere celkem vážně a ukončí převod, pokud na takovou chybu narazí.
Nejprve jsem jednoduše odstranil kontrolu na tuto chybu v souboru ffmpeg.c, potom jsem si ale všiml že se ffmpeg za některých situací nechce ukončit, takže to je špatné řešení, hledal jsem tedy lepší řešení, opravit korektně se mi to asi nepodaří, protože ideální řešení je celkově přepsat časovou stopu při převodu, to se dělá jen pokud dochází k enkódování, pokud k enkódování nedochází (-acodec copy -vcodec copy), tak se na časovou stopu moc nešahá, nejjednodušší a funkčí bylo tedy zakázat kontrolu na chybnou časovou stopu přímo v knihovně libavformat, toto řešení jsem dnes asi 4 hodiny důkladně testoval a nepřišel jsem na žádné zásadní problémy.
Pokud máte Debian a používate zdroj http://debian-multimedia.org/ oprava bude v balíku za cca 2 dny. Ostatní, které tato chyba trápí můžou použít přiložený patch.
--- ffmpegcvs-20071206/libavformat/utils.c<---->2007-12-06 16:25:07.000000000 +0100 +++ ffmpegcvs-20071206.orig/libavformat/utils.c>2008-03-03 15:20:29.000000000 +0100 @@ -2277,7 +2277,7 @@ . if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){ av_log(NULL, AV_LOG_ERROR, "error, non monotone timestamps %"PRId64" >= %"PRId64"\n", st->cur_dts, pkt->dts); - return -1; +// return -1; } if(pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE && pkt->pts < pkt->dts){ av_log(NULL, AV_LOG_ERROR, "error, pts < dts\n");
Pokud víte o lepším řešení, sem s ním :) Ale musí to být součástí ffmpegu, nechci mpeg soubor opravovat replexem, protože při velkém množství souborů to zabere hodně času a vytíží to zbytečně disk.
PS: Dají se sem vkládat i malé soubory tak jako obrázky? Nikde jsem to tu nenašel.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.