连接视频 Audio/Video 不同步:非单调 TDS 输出
Concatenating videos Audio/Video out of sync : Non-monotonous TDS output
我正在尝试使用 ffmpeg 添加两个视频,但输出 video/audio 不同步(并快进)。目标是将 intro.mp4
放在原始文件 clip.flv
之前
我的做法是
- 将
clip.flv
的格式更改为 clip.mp4
ffmpeg -i clip.flv -q 0 -c copy clip.mp4
- 连接
intro.mp4
与 clip.mp4
ffmpeg -f concat -safe 0 -i filesToJoin.txt -c copy combinedvideo.mp4
我在命令#2 的输出日志中看到了这个
[mp4 @ 0x3ebcd60] Non-monotonous DTS in output stream 0:0; previous: 392311, current: 391925; changing to 392312. This may result in incorrect timestamps in the output file.
frame= 1566 fps=0.0 q=-1.0 Lsize= 8711kB time=00:00:48.86 bitrate=1460.2kbits/s speed= 272x
video:7363kB audio:1294kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.619341%
文件元数据
原始源文件clip.flv
元数据
Metadata:
encoder : Lavf57.83.100
Duration: 00:00:40.09, start: 0.010000, bitrate: 1632 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720, 1500 kb/s, 30 fps, 30 tbr, 1k tbn, 60 tbc
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 160 kb/s
中间文件intro.mp4
元数据
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2020-06-02T10:36:51.000000Z
Duration: 00:00:13.21, start: 0.000000, bitrate: 484 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 130 kb/s, 30 fps, 30 tbr, 30k tbn, 60k tbc (default)
Metadata:
creation_time : 2020-06-02T10:36:51.000000Z
handler_name : Alias Data Handler
encoder : AVC Coding
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
Metadata:
creation_time : 2020-06-02T10:36:52.000000Z
handler_name : Alias Data Handler
文件clip.mp4
元数据
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.83.100
Duration: 00:00:40.01, start: 0.000000, bitrate: 1635 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1500 kb/s, 30 fps, 30 tbr, 16k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 160 kb/s (default)
Metadata:
handler_name : SoundHandler
我尝试过的东西
- 如您所见,这两个视频具有相同的帧速率但不同的时间尺度,我尝试在合并之前更改其中一个视频的时间尺度以匹配另一个视频视频但没有运气。对于时间刻度更改,我使用了这个命令
ffmpeg -i clip.mp4 -video_track_timescale 30000 clip_ts30000.mp4
- 我在SO上看到过类似的问题,运气不好
更新:我尝试了一种解决方法,将视频转换为中间格式 .MTS,然后连接视频,然后将输出视频转换为 .mp4 作为最终输出。
# Step 1: Convert to MTS format
ffmpeg -i clip.flv -q 0 clip.MTS
ffmpeg -i intro.mp4 -q 0 intro.MTS
# Step 2: Concat clip.MTS and intro.MTS
ffmpeg -f concat -i filesToSync.txt -c copy out.MTS
# Step 3: Convert the output back to mp4
ffmpeg -i out.MTS -q 0 out.mp4
此解决方法适用于具有怪癖的此特定用例:对最终输出文件应用更多 ffmpeg 操作会出现错误 - 未指定的像素格式。
我正在尝试使用 ffmpeg 添加两个视频,但输出 video/audio 不同步(并快进)。目标是将 intro.mp4
放在原始文件 clip.flv
我的做法是
- 将
clip.flv
的格式更改为clip.mp4
ffmpeg -i clip.flv -q 0 -c copy clip.mp4
- 连接
intro.mp4
与clip.mp4
ffmpeg -f concat -safe 0 -i filesToJoin.txt -c copy combinedvideo.mp4
我在命令#2 的输出日志中看到了这个
[mp4 @ 0x3ebcd60] Non-monotonous DTS in output stream 0:0; previous: 392311, current: 391925; changing to 392312. This may result in incorrect timestamps in the output file.
frame= 1566 fps=0.0 q=-1.0 Lsize= 8711kB time=00:00:48.86 bitrate=1460.2kbits/s speed= 272x
video:7363kB audio:1294kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.619341%
文件元数据
原始源文件clip.flv
元数据
Metadata:
encoder : Lavf57.83.100
Duration: 00:00:40.09, start: 0.010000, bitrate: 1632 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720, 1500 kb/s, 30 fps, 30 tbr, 1k tbn, 60 tbc
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 160 kb/s
中间文件intro.mp4
元数据
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2020-06-02T10:36:51.000000Z
Duration: 00:00:13.21, start: 0.000000, bitrate: 484 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 130 kb/s, 30 fps, 30 tbr, 30k tbn, 60k tbc (default)
Metadata:
creation_time : 2020-06-02T10:36:51.000000Z
handler_name : Alias Data Handler
encoder : AVC Coding
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
Metadata:
creation_time : 2020-06-02T10:36:52.000000Z
handler_name : Alias Data Handler
文件clip.mp4
元数据
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.83.100
Duration: 00:00:40.01, start: 0.000000, bitrate: 1635 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1500 kb/s, 30 fps, 30 tbr, 16k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 160 kb/s (default)
Metadata:
handler_name : SoundHandler
我尝试过的东西
- 如您所见,这两个视频具有相同的帧速率但不同的时间尺度,我尝试在合并之前更改其中一个视频的时间尺度以匹配另一个视频视频但没有运气。对于时间刻度更改,我使用了这个命令
ffmpeg -i clip.mp4 -video_track_timescale 30000 clip_ts30000.mp4
- 我在SO上看到过类似的问题,运气不好
更新:我尝试了一种解决方法,将视频转换为中间格式 .MTS,然后连接视频,然后将输出视频转换为 .mp4 作为最终输出。
# Step 1: Convert to MTS format
ffmpeg -i clip.flv -q 0 clip.MTS
ffmpeg -i intro.mp4 -q 0 intro.MTS
# Step 2: Concat clip.MTS and intro.MTS
ffmpeg -f concat -i filesToSync.txt -c copy out.MTS
# Step 3: Convert the output back to mp4
ffmpeg -i out.MTS -q 0 out.mp4
此解决方法适用于具有怪癖的此特定用例:对最终输出文件应用更多 ffmpeg 操作会出现错误 - 未指定的像素格式。