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.

Saif
źródło

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)

użytkownik3770489
źródło
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