我尝试从 mp4 文件中提取视频轨道。以下是视频轨道的元数据:
Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(pc, progressive), 3832x1600 [SAR 1:1 DAR 479:200], 29891 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Side data:
DOVI configuration record: version: 1.0, profile: 5, level: 6, rpu flag: 1, el flag: 0, bl flag: 1, compatibility id: 0
我使用以下命令来提取视频轨道:
ffmpeg -i myfile.mp4 -c copy onlyvideo.h265
视频的输出文件元数据变为如下形式:
Stream #0:0: Video: hevc (Main 10), yuv420p10le(pc), 3832x1600 [SAR 1:1 DAR 479:200], 25 fps, 25 tbr, 1200k tbn
帧速率增加了,导致视频比实际视频更短。
这只发生在我将视频提取到 .h265 和 .hevc 扩展名时。当我使用 .mp4 或 .mov 时没问题,但我需要 .h265 或 .hevc 来使用 Dolby Vision MP4 多路复用器工具进行重新多路复用。我也尝试使用 Dolby 的解复用器工具,但它有同样的问题(我认为 Dolby 也使用 ffmpeg 来提取视频)
我已经尝试修复帧速率并设置视频时间尺度,但这些方法都不起作用。有人能帮我吗?
对于 FFProbe 输出
myfile.mp4 时长
ffprobe -select_streams v:0 -of default=noprint_wrappers=1 -show_entries packet=pts_time,duration -read_intervals "%+#10" myfile.mp4
pts_time=0.000000
duration=1001
pts_time=0.166833
duration=1001
pts_time=0.083417
duration=1001
pts_time=0.041708
duration=1001
pts_time=0.125125
duration=1001
pts_time=0.333667
duration=1001
pts_time=0.250250
duration=1001
pts_time=0.208542
duration=1001
pts_time=0.291958
duration=1001
pts_time=0.458792
duration=1001
myfile.mp4 时间基
ffprobe -v 0 -of compact=p=0:nk=1 -show_entries stream=time_base -select_streams v:0 myfile.mp4
1/24000|
onlyvideo.h265 时长
ffprobe -select_streams v:0 -of default=noprint_wrappers=1 -show_entries packet=pts_time,duration -read_intervals "%+#10" onlyvideo.h265
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
pts_time=N/A
duration=48000
并且 onlyvideo.h265 时间基
ffprobe -v 0 -of compact=p=0:nk=1 -show_entries stream=time_base -select_streams v:0 onlyvideo.h265
1/1200000