Videos können nicht mit ffmpeg verkettet werden

923
Paul

Ich habe eine Bitmap, die ich als eine Art Titelbildschirm oder Disclaimer-Bildschirm vor vielen Videos verketten möchte.

Ich versuche, es in ein Video mit den gleichen Attributen wie der Rest des Videos umzuwandeln. Also zuerst schaue ich mir das Video an:

ffmpeg version 2.2.1 Copyright (c) 2000-2014 the FFmpeg developers built on Apr 11 2014 22:50:38 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid 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 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'EO1.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 encoder : Lavf52.78.3 Duration: 00:00:17.77, start: 0.000000, bitrate: 582 kb/s Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 512 kb/s, 23.98 fps, 23.98 tbr, 1199 tbn, 47.96 tbc (default) Metadata: creation_time : 1970-01-01 00:00:00 handler_name : VideoHandler Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default) Metadata: creation_time : 1970-01-01 00:00:00 handler_name : SoundHandler 

Dann versuche ich eine ähnliche Datei zu erstellen:

/usr/local/Cellar/ffmpeg/2.2.1/bin/ffmpeg -y -loop 1 -i Disclaimer.png -c: v libx264 -r 23.98 -t 5 -pix_fmt yuv420p -profile: v main disclaimer.mp4

Es scheint gut zu funktionieren. Das Video würde ich erwarten. Die Attribute fallen sehr ähnlich aus. Hier ist ein Unterschied:

< Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'disclaimer.mp4': --- > Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'EO1.mp4': 18,20c18,21 < encoder : Lavf55.33.100 < Duration: 00:00:05.01, start: 0.000000, bitrate: 21 kb/s < Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 17 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc (default) --- > creation_time : 1970-01-01 00:00:00 > encoder : Lavf52.78.3 > Duration: 00:00:17.77, start: 0.000000, bitrate: 582 kb/s > Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 512 kb/s, 23.98 fps, 23.98 tbr, 1199 tbn, 47.96 tbc (default) 21a23 22a25,28 > Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default) > Metadata: > handler_name : SoundHandler 

Wenn ich versuche zu verketten, bekomme ich Fehler.

> $ cat temporary.txt   file disclaimer.mp4 file EO1.mp4 

/usr/local/Cellar/ffmpeg/2.2.1/bin/ffmpeg -y -f concat -i temporär.txt -c kopiert output.mp4

[concat @ 0x7fd880806600] Estimating duration from bitrate, this may be inaccurate Input #0, concat, from 'temporary.txt': Duration: 00:00:00.02, start: 0.000000, bitrate: 17 kb/s Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 17 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc Output #0, mp4, to 'output.mp4': Metadata: encoder : Lavf55.33.100 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 584x328 [SAR 1:1 DAR 73:41], q=2-31, 17 kb/s, 23.98 fps, 19184 tbn, 19184 tbc Stream mapping: Stream #0:0 -> #0:0 (copy) Press [q] to stop, [?] for help [mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93600, current: 5951; changing to 93601. This may result in incorrect timestamps in the output file. [concat @ 0x7fd880806600] Invalid stream index 1 [mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93601, current: 6001; changing to 93602. This may result in incorrect timestamps in the output file. [concat @ 0x7fd880806600] Invalid stream index 1 [mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93602, current: 6051; changing to 93603. This may result in incorrect timestamps in the output file. 

...

frame= 546 fps=0.0 q=-1.0 Lsize= 1127kB time=00:00:04.90 bitrate=1882.9kbits/s  video:1123kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.349865% 

Die Ausgabe sieht so aus, als ob sie nur meine Disclaimer-Datei enthält, nicht den Rest des Videos.

Ich bin auch verwirrt, warum es sich anfühlt, etwas "schätzen" zu müssen. Es kennt die Eingangs-FPS und die Eingabedauer. Ich bin nicht sicher, ob dies das Problem ist oder nicht. Vielleicht ist es nur ein Fehler.

Meine andere Option ist die Verwendung des "Concat-Filters", aber das ist eine verlustbehaftete Transkodierung, richtig? Ich hätte lieber, dass das zweite Video nach der Verkettung genauso ist wie zuvor.

Bearbeiten: Am Ende habe ich das concat "Protokoll" ausprobiert, was die dritte Option ist. Die Dokumente lehnen die Verwendung ab, aber es funktionierte besser als die anderen beiden (Concat Demuxer und Concat Filter).

9
Neugierig - warum zeigt sich Ihre Schöpfungszeit 1970? Rajib vor 10 Jahren 1
Beachten Sie, dass Sie anstelle von "-r 23.98" "-r 24000/1001" oder "-r ntsc-film" verwenden sollten (es sei denn, das andere Video wurde mit "-r 23.98" erstellt). Dies kann jedoch das aktuelle Problem nicht lösen. LordNeckbeard vor 10 Jahren 0
Wenn Sie einen eigenen Build verwenden, sollten Sie vielleicht versuchen, eine andere wichtige Version zu erstellen ... uprego vor 10 Jahren 0

2 Antworten auf die Frage

1
Mrbios

Ich weiß, dass dies wahrscheinlich nicht die Antwort ist, die Sie suchen, aber warum verwenden Sie keine Videobearbeitungssoftware, um dies zu tun? Die Videobearbeitung kann verschiedene Bildraten, Codecs usw. in das Zielformat aufnehmen und kann mit normaler Software abgespielt werden. Eine Reihe von Programmen bietet den Stapelmodus, wenn Sie den Haftungsausschluss zu einer Reihe von Videos hinzufügen müssen.

Es gibt kostenlose Open-Source-Video-Editoren und proprietäre. Ich denke, was Sie tun, liegt weit außerhalb des Konkatenats, für das im Grunde Dateien des gleichen Typs und Formats kombiniert werden.

0
Theunis

Die beiden Videos müssen in Bezug auf Framenskala, Seitenverhältnis, Frames pro Sekunde und Bitrate exakt dieselbe Codierung aufweisen.

Versuchen Sie es mit dem eRrightSofts Super (c) -Konverter. Es ist eine sehr umfangreiche grafische Benutzeroberfläche für ffmpeg. Es hat auch "MediaInfo" eingebettet, so dass Sie Ihre Filme überprüfen können, um zu sehen, ob sie genau gleich sind.

Die Autoren beanspruchen keine Urheberrechte außer der grafischen Benutzeroberfläche und geben ffmpeg usw. volle Anerkennung.

Es sollte tun, was Sie brauchen und vieles mehr. Es ist Freeware.

Ich habe es persönlich benutzt, um Dateien zu verbinden, Video oder Audio zu extrahieren und Videos in verschiedene Formate umzuwandeln. Der Name sagt "Super" und ist es auch.