Hallo,
mein Thema hat nichts mit dem VDR zu tun, aber da ich nach zwei Tagen googeln mit meinem Latein am Ende bin und hier der ein oder andere Videofreak dabei ist, stelle ich meine Frage einfach mal hier.
Ich habe hier diverser Mitschnitte (von http://new.livestream.com/) bzw. Webinar-Aufzeichnungen (GoToWebinar) und möchte ein Intro davor- und ein Outro (rechtliche Hinweise) dahinterhängen. In den Videos passiert im Prinzip nicht viel, da im wesentlichen nur irgendwelche Charts oder Powerpoint-Präsentationen zu sehen sind. Ich verwende eine aktuelle Version von FFmpeg unter Windows.
Das Intro sieht folgendermaßen aus:
Duration: 00:00:03.86, start: 0.000000, bitrate: 444 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 274 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 178 kb/s (default)
Das Outro so:
Duration: 00:00:05.07, start: 0.000000, bitrate: 162 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 160 kb/s, 15 fps, 15 tbr, 15 tbn, 30 tbc (default)
Das eigentliche Video wurde per Handbrake von WMV (proprietärer Codec) in MP4 konvertiert und die Framerate auf 25 fps geändert (vorher 4.12
Duration: 02:35:04.42, start: 0.000000, bitrate: 448 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 306 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 135 kb/s (default)
Ich bin nach dieser Anleitung vorgegangen und habe den Concat-Demuxer und das Concat-Protokoll verwendet.
Demuxer:
concat.txt
Ausgabe:
ffmpeg version N-64514-g14e2406 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 7 2014 22:09:37 with gcc 4.8.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass
--enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-lib
opencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvids
tab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-lib
xvid --enable-decklink --enable-zlib
libavutil 52. 91.100 / 52. 91.100
libavcodec 55. 68.102 / 55. 68.102
libavformat 55. 45.100 / 55. 45.100
libavdevice 55. 13.101 / 55. 13.101
libavfilter 4. 10.100 / 4. 10.100
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
[concat @ 0000000002ba0460] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from 'concat.txt':
Duration: 00:00:00.00, start: 0.000000, bitrate: 456 kb/s
Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 274 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
Stream #0:1: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 178 kb/s
[mp4 @ 0000000005339620] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
Last message repeated 1 times
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf55.45.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 274 kb/s, 25 fps, 12800 tbn, 25 tbc
Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 178 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=232815 fps=15013 q=-1.0 Lsize= 510013kB time=1324:32:36.92 bitrate= 0.9kbits/s
video:348256kB audio:154136kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.516876%
Display More
Laut VLC hat das Video eine Länge von 1300 Stunden und nach dem Vorspann springt das Bild nicht um (der Ton läuft aber weiter).
Concat-Protokoll:
Die einzelnen Videos habe ich mittels
in einen MPEG Transport Stream gewandelt und dann per
ffmpeg -i "concat:intro_1920x1080.ts|02072014_25.ts|outro_1920x1080.ts" -c copy -bsf:a aac_adtstoasc -y output.mp4
zu einem Video zusammengefügt. Ganz nach Anleitung eben
ffmpeg version N-64514-g14e2406 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 7 2014 22:09:37 with gcc 4.8.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-li
--enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enabl
opencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-li
tab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enabl
xvid --enable-decklink --enable-zlib
libavutil 52. 91.100 / 52. 91.100
libavcodec 55. 68.102 / 55. 68.102
libavformat 55. 45.100 / 55. 45.100
libavdevice 55. 13.101 / 55. 13.101
libavfilter 4. 10.100 / 4. 10.100
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, mpegts, from 'concat:intro_1920x1080.ts|02072014_25.ts|outro_1920x1080.ts':
Duration: 02:35:04.35, start: 1.440000, bitrate: 508 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
No Program
Stream #0:1[0x101](und): Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 226 kb/s
[mp4 @ 00000000003b93c0] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
Last message repeated 1 times
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf55.45.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 90k tbn, 90k tbc
Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 226 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=232765 fps=9675 q=-1.0 Lsize= 513589kB time=02:35:12.69 bitrate= 451.8kbits/s
video:349660kB audio:154136kB subtitle:0kB other streams:0kB global headers:1kB muxing overhead: 1.943920%
Display More
Das Video lässt sich zwar abspielen, ist aber nicht 100%ig synchron.
Im Netz gibt es zwar einige Threads aus der FFmpeg-Mailingliste zur Verarbeitung von Streaming-Daten und den damit verbundenen Timestamp-Problemen, aber ich bin noch nicht fündig geworden.
Kann mir vllt. jemand einen Tipp geben?
Gruß,
Marco