Einfügen von Audio von einer Videodatei in eine andere mit einem bekannten Zeitversatz

682
Tal Darom

Ich habe zwei Videodateien, die auch Audiospuren haben. Ich möchte die Audiospur einer Datei mit einem Zeitversatz von 5000 ms in die andere kopieren.

Das einzige Problem ist, dass die Videodateien nicht die gleiche Dauer haben. Ich möchte, dass die resultierenden Videodateien am Anfang / Ende leere Frames haben, wenn das Audio vor oder nach dem Video beginnt.

Ich bin auf der Suche nach einer Befehlszeilenlösung, die unter Linux wie ffmpeg, mencoder usw. verwendet werden kann.

BEARBEITEN: ffmpeg -i 1.mp4 -i 2.mp4 ausführen

ffmpeg version 0.8.9-4:0.8.9-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Nov 9 2013 19:08:00 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2013-06-15 03:58:00 Duration: 00:06:49.29, start: 0.000000, bitrate: 3009 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 2814 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s Metadata: creation_time : 2013-06-15 03:58:05 Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2013-06-15 17:25:15 Duration: 00:06:59.09, start: 0.000000, bitrate: 3159 kb/s Stream #1.0(und): Video: h264 (High), yuv420p, 1280x720, 2965 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc Stream #1.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s Metadata: creation_time : 2013-06-15 17:25:21 At least one output file must be specified 
1
Können Sie einige Informationen zu den Eingabedateien und zum Build von ffmpeg anzeigen? Die vollständige Konsolenausgabe von "ffmpeg -i input1 -i input2" wird ausreichen. Was sind die genauen Versatzzeiten für jede Datei? LordNeckbeard vor 10 Jahren 1
@LordNeckbeard siehe meine Bearbeitung. Tal Darom vor 10 Jahren 0
Wenn Sie nur darauf hinweisen, verwenden Sie avconv / libav (nicht das echte ffmpeg). Wenn Sie Offset sagen, möchten Sie, dass das Audio nach dem Video 5000 Millisekunden beginnt. Dann widerspricht dies den leeren Frames vor dem Audiostart. Hier ist einer 00: 06: 49.29 und der andere ist 00: 06: 59.09. Wie wollen Sie Audio und Video nebeneinander stellen? Wenn du noch etwas klären kannst? Rajib vor 10 Jahren 0
@Rajib I don't mind what tool to use as long as it will get the job done. I'm currently using the "ffmpeg" that was the default ubuntu 12.04 package. If I'll find a solution that works only with the real ffmpeg I'll use it. Regarding the empty frames, if (because of the offset) the audio should start before the video or end after the video has ended I want there to be blank frames and just audio. Tal Darom vor 10 Jahren 0
Im Allgemeinen sollten Sie eine Filtergrafik mit den Filtern Trim, Atrim und Concat verwenden. Und für einen leeren Bildschirm können Sie die lavfi-Eingabe verwenden. Sie haben Rajibs Frage nicht beantwortet, daher kann ich Ihnen kein Beispielkommando geben. ptQa vor 10 Jahren 0
Ja, ich möchte, dass das Audio nach dem Video beginnt. Auf diese Weise endet es auch, nachdem das Video beendet ist. Ich möchte, dass die leeren Frames hinzugefügt werden, nachdem das Video beendet ist, das Audio jedoch nicht. Tal Darom vor 10 Jahren 0

1 Antwort auf die Frage

3
ptQa

OK. Angenommen, Sie haben 1.mp4- Video mit einer Dauer von 30 Sekunden, 2.mp4- Video mit einer Dauer von 30 Sekunden, und Sie möchten Audio mit einem Versatz von 5 Sekunden 2.mp4in ein 1.mp4Video einfügen . Und Sie benötigen auch schwarze Videoframes, wenn der Videostream 1.mp4endet. Der Befehl sollte also lauten:

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i "color=black:size=1920x1080:duration=5" \ -filter_complex \ "[0:v][2:v]concat[video_out]; \ [0:a]atrim=duration=5[a1]; \ [a1][1:a]concat=v=0:a=1[audio_out]" \ -map [video_out] -map [audio_out] out.mp4 

Dieser Befehl führt Folgendes aus: Wir nehmen 1.mp4und 2.mp4als Eingabe und erzeugen mit lavfi auch 5 Sekunden Video mit schwarzen Frames. Möglicherweise haben Sie eine andere Größe für Ihre Eingabevideos, verwenden Sie also dasselbe wie 1.mp4und 2.mp4für lavfi (ändern Sie 1920x1080die Größe Ihrer Eingaben).

Dann kombinieren wir 1.mp4mit schwarzen Rahmen aus lavfi mit concat, dann schneiden wir zunächst 5 Sekunden von Audio-out aus 1.mp4mit atrimund kombinieren es mit Audio - Stream aus 2.mp4( concatwieder). Dann geben Sie einfach an, dass wir die Ausgabeströme einfügen möchten out.mp4.

Ich hoffe es hilft.

Vielen Dank. Das war nicht genau das, was ich wollte, aber nahe genug, um die erforderlichen Änderungen selbst vorzunehmen. Tal Darom vor 10 Jahren 0