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ć mkvmergez --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 1jako opcja działa?
ffmpegdane wyjściowe konsoli.