这个问题困扰了我一段时间:我有一堆视频文件,包含 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" - 没有运气