Przekształciłem plik mkv (matroska) na avi przy użyciu ffmpeg:
ffmpeg -i input.mkv -f mp4 -vcodec mpeg4 -sameq -r 29.97 -b 512kb -acodec ac3 -ab 128kb -vol 512 output.avi
Plik wyjściowy działa poprawnie przy użyciu mplayera. Następnie użyłem mencodera do wstawienia napisów:
mencoder output.avi -o new.avi -oac pcm -ovc lavc -subfont-text-scale 3 -sub subtitle.srt
Po odtworzeniu wideo „new.avi” wideo i audio nie są zsynchronizowane. Jakie opcje mogę wprowadzić do mencodera, aby zsynchronizować A / V?
Próbowałem też tej ffmpeg -newsubtitle
opcji, ale nie mogę jej uruchomić. Wszelkie przykłady użycia -newsubtitle
byłyby bardzo mile widziane.
Odpowiedzi:
Jak wspomniano derobert, możesz zrobić wszystko w mencoderze, który korzysta z samych bibliotek ffmpeg i jest znacznie potężniejszy, pozwoli to uniknąć transkodowania, które obecnie wykonujesz. Opcja -audio-delay w mencoderze ustawia przesunięcie dźwięku względem wideo, jeśli różnica przesunięcia jest absolutna. Możesz także wypróbować różne ustawienia -autosync (wartość domyślna to 0, w instrukcji wspomniano do 30).
źródło
Jeśli tak naprawdę nie potrzebujesz AVI, możesz spróbować użyć mkvmerge z pakietu MkvToolnix (zamiast mencodera ). MKV mogą zawierać „miękkie” ścieżki napisów, co oznacza, że nie trzeba ponownie kodować strumienia wideo, aby je uwzględnić. (Oznacza to również, że gracze mogą w razie potrzeby wyłączyć ścieżki napisów podczas odtwarzania.)
Dodanie pliku SRT do MKV jest tak proste, jak
(dostosowany z sekcji Przykłady na stronie podręcznika mkvmerge, do której odsyłacz znajduje się powyżej).
źródło