FFMPEG:

FFMPEG:

Ich suche auch nach einer Linux-Lösung (ineine gesonderte Frage)

Ich habe zwei aufgezeichnete Videodateien mit der Erweiterung .ts. Ich muss einen Teil der ersten entfernen, die zweite teilen und dann die erste Datei mit dem ersten (geteilten) Teil der zweiten Datei zusammenführen.

Sie haben beide die gleichen Eigenschaften:

Format                                   : MPEG-TS
File size                                : 3.16 GiB
Duration                                 : 1h 39mn
Overall bit rate mode                    : Variable
Overall bit rate                         : 4 527 Kbps

Video
ID                                       : 720 (0x2D0)
Menu ID                                  : 6181 (0x1825)
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : 27
Duration                                 : 1h 39mn
Width                                    : 1 440 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 25.000 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : MBAFF

Sie enthalten auch mehrere Audiospuren und Untertitel.

Ich möchte sie verarbeiten, ohne die Dateien zu transkodieren, zumindest den Anfang usw. entfernen können.

FFMPEG:

ffmpeg -i source.mtsgibt:

Input #0, mpegts, from 'source1.mts':
      Duration: 01:40:00.76, start: 2995.511878, bitrate: 4526 kb/s
      Program 6181
        Stream #0:0[0x46](fra,fra): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
        Stream #0:1[0x2d0]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
        Stream #0:2[0x2da](fra): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 73 kb/s
        Stream #0:3[0x2db](qaa): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 67 kb/s
        Stream #0:4[0x2dc](deu): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 49 kb/s
        Stream #0:5[0x2dd](qad): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 57 kb/s

Ich denke, es ist sehr gut machbar mit ffmpeg, das auch plattformübergreifend ist, als ein Befehl, den ich gefunden habeHier um einen Teil einer Datei zu entfernen.

ffmpeg -i InputFile -vcodec copy -acodec copy -ss 00:12:34.567 -t 00:34:56.789 OutputFile

