源mp3
ffprobe -show_frames -select_streams a -print_format csv -show_entries
frame=index,pkt_dts_time ~/demo_files/000.orig.5352357791787324393.mp3
frame,0.000000
frame,0.026122
frame,0.052245
frame,0.078367
我使用命令创建的每个部分,-ss position和-t time我从之前的ffprobe输出中得到并计算
/home/xxx/bin/ffmpeg -analyzeduration 50000000 -probesize 50000000
-ss 0.000000 -i /home/xxx/demo_files/000.orig.5352357791787324393.mp3
-s 0 -t 0.926276 -flags +global_header -c:a libfdk_aac -strict -2
-b:a 64k -ac 2 -ar 44100 -vn -f mpegts -y /tmp/p0.ts
/home/xxx/bin/ffmpeg -analyzeduration 50000000 -probesize 50000000
-ss 1.018776 -i /home/xxx/demo_files/000.orig.5352357791787324393.mp
-s 0 -t 0.900153 -flags +global_header -c:a libfdk_aac -strict -2
-b:a 64k -ac 2 -ar 44100 -vn -f mpegts -y /tmp/p1.ts
它的产生
[mp3 @ 0x39ca980] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from '/home/xxx/demo_files/000.orig.5352357791787324393.mp3':
Duration: 00:05:17.20, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
[mpegts @ 0x39ccea0] Using AVStream.codec to pass codec
parameters to muxers is deprecated, use AVStream.codecpar instead.
[mpegts @ 0x39ccea0] frame size not set
Output #0, mpegts, to '/tmp/p0.ts':
Metadata:
encoder : Lavf57.38.100
Stream #0:0: Audio: aac (libfdk_aac), 44100 Hz, stereo, s16, 64 kb/s
Metadata:
encoder : Lavc57.46.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (mp3 (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
size= 10kB time=00:00:00.92 bitrate= 92.3kbits/s speed=39.8x
video:0kB audio:8kB subtitle:0kB other streams:0kB global
headers:0kB muxing overhead: 24.619143%
Duration: 00:00:00.63, start: 1.400000, bitrate: 127 kb/s
零件信息
ffmpeg -hide_banner -i /tmp/p0.ts 2>&1 |grep -P 'Duration|Stream'
Duration: 00:00:00.95, start: 1.400000, bitrate: 90 kb/s
Stream #0:0[0x100]: Audio: aac (LC) ([15][0][0][0] / 0x000F),
44100 Hz, stereo, fltp, 68 kb/s
然后我和
一起加入所有部分 /home/xxx/bin/ffmpeg -i /tmp/p0.ts -i /tmp/p1.ts -i /tmp/p2.ts
-i /tmp/p3.ts -i /tmp/p4.ts -i /tmp/p5.ts -filter_complex
"[0:a]asetpts=PTS-STARTPTS[a0];[1:a]asetpts=PTS-STARTPTS[a1];
[2:a]asetpts=PTS-STARTPTS[a2];[3:a]asetpts=PTS-STARTPTS[a3];
[4:a]asetpts=PTS-STARTPTS[a4];[5:a]asetpts=PTS-STARTPTS[a5];
[a0][a1][a2][a3][a4][a5] concat=n=6:v=0:a=1 [a]"
-map [a] -strict experimental -fflags +genpts -flags +global_header
-c libfdk_aac -bsf:a aac_adtstoasc -y /tmp/res.m4a
所以,你可以看到加入有延迟和波形后来开始。为什么?也许它认为所有编码部分的起始时间都是1.400000,??如何在编码时将开始时间设置为0?
此外,我尝试在与filter_complex连接时剪切空白区域,但结果stil不好并且包含瑕疵,因为修剪位置在每个部分看起来都不同。
/home/xxx/bin/ffmpeg -i /tmp/p0.ts -i /tmp/p1.ts -i /tmp/p2.ts
-i /tmp/p3.ts -i /tmp/p4.ts -i /tmp/p5.ts -filter_complex
"[0:a]atrim=0.020000,asetpts=PTS-STARTPTS[a0];
[1:a]atrim=0.020000,asetpts=PTS-STARTPTS[a1];
[2:a]atrim=0.020000,asetpts=PTS-STARTPTS[a2];
[3:a]atrim=0.020000,asetpts=PTS-STARTPTS[a3];
[4:a]atrim=0.020000,asetpts=PTS-STARTPTS[a4];
[5:a]atrim=0.020000,asetpts=PTS-STARTPTS[a5];
[a0][a1][a2][a3][a4][a5] concat=n=6:v=0:a=1 [a]"
-map [a] -strict experimental -fflags +genpts
-flags +global_header -c libfdk_aac -bsf:a aac_adtstoasc
-y /tmp/res.m4a
Whyyyy以及如何解决它?