Verwenden Sie ffmpeg, um bestimmte Kapitel aus einer MP4 zu entfernen

Ich würde gerne wissen, wie man mit ffmpeg bestimmte Kapitel aus einer Videodatei entfernt. Unten ist ein Beispiel. Ich möchte alle mit "Werbung" gekennzeichneten Kapitel entfernen. Ich habe überall gesucht und ich kann nicht scheinen, einen Weg zu finden. Es macht mir nicht einmal etwas aus, neu zu codieren, aber ich möchte es einfach nicht von Hand machen.

 Duration: 00:52:24.45, start: 0.042989, bitrate: 3290 kb/s
    Chapter #0:0: start 0.000000, end 19.142000
    Metadata:
      title           : Video
    Chapter #0:1: start 19.142000, end 34.017000
    Metadata:
      title           : Advertisement
    Chapter #0:2: start 34.017000, end 810.551000
    Metadata:
      title           : Video
    Chapter #0:3: start 810.551000, end 915.283000
    Metadata:
      title           : Advertisement
    Chapter #0:4: start 915.283000, end 1206.940000
    Metadata:
      title           : Video
    Chapter #0:5: start 1206.940000, end 1291.963000
    Metadata:
      title           : Advertisement
    Chapter #0:6: start 1291.963000, end 1614.738000
    Metadata:
      title           : Video
    Chapter #0:7: start 1614.738000, end 1694.709000
    Metadata:
      title           : Advertisement
    Chapter #0:8: start 1694.709000, end 2068.249000
    Metadata:
      title           : Video
    Chapter #0:9: start 2068.249000, end 2173.261000
    Metadata:
      title           : Advertisement
    Chapter #0:10: start 2173.261000, end 2472.440000
    Metadata:
      title           : Video
    Chapter #0:11: start 2472.440000, end 2582.395000
    Metadata:
      title           : Advertisement
    Chapter #0:12: start 2582.395000, end 3143.276000
    Metadata:
      title           : Video
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720, 3088 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 193 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Stream #0:2(eng): Data: bin_data (text / 0x74786574)
    Metadata:
      handler_name    : SubtitleHandler
    Stream #0:3: Video: png, rgb24(pc), 640x360 [SAR 2834:2834 DAR 16:9], 90k tbr, 90k tbn, 90k tbc

Antworten (1)

Dies kann mit dem concat-Demuxer erfolgen. Wenn die Videokapitel mit einem Keyframe beginnen, kann die Kodierung übersprungen werden.

#1 Kopieren/Einfügen Sie Folgendes in eine Textdatei oder leiten Sie es an den Befehl im nächsten Schritt weiter

    Chapter #0:0: start 0.000000, end 19.142000
    Metadata:
      title           : Video
    Chapter #0:1: start 19.142000, end 34.017000
    Metadata:
      title           : Advertisement
    Chapter #0:2: start 34.017000, end 810.551000
    Metadata:
      title           : Video
    Chapter #0:3: start 810.551000, end 915.283000
    Metadata:
      title           : Advertisement
    Chapter #0:4: start 915.283000, end 1206.940000
    Metadata:
      title           : Video
    Chapter #0:5: start 1206.940000, end 1291.963000
    Metadata:
      title           : Advertisement
    Chapter #0:6: start 1291.963000, end 1614.738000
    Metadata:
      title           : Video
    Chapter #0:7: start 1614.738000, end 1694.709000
    Metadata:
      title           : Advertisement
    Chapter #0:8: start 1694.709000, end 2068.249000
    Metadata:
      title           : Video
    Chapter #0:9: start 2068.249000, end 2173.261000
    Metadata:
      title           : Advertisement
    Chapter #0:10: start 2173.261000, end 2472.440000
    Metadata:
      title           : Video
    Chapter #0:11: start 2472.440000, end 2582.395000
    Metadata:
      title           : Advertisement
    Chapter #0:12: start 2582.395000, end 3143.276000
    Metadata:
      title           : Video

#2 Bereiten Sie die Textdatei für concat vor

Es sollte so enden

file 'myfile.mp4'
inpoint 0.000000
outpoint 19.142000
file 'myfile.mp4'
inpoint 34.017000
outpoint 810.551000
file 'myfile.mp4'
inpoint 915.283000
outpoint 1206.940000
file 'myfile.mp4'
inpoint 1291.963000
outpoint 1614.738000
file 'myfile.mp4'
inpoint 1694.709000
outpoint 2068.249000
file 'myfile.mp4'
inpoint 2173.261000
outpoint 2472.440000
file 'myfile.mp4'
inpoint 2582.395000
outpoint 3143.276000

Jeder Satz von drei Zeilen entspricht einem enthaltenen Videokapitel. Der Dateieintrag befindet sich in der ersten Zeile, die Start- und Endzeiten der Kapitel in der 2. und 3. Zeile.

Ich habe den folgenden Befehl verwendet, um es zu generieren

grep -B2 'Video' chp.txt | awk '(NR-1) % 4 == 0' | sed -E 's/\ *Chapter #[0-9]:[0-9]+:/file \'myfile.mp4\'\n/g;s/\ *start/inpoint/g;s/,\ end/\noutpoint/g' > list.txt

Wenn Sie diese Dienstprogramme nicht haben (wenn Sie Windows verwenden), erhalten Sie sie von https://github.com/bmatzelle/gow/releases

#3 Verknüpfen Sie die Dateien

ffmpeg -f concat -i list.txt -c copy stripped.mp4

Wenn die Videokapitel nicht mit einem Keyframe beginnen, müssen Sie neu codieren.