funktioniert, abgesehen davon, dass der Eingang vier Audiospuren hat und auf diese Weise nur das erste ( Stream #0:2[0x2da](fra)) Audio übernommen wird. Was ich will, ist: entweder das gesamte Audio oder das dritte ( Stream #0:3[0x2db](qaa)). Wie kann ich das einstellen?

ffmpegsollte daher darauf hinwirken:

1. Schneiden Sie den Anfang der ersten Datei ab (entfernen Sie die ersten 2 Minuten aus der 1h40-min-Datei)

2. Teilen Sie eine zweite (1 Stunde) Datei in zwei Teile (nach 3,05 Minuten)

3. Fügen Sie den 3,05-Minuten-Teil, der durch das Teilen der zweiten Datei entstanden ist, an das Ende der ersten Datei an.


Was ich versucht habe:

Openshot: kann ohne Transkodierung nicht verarbeitet werden.

Avidemux (Linux): Beim Versuch zu speichern kommt die Meldung„Dies ist nicht MPEG-kompatibel – Sie können den Kopiercodec nicht verwenden.“

Avidemux unter Windows: Audio ist nicht synchron.

Antwort1

Wie kann ich Dateien teilen und zusammenfügen und ffmpegdabei alle Audiospuren beibehalten?

Wie Sie festgestellt haben, wählt eine Bitstream-Kopie nureins(Audio-)Spur, gemäß derDokumentation zur Stream-Spezifikation:

Standardmäßig ffmpegwird nur ein Stream jedes Typs (Video, Audio, Untertitel) in die Eingabedateien aufgenommen und zu jeder Ausgabedatei hinzugefügt. Es wählt den „besten“ Stream anhand der folgenden Kriterien aus: Bei Video ist es der Stream mit der höchsten Auflösung, bei Audio der Stream mit den meisten Kanälen, bei Untertiteln der erste Untertitel-Stream. Falls mehrere Streams desselben Typs die gleiche Rate aufweisen, wird der Stream mit dem niedrigsten Index ausgewählt.

Zu wählenalleAudiospuren:

ffmpeg -i InputFile.ts-c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a FirstFile.ts

Zur Auswahl derdritteAudiospur:

ffmpeg -i InputFile.ts -c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a:2 FirstFile.ts

Weitere Informationen und Beispiele zur Stream-Auswahl finden Sie imerweiterte OptionenAbschnitt der ffmpegDokumentation.

Der Kompaktheit des Ausdrucks halber würde ich -vcodec copy -acodec copyIhren ursprünglichen Befehl auch wie oben kombinieren .-c copy

Teilt:

Kombinieren Sie diese also mit dem, was Sie in den beiden Dateien im Hinblick auf die Aufteilung für ein späteres Wiederzusammenführen erreichen möchten:

ffmpeg -i InputOne.ts -ss 00:02:00.0 -c copy -map 0:v -map 0:a OutputOne.ts
ffmpeg -i InputTwo.ts -c copy -t 00:03:05.0 -map 0:v -map 0:a OutputTwo.ts

werde dir geben:

  • OutputOne.ts, das ist allesnachdie ersten zwei Minuten der ersten Eingabedatei
  • OutputTwo.ts, das ist dieErste3 Minuten und 5 Sekunden der zweiten Eingabedatei

Verbinden:

ffmpegunterstützt die Verkettung von Dateien ohne Neukodierung,ausführlich beschrieben in der Verkettungsdokumentation.

Erstellen Sie Ihre Liste der zusammenzufügenden Dateien (z. B. join.txt):

file '/path/to/files/OutputOne.ts'
file '/path/to/files/OutputTwo.ts'

Dann ffmpegkann Ihr Befehl Folgendes verwenden concat demuxer:

 ffmpeg -f concat -i join.txt -c copy FinalOutput.ts

mpegDa Sie mit Transportströmen ( ) arbeiten .ts,sollenin der Lage sein, die concat verwendenProtokollsowie:

ffmpeg -i "concat:OutputOne.ts|OutputTwo.ts" -c copy -bsf:a aac_adtstoasc output.mp4

Gemäß dem Beispiel auf der oben verlinkten Concat-Seite. Damit überlasse ich es Ihnen, zu experimentieren.

Antwort2

Eine vereinfachte Antwort basierend auf der Hauptantwort:

So behalten Sie Daten nach einem Startpunkt (bis zum Ende) bei:

ffmpeg -i INPUT -c copy -ss START_TIME -map 0 OUTPUT

So behalten Sie Daten zwischen zwei Zeitpunkten bei:

ffmpeg -i INPUT -c copy -ss START_TIME -to END_TIME -map 0 OUTPUT

So behalten Sie Daten für eine bestimmte Dauer nach einem bestimmten Zeitpunkt:

ffmpeg -i INPUT -c copy -ss START_TIME -t DURATION_TIME -map 0 OUTPUT

So behalten Sie Daten für eine bestimmte Dauer nach dem Beginn:

ffmpeg -i INPUT -c copy -t DURATION_TIME -map 0 OUTPUT

So halten Sie Daten vom Beginn bis zu einem bestimmten Zeitpunkt zurück:

ffmpeg -i INPUT -c copy -to TIME_POINT -map 0 OUTPUT

ZEIT kann eine Zahl in Sekunden oder im Format hh:mm:ss[.xxx] sein.


Um Dateien zusammenzufügen, erstellen Sie eine Datei join.txtmit dem Namen

file 'path-to-INPUT1'
file 'path-to-INPUT2'
file...etc

Dann

 ffmpeg -f concat -i join.txt OUTPUT

Oder:

So verbinden Sie MPEG-Dateien (einschließlich Transportdateien)

 ffmpeg -i "concat:INPUT-1|INPUT-2" -c copy -bsf:a aac_adtstoasc OUTPUT

Als GUI-Lösung habe ich Avidemux ausprobiert, allerdings mit schlechten Ergebnissen. Bei der Suche nach einer Linux-Lösung habe ich diesen Kommentar gefundenHierzeigt aufAvidemux nächtlich:

"Sie können Avidemux ausprobieren, aber nicht die stabile Version. Sie sollten die Win32-Version (ja, für Windows) mit "Wine" ausprobieren. Sie unterstützt H.264 und Sie müssen den Doppelpfeil verwenden, um die Keyframes herauszufinden, da Sie [nicht] überall schneiden können (aufgrund der "Long Gop"-Sache...). Aber wie bei jeder Software dieser Art können Sie NUR SCHNITTE machen, sonst wird es gerendert (bei Übergängen, Effekten usw.). http://avidemux.org/nightly/win32/"

Ich habe das unter Linux/Wine getestet, aber es sollte auch unter Windows funktionieren.

Bildbeschreibung hier eingeben

Um Dateien zusammenzuführen, verwenden SieDatei öffnenum die erste Datei hinzuzufügen, und dannDatei-Anhängenfür den Rest.

Speichern:Datei - Speichern.

verwandte Informationen