如何将 23.438 fps 音频添加到 29.970 fps 视频并使用 ffmpeg 实现同步

如何将 23.438 fps 音频添加到 29.970 fps 视频并使用 ffmpeg 实现同步

这个问题困扰了我一段时间:我有一堆视频文件,包含 3 个流:视频、音频和字幕。我还有同样数量的单独文件,每个文件包含 1 个音频流。我想在不对源(副本)进行任何更改的情况下将单独的音频流添加到原始视频中,但输出流 0:0 中始终出现非单调 DTS,并且在通过 nvencc64 运行结果后,音频/视频不同步。

这是视频文件的信息:

General
Unique ID                      : 187872679263028640844869423271293297120 (0x8D56F63D469287F5A9EE1273FE9521E0)
Complete name                  : C:\Transcoded\Призрак в доспехах Синдром одиночки\S01E01 - Public Security Section 9 – SECTION-9.mkv
Format                         : Matroska
Format version                 : Version 2
File size                      : 5.62 GiB
Duration                       : 26 min 13 s
Overall bit rate mode          : Variable
Overall bit rate               : 30.7 Mb/s
Encoded date                   : UTC 2010-02-23 11:53:20
Writing application            : mkvmerge v3.2.0 ('Beginnings') built on Feb 12 2010 16:46:17
Writing library                : libebml v0.7.9 + libmatroska v0.8.1

Video
ID                             : 1
Format                         : AVC
Format/Info                    : Advanced Video Codec
Format profile                 : [email protected]
Format settings, CABAC         : Yes
Format settings, RefFrames     : 2 frames
Muxing mode                    : Container [email protected]
Codec ID                       : V_MPEG4/ISO/AVC
Duration                       : 26 min 13 s
Bit rate mode                  : Variable
Width                          : 1 920 pixels
Height                         : 1 080 pixels
Display aspect ratio           : 16:9
Frame rate mode                : Constant
Frame rate                     : 30.000 FPS
Original frame rate            : 29.970 (30000/1001) FPS
Color space                    : YUV
Chroma subsampling             : 4:2:0
Bit depth                      : 8 bits
Scan type                      : Interlaced
Scan type, store method        : Separated fields
Scan order                     : Top Field First
Default                        : No
Forced                         : No

Audio
ID                             : 2
Format                         : FLAC
Format/Info                    : Free Lossless Audio Codec
Codec ID                       : A_FLAC
Duration                       : 26 min 13 s
Bit rate mode                  : Variable
Channel(s)                     : 6 channels
Channel positions              : Front: L C R, Side: L R, LFE
Sampling rate                  : 48.0 kHz
Bit depth                      : 16 bits
Title                          : FLAC, 6 channels, 48.0 KHz, 16 bits, 1 311 Kbps
Writing library                : libFLAC 1.2.1 (UTC 2007-09-17)
Language                       : Japanese
Default                        : Yes
Forced                         : No

Text
ID                             : 3
Format                         : UTF-8
Codec ID                       : S_TEXT/UTF8
Codec ID/Info                  : UTF-8 Plain Text
Language                       : Russian
Default                        : Yes
Forced                         : Yes

这是我想要添加的音频的信息:

General
Unique ID                      : 228475517488211011527204318355348279908 (0xABE2C8B8BED45F1ABD41E1A38A5C5264)
Complete name                  : C:\Transcoded\Призрак в доспехах Синдром одиночки\RUS Sound [MC Entertainment]\Ghost in the Shell 01.mka
Format                         : Matroska
Format version                 : Version 2
File size                      : 51.1 MiB
Duration                       : 26 min 13 s
Overall bit rate               : 273 kb/s
Encoded date                   : UTC 2009-12-07 13:49:00
Writing application            : mkvmerge v2.9.8 ('C'est le bon') built on Aug 13 2009 12:49:06
Writing library                : libebml v0.7.7 + libmatroska v0.8.1

Audio
ID                             : 1
Format                         : AAC
Format/Info                    : Advanced Audio Codec
Format profile                 : HE-AACv2 / HE-AAC / LC
Codec ID                       : A_AAC
Duration                       : 26 min 13 s
Channel(s)                     : 2 channels / 6 channels / 6 channels
Channel positions              : Front: L R / Front: L C R, Side: L R, LFE / Front: L C R, Side: L R, LFE
Sampling rate                  : 48.0 kHz / 48.0 kHz / 24.0 kHz
Frame rate                     : 23.438 FPS (1024 SPF)
Compression mode               : Lossy
Default                        : Yes
Forced                         : No

问题是源视频文件的帧速率为 29.970 fps,而我想要添加的音频的帧速率为 23.438,因此没有同步。

我的脚本在 Powershell 中:

$Names = Get-ChildItem -Path 'C:\Transcoded\Призрак в доспехах Синдром одиночки' -Name "*.mkv"
$Sources = Get-ChildItem -Path 'C:\Transcoded\Призрак в доспехах Синдром одиночки\*.mkv'
$RusDub = Get-ChildItem -Path 'C:\Transcoded\Призрак в доспехах Синдром одиночки\RUS Sound `[MC Entertainment`]\*.mka'

foreach ($e in 0..26) {ffmpeg -hwaccel cuda -analyzeduration 100000000 -probesize 100000000 -i $Sources[$e] -i $RusDub[$e] -map 0:v -map 0:a -map 0:s -map 1:a -metadata:s:a:1 language=rus -metadata:s:a:1 title="RUS Sound" -c:v copy -c:a copy -c:s copy $Names[$e]}

该文件夹包含 26 个视频文件,子文件夹包含 26 个音频文件。$Names - 获取源文件的名称并将其传递到末尾。$Sources - 包含 3 个流的源视频文件。$RusDub - 我想要添加的音频流。

该脚本从 $Names 中获取第一个名称,从 $Sources 中获取第一个 MKV,从 $RusDub 中获取第一个音频文件

我需要在脚本中添加什么才能使 ffmpeg 同步视频和附加音频?

我尝试了 -async 1 和 -vsync 1 - 没有运气 我尝试了 -filter:a:1 "asetpts=N/SR/TB" - 没有运气

相关内容