Użyj FFMPEG dla wideo do klatek, a następnie klatek do wideo z oryginalnym dźwiękiem

3

Czy istnieje sposób użycia programu FFMPEG do rozłożenia wideo na pojedyncze pliki obrazów, a następnie ponownego złożenia tych plików obrazów na wideo z dźwiękiem z oryginalnego wideo w synchronizacji z nową ścieżką wideo?

Uważam, że jednym z kluczowych elementów może być prawidłowe ustawienie liczby klatek na sekundę, ale wszystkie kombinacje, które wypróbowałem, nie zadziałały.

Kombinacje, które wypróbowałem, są następujące:

ffmpeg -i "/InputVideoFilePath" "/OutputImageFilePath" 

(To polecenie zwraca tę samą liczbę plików obrazu wyjściowego, niezależnie od tego, czy specyfikacja liczby klatek na sekundę jest umieszczona w pliku wejściowym, pliku wyjściowym, czy w obu.)

Następnie przeciągam również dźwięk do osobnego pliku, wykonując następujące polecenie:

ffmpeg -i "/InputVideoFilePath" "/OutputAudioFilePath"

Następnie składam obrazy w inny plik wideo, wpisując jedną z następujących czynności:

  1. ffmpeg -i "/OutputImageFilePath" "/OutputVideoFilePath"
  2. ffmpeg -i "/OutputImageFilePath" -r 23.98 "/OutputVideoFilePath"
  3. ffmpeg -r 23.98 -i "/OutputImageFilePath" -r 23.98 "/OutputVideoFilePath"

(23,98 to oryginalna liczba klatek na sekundę wideo)

Jak dotąd zarówno 1, jak i 2 tworzą wideo krótsze niż oryginalne wideo, a 3 tworzy wideo o tej samej długości. Nie rozumiem, w jaki sposób ustawienie liczby klatek na sekundę może mieć jakąkolwiek różnicę, ponieważ dane wejściowe to po prostu seria obrazów (tj. W jaki sposób seria obrazów może mieć liczbę klatek na sekundę?). Dokumentacja FFmpeg stwierdza, że ​​ustawienie częstotliwości klatek na wejściu powoduje ignorowanie znaczników czasu, ale w jaki sposób obrazy mogą mieć znaczniki czasu, jeśli nie są częścią wideo?

Po użyciu metody 3 nakładam plik audio MP3 na nowo utworzony plik wideo za pomocą polecenia:

ffmpeg -i "/PathToVideoFile" -i "/PathToAudioFile" "/PathOfFinalVideoOutput"

Produkt końcowy jest tylko nieznacznie zsynchronizowany, ale nadal zauważalnie. W razie potrzeby mogę wyświetlić dane wyjściowe FFmpeg dla każdego z tych kroków (oczywiście jest to dużo danych wyjściowych).

użytkownik1419674
źródło
1
Jest to możliwe, ale czy możesz wyjaśnić, dlaczego jest to potrzebne? Pokaż, czego dokładnie próbowałeś, w tym nieoszlifowane wyjście konsoli FFmpeg.
slhck,
@slhck Dodałem informacje o tym, co próbowałem. Muszę także wykonać ten proces w celu stworzenia programu wideo typu greenscreen (tj. Zastąpienia zielonego tła w filmie określonym obrazem). Dziękuję bardzo za Twoją pomoc.
user1419674,
Znaczniki czasu są ignorowane dla wejścia wideo, jeśli zostanie określony -rjako opcja wejścia. Jeśli nie zostanie określony, FFmpeg przyjmie domyślną liczbę klatek na sekundę 25 dla sekwencji obrazów. Właśnie przetestowałem twój proces i działał bez problemów z synchronizacją. To było z wideo 25 FPS, więc nie musiałem tutaj określać żadnej liczby klatek, ale ustawienie zarówno 23,98 jako opcji wejścia i wyjścia byłoby idealne. Może możesz pokazać nam wynik pierwszego polecenia, a trzeciego polecenia ponownego złożenia? Nie martw się, jeśli to trochę potrwa.
slhck 11.03.13
@slhck Wydaje mi się, że mam to do pracy. Dziękuję bardzo za Twoją pomoc!
user1419674,
Miły! Może mógłbyś odpowiedzieć na własne pytanie poniżej, aby inni mogli skorzystać z twojego rozwiązania.
slhck