Używam ffmpeg (prawdziwy z FFmpeg, a nie fałszywy z Libav) do dzielenia niektórych plików mkv:
ffmpeg -i input.mkv -ss 00:01:00 -to 00:02:00 -codec copy output.mkv
Kiedy jednak otwieram output.mkv za pomocą VLC, pierwsze kilka sekund nie ma wideo, a tylko dźwięk. A sekundy później widzę zarówno wideo, jak i audio. Interesujące jest to, że kiedy próbuję różnych znaczników czasu po parametrze -ss, czas trwania części „tylko audio” waha się od 1 sekundy do 4 sekund lub nawet dłużej.
Staram się korzystać mkvmerge
z --split "timecodes:00:01:00,00:02:00"
, a plik wyjściowy działa poprawnie, bez „Tylko dźwięk” części na początku.
Próbowałem innego kontenera mkv z innym kodowaniem wideo / audio, ale wyniki są takie same.
Myślę, że brakuje mi niektórych opcji w ffmpeg. Co powinienem dodać do wiersza polecenia ffmpeg, aby uniknąć kilku sekund części „tylko dźwięk”?
Aktualizacja 1
Oto pełne dane wyjściowe:
$ ffmpeg -i 21.mkv -ss 00:00:58 -to 00:02:00 -kodek kopiuj clip.mkv ffmpeg wersja 2.2.2 Copyright (c) 2000-2014 deweloperzy FFmpeg zbudowany 7 maja 2014 13:08:45 z gcc 4.8.2 (GCC) 20140206 (wersja wstępna) konfiguracja: --prefix = / usr --disable-debug --disable-static --enable-avresample --enable-dxva2 --enable-fontconfig --enable-gnutls --enable-gpl --enable-libass - enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse - enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid - enable-pic --enable-postproc --enable-runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau --enable-version3 --enable-x11grab libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.100 / 55. 33.100 libavdevice 55. 10.100 / 55. 10.100 libavfilter 4. 2.100 / 4. 2.100 libavresample 1. 2. 0 / 1. 2. 0 libswscale 2. 5.102 / 2. 5.102 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 Wpisz nr 0, matroska, webm, z '21 .mkv ': Metadane: koder: libebml v1.3.0 + libmatroska v1.4.0 Creation_time: 2014-05-07 01:47:41 Czas trwania: 00: 42: 50,78, start: 0,000000, szybkość transmisji: 2833 kb / s Strumień # 0: 0 (eng): Wideo: h264 (High), yuv420p (tv, bt709), 1280x720, SAR 1: 1 DAR 16: 9, 23,98 fps, 23,98 tbr, 1k tbn, 47,95 tbc (domyślnie) Strumień # 0: 1: Audio: ac3, 48000 Hz, 5.1 (z boku), fltp, 384 kb / s (domyślnie) Wyjście # 0, matroska, do 'clip.mkv': Metadane: enkoder: Lavf55.33.100 Strumień # 0: 0 (eng): Wideo: h264 (H264 / 0x34363248), yuv420p, 1280x720 [SAR 1: 1 DAR 16: 9], q = 2-31, 23,98 fps, 1k tbn, 1k tbc (domyślnie) Strumień # 0: 1: Audio: ac3 ([0] [0] [0] / 0x2000), 48000 Hz, 5.1 (z boku), 384 kb / s (domyślnie) Mapowanie strumienia: Strumień # 0: 0 -> # 0: 0 (kopia) Strumień # 0: 1 -> # 0: 1 (kopia) Naciśnij [q], aby zatrzymać, [?], Aby uzyskać pomoc ramka = 1414 fps = 0,0 q = -1,0 Lsize = 18275kB czas = 00: 01: 02.00 bitrate = 2414.6kbits / s wideo: 15344kB audio: 2906kB podtytuł: 0 danych: 0 globalnych nagłówków: 0kB narzutu na multipleksowanie 0.134916%
Aktualizacja 2
Może być coś wspólnego z „klatkami kluczowymi”, a zezwolenie ffmpeg na ponowne kodowanie strumienia wideo nie doprowadzi do kilku sekund pustego wideo. Ponieważ jednak mkvmerge może wyciąć ten sam plik między klatkami kluczowymi bez ponownego kodowania, zastanawiam się, czy istnieje sposób, aby ffmpeg działał tak samo. Na przykład nieco „ponownie zdefiniuj” klatkę kluczową i tak dalej.
-async 1
jako opcja działa?
ffmpeg
dane wyjściowe konsoli.