Ich versuche, mehrere Abschnitte einer Audiodatei zu kürzen und zu verknüpfen. Nach mehreren Suchen schien dies zu funktionieren.
ffmpeg -i dd.3gpp -filter_complex "[0]atrim=start=00:00:00.060:end=00:00:46.580[a];[0]atrim=start=00:0:50.250:end=00:01:50.670[b];[a][b]concat=n=2:v=0:a=1" output.mp3
Es dauerte jedoch nicht lange, bis ich merkte, dass es nur funktionierte, wenn die Intervalle zwischen den zugeschnittenen Abschnitten kurz waren. Die Zeitstempel des zweiten zugeschnittenen Abschnitts wie folgt zu ändern,
ffmpeg -i dd.3gpp -filter_complex "[0]atrim=start=00:00:00.060:end=00:00:46.580[a];[0]atrim=start=00:03:23.250:end=00:06:50.670[b];[a][b]concat=n=2:v=0:a=1" output.mp3
Mir wird ständig dieser Fehler angezeigt.
[out_0_0 @ 000001df0a98d6c0] 100 Puffer in out_0_0 in die Warteschlange gestellt, möglicherweise stimmt etwas nicht. [out_0_0 @ 000001df0a98d6c0] 1000 Puffer in out_0_0 in die Warteschlange gestellt, möglicherweise stimmt etwas nicht.
ffmpeg version git-2019-12-12-f58bda6 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20191125
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 36.101 / 56. 36.101
libavcodec 58. 65.100 / 58. 65.100
libavformat 58. 35.101 / 58. 35.101
libavdevice 58. 9.101 / 58. 9.101
libavfilter 7. 68.100 / 7. 68.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'dd.3gpp':
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2019-12-14T18:42:01.000000Z
com.android.version: 7.0
Duration: 00:08:46.06, start: 0.000000, bitrate: 129 kb/s
Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2019-12-14T18:42:01.000000Z
handler_name : SoundHandle
Stream mapping:
Stream #0:0 (aac) -> atrim
Stream #0:0 (aac) -> atrim
concat -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
Output #0, mp3, to 'output.mp3':
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
com.android.version: 7.0
TSSE : Lavf58.35.101
Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, stereo, fltp (default)
Metadata:
encoder : Lavc58.65.100 libmp3lame
size= 170kB time=00:00:10.84 bitrate= 128.5kbits/s speed=21.7x
size= 256kB time=00:00:19.77 bitrate= 106.0kbits/s speed=19.7x
size= 256kB time=00:00:28.17 bitrate= 74.4kbits/s speed=18.7x
size= 512kB time=00:00:39.69 bitrate= 105.7kbits/s speed=19.8x
[out_0_0 @ 000001df0a98d6c0] 100 buffers queued in out_0_0, something may be wrong.
[out_0_0 @ 000001df0a98d6c0] 1000 buffers queued in out_0_0, something may be wrong.
size= 1280kB time=00:01:33.09 bitrate= 112.6kbits/s speed=22.9x
size= 1521kB time=00:01:37.27 bitrate= 128.1kbits/s speed=22.9x
video:0kB audio:1520kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.023446%
Mache ich etwas falsch? Alle Vorschläge sind willkommen.
Antwort1
Nachdem ich also eine Weile mit den beiden Codes herumgespielt habe,
ffmpeg -i dd.3gpp -filter_complex "[0]atrim=start=00:00:00.060:end=00:00:46.580[a];[0]atrim=start=00:0:50.250:end=00:01:50.670[b];[a][b]concat=n=2:v=0:a=1" output.mp3
ffmpeg -i dd.3gpp -filter_complex "[0]atrim=start=00:00:00.060:end=00:00:46.580[a];[0]atrim=start=00:03:23.250:end=00:06:50.670[b];[a][b]concat=n=2:v=0:a=1" output.mp3
es scheint, dass der Pufferfehler nichts damit zu tun hat, ob die Zeitintervalle zwischen den beiden Trimmvorgängen kurz waren oder nicht.
VielmehrFormatder Zeitstempel schien das Problem gewesen zu sein. Ich habe die Zeitstempel in geändert S+[.m...]
, anstatt[HH:]MM:SS[.m...]
ffmpeg -i dd.3gpp -filter_complex "[0]atrim=start=0.060:end=46.580[a];[0]atrim=start=203.250:end=410.670[b];[a][b]concat=n=2:v=0:a=1" output.mp3
und der Fehler tritt nicht mehr auf. Der erste Code hat einwandfrei funktioniert, da alle Zeitstempel in die Sekundenspalte ( 00:00:ss.m..
) fallen, glaube ich. Ich muss sagen, ich habe nicht die geringste Ahnung, warum die Formatierung in diesem Fall eine Rolle spielt. Vielleicht können die Profis hier das besser erklären.
Antwort2
Die Ursache des Problems liegt darin, dass der Doppelpunkt „:“ zum Trennen von Argumenten durch Filterkomplexe verwendet wird. Sie müssen ihn also maskieren.
Die hervorragende Antwort vonhttps://superuser.com/a/1145796
Bietet die folgenden Zeichen-Escape-Lösungen:
"trim=start='00\:00\:01.23':end='00\:00\:04.56'" "trim=start=00\\\:00\\\:01.23:end=00\\\:00\\\:04.56" trim=start=00\\\\:00\\\\:01.23:end=00\\\\:00\\\\:04.56
Viel Spaß!