You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并旧VOB文件为MP4时遭遇FFmpeg多类错误求助

VOB合并为MP4的错误解决指南

问题背景

尝试合并4个旧VOB文件为MP4,已解决pts has no value error问题,使用命令:

.\ffmpeg.exe -fflags +genpts -f concat -i .\files.txt -c copy output.mp4

files.txt内容:

file 'VTS_01_1.VOB'
file 'VTS_01_2.VOB'
file 'VTS_01_3.VOB'
file 'VTS_01_4.VOB'

执行后出现无效帧尺寸、DTS时间戳乱序、输入数据无效等错误,最终转换失败,完整错误输出(翻译后):

ffmpeg版本 2023-03-05-git-912ac82a3c-essentials_build-www.gyan.dev 版权所有 (c) 2000-2023 FFmpeg开发者
  基于gcc 12.2.0编译(Rev10,由MSYS2项目构建)
  配置参数:--enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      58.  3.100 / 58.  3.100
  libavcodec     60.  6.100 / 60.  6.100
  libavformat    60.  4.100 / 60.  4.100
  libavdevice    60.  2.100 / 60.  2.100
  libavfilter     9.  4.100 /  9.  4.100
  libswscale      7.  2.100 /  7.  2.100
  libswresample   4. 11.100 /  4. 11.100
  libpostproc    57.  2.100 / 57.  2.100
输入 #0, concat, 来自 '.\files.txt':
  时长: N/A, 起始时间: 0.000000, 码率: N/A
  流 #0:0: 数据: dvd_nav_packet
  流 #0:1: 视频: mpeg2video (Main), yuv420p(tv, top first), 720x480 [采样宽高比 8:9 显示宽高比 4:3], 29.97 帧/秒, 29.97 tbr, 90k tbn
    附加数据:
      cpb: 码率 最大/最小/平均: 7000000/0/0 缓冲区大小: 1835008 vbv_delay: N/A
  流 #0:2: 音频: ac3, 48000 Hz, 立体声, fltp, 448 kb/s
文件 'output.mp4' 已存在。是否覆盖?[y/N] y
[mp4 @ 00000211b44d0900] 轨道1:未设置编解码器帧大小
输出 #0, mp4, 输出到 'output.mp4':
  元数据:
    编码器         : Lavf60.4.100
  流 #0:0: 视频: mpeg2video (Main) (mp4v / 0x7634706D), yuv420p(tv, top first), 720x480 [采样宽高比 8:9 显示宽高比 4:3], q=2-31, 29.97 帧/秒, 29.97 tbr, 90k tbn
    附加数据:
      cpb: 码率 最大/最小/平均: 7000000/0/0 缓冲区大小: 1835008 vbv_delay: N/A
  流 #0:1: 音频: ac3 (ac-3 / 0x332D6361), 48000 Hz, 立体声, fltp, 448 kb/s
流映射:
  流 #0:1 -> #0:0 (复制)
  流 #0:2 -> #0:1 (复制)
按 [q] 停止, [?] 获取帮助
[mpeg2video @ 00000211b44a5f00] 无效帧尺寸 0x0. 码率=5521.6kbits/s 速度= 643x
    最后一条消息重复3次
[concat @ 00000211b449b500] DTS 137507370 < 137525388 顺序错误
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525388, 当前: 137507370;已修改为137525389。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525389, 当前: 137510250;已修改为137525390。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525390, 当前: 137510250;已修改为137525391。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525391, 当前: 137513130;已修改为137525392。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525392, 当前: 137516010;已修改为137525393。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525393, 当前: 137518890;已修改为137525394。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525394, 当前: 137521770;已修改为137525395。这可能导致输出文件时间戳不正确。
[mp4 @ 00000211b44d0900] 输出流0:0中DTS不单调;之前: 137525395, 当前: 137524650;已修改为137525396。这可能导致输出文件时间戳不正确。
av_interleaved_write_frame(): 处理输入时发现无效数据
[out#0/mp4 @ 00000211b44f96c0] 封装数据包时出错
[out#0/mp4 @ 00000211b44f96c0] 写入文件尾时出错:处理输入时发现无效数据
frame=45815 fps=19808 q=-1.0 大小= 1027328kB 时间=00:25:29.51 码率=5502.3kbits/s 速度= 661x
video:943791kB audio:83556kB subtitle:0kB 其他流:0kB 全局头:0kB 封装开销: unknown
转换失败!

解决方法

方法1:修复源文件后再合并(推荐)

VOB作为DVD光盘文件,可能存在损坏帧或导航数据干扰,先单独修复每个文件再合并:

  1. 对每个VOB文件执行转码修复,生成干净的MP4片段:
# 处理第一个文件
.\ffmpeg.exe -i VTS_01_1.VOB -c:v libx264 -c:a aac -movflags +faststart fixed_01.mp4
# 处理第二个文件
.\ffmpeg.exe -i VTS_01_2.VOB -c:v libx264 -c:a aac -movflags +faststart fixed_02.mp4
# 处理第三个文件
.\ffmpeg.exe -i VTS_01_3.VOB -c:v libx264 -c:a aac -movflags +faststart fixed_03.mp4
# 处理第四个文件
.\ffmpeg.exe -i VTS_01_4.VOB -c:v libx264 -c:a aac -movflags +faststart fixed_04.mp4
  1. 修改files.txt指向修复后的文件:
file 'fixed_01.mp4'
file 'fixed_02.mp4'
file 'fixed_03.mp4'
file 'fixed_04.mp4'
  1. 执行合并命令:
.\ffmpeg.exe -f concat -i .\files.txt -c copy final_output.mp4

方法2:调整原命令,过滤干扰流并强制同步

如果不想重新编码,尝试忽略DVD导航流,同时添加时间戳修复参数:

.\ffmpeg.exe -fflags +genpts+igndts -f concat -safe 0 -i .\files.txt -map 0:1 -map 0:2 -c copy output.mp4
  • -map 0:1 -map 0:2:仅选择视频和音频流,剔除导航数据包(流#0:0)
  • -fflags +igndts:忽略乱序的DTS时间戳,强制生成正确时序
  • -safe 0:允许concat读取本地任意路径的文件

方法3:强制音频同步修复时间戳

若DTS乱序问题仍存在,添加-async 1参数强制音频与视频同步:

.\ffmpeg.exe -fflags +genpts -f concat -safe 0 -i .\files.txt -map 0:1 -map 0:2 -c copy -async 1 output.mp4

内容的提问来源于stack exchange,提问作者Victor Hartman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:57:00