uzyskać znacznik czasu klatki kluczowej dokładnie przed danym znacznikiem czasu za pomocą FFmpeg


0

Chcę wyciąć długie segmenty pliku wideo, a następnie dołączyć do nich. Ale bez ponownego kodowania precyzyjne cięcie nie jest możliwe, ponieważ ffmpeg szuka klatki kluczowej przed moim znacznikiem czasu i wycina z tej klatki kluczowej lub w niektórych przypadkach wycina z tej klatki kluczowej i używa pewnego rodzaju tabeli do odtwarzania wideo zgodnie z przeznaczeniem. Kiedy dołączam do takich wyciętych segmentów, łączony plik pokazuje te niechciane sekcje z powodu pewnej niemożności konkat fun. w ten sposób próbuję powiązać te segmenty:

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

Aby rozwiązać ten problem z mniejszym ponownym kodowaniem, pomyślałem o podzieleniu wideo na dwie części; najpierw wytnij bez ponownego kodowania od początku do tuż przed tą klatką kluczową, która będzie szybsza, a następnie w drugiej części wytnij z ponownym kodowaniem z tej klatki kluczowej do mojej pożądanej klatki, co potrwa kilka sekund, a następnie połącz te dwie części, aby uzyskać człon.

Teraz mam dwa pytania:

1: Jak mogę uzyskać znacznik czasu klatki kluczowej przed znacznikiem czasu?

2: Czy jest jakiś problem ze sposobem łączenia segmentów, tak że w niektórych przypadkach pokazuje te niechciane części w moim połączonym pliku?

Lub w jakiś sposób mógłbym uzyskać znaczniki czasu klatek kluczowych we wprowadzonym przedziale czasu, jeśli dojdziemy do ramki kluczowej, zanim znacznik czasu nie będzie możliwy.

Odpowiedzi:


0

dla 1. możesz użyć

 ffprobe -select_streams v -show_frames youfile.mp4

aby uzyskać listę ramek, klatki kluczowe zostaną oznaczone „klatka kluczowa = 1” i ich znacznik czasu, aby można było przeanalizować tę ramkę w celu znalezienia najbliższej klatki kluczowej.

dla 2. dołączasz do nich w porządku, miałem podobne problemy z szybkim wyszukiwaniem (-ss przed -i) w strumieniach utworzonych przy użyciu multipleksera konkatatowego. Właśnie obliczyłem, które segmenty użyć poza ffmpeg, a następnie wstawiałem z wolnym wyszukiwaniem (-ss po -i)


aby uzyskać klatkę kluczową, wspomniane polecenie powoduje wyświetlenie wszystkich klatek, a dla dużego pliku wyświetlenie wszystkich klatek zajęłoby kilka minut, a następnie znalezienie tego, czego chciałem, będzie gorączkowe, chcę uzyskać konkretny wynik, w dowolny sposób Uzyskaj znacznik czasu klatki kluczowej tuż przed moim pożądanym znacznikiem czasu.
— Saif,

możesz przeanalizować dane wyjściowe programu ffprobe, aby znaleźć znaczek żądanej klatki kluczowej
— użytkownik3770489

dziękuję za odpowiedź, czy możesz zademonstrować na przykładzie kodowania, w jaki sposób mogę przeanalizować jego wynik? albo wskazać mi właściwy kierunek, w jaki sposób przeanalizować wyniki?
— Saif,

prawdopodobnie mógłbyś przetworzyć tekst za pomocą czegoś takiego jak awk lub powiedzieć ffprobe, aby wypuścił plik json / xml, co może być łatwiejsze w zarządzaniu (np. ffprobe -print_format json)
— użytkownik3770489
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.