如何将VOB文件转换为avi?


10

我正在尝试将从DVD复制的VOB文件转换为Ubuntu 13.10中的avi。我尝试了dvdrip,但由于帧计数错误或其他原因而失败。我也尝试过acidrip,但是它总是选择我不想使用的音轨。我希望有一个命令行解决方案来创建具有以下功能的avi:

  • 可与mplayer一起使用(即使用步进功能)
  • 带有所需的字幕(或完全没有字幕)
  • 具有正确的音轨
  • 视频和音频同步

我尝试了一些ffmpegavconv命令和管理,以创建一个avi,但视频和音频是完全地不同步。那么,应该使用哪些选项将VOB文件转换为avi文件?

我希望您对建议的选项进行一些解释!

附加信息:

  1. ffmpeg命令为输入文件提供以下输出

    Input #0, mpeg, from 'Videos/Test/VIDEO_TS/VTS_01_1.VOB':
      Duration: 00:04:53.32, start: 0.045500, bitrate: 29284 kb/s
        Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 8:9 DAR 4:3], 7500 kb/s, 27.68 fps, 59.94 tbr, 90k tbn, 59.94 tbc
        Stream #0.1[0x82]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
        Stream #0.2[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
        Stream #0.3[0x81]: Audio: ac3, 0 channels
    [buffer @ 0x15ca6e0] w:720 h:480 pixfmt:yuv420p
    
  2. 以下命令

    ffmpeg -i Videos/Test/VIDEO_TS/VTS_01_1.VOB -ss 589 -t 274 -sameq -acodec copy -ab 320k output.avi
    

    例如导致我的Ubuntu会话崩溃。

  3. 以下命令

    avconv -i Videos/Test/VIDEO_TS/VTS_01_1.VOB -acodec copy -vcodec copy output.avi
    

    例如导致以下错误:

    Application provided invalid, non monotonically increasing dts to muxer in stream 1: 374 >= 374
    av_interleaved_write_frame(): Invalid argument
    
  4. 以下命令

    avconv -i Videos/Test/VIDEO_TS/VTS_01_1.VOB -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k output.avi
    

    例如导致以下错误:

    Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
    
  5. 以下命令

    avconv -i Videos/Test/VIDEO_TS/VTS_01_1.VOB -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a ac3 -b:a 128k output.avi
    

    例如,似乎可以在某些帧上工作。但是很快我遇到了许多形式的错误

    [ac3 @ 0x120d480] frame sync error
    Error while decoding stream #0:1
    frame CRC mismatch
    
  6. 以下命令

    mencoder Videos/Test/VIDEO_TS/VTS_01_1.VOB -oac copy -ovc x264 -x264encopts bitrate=2500 -o output.avi
    

    进行了一些转换,但是(i)虽然我不想使用字幕,但仍在使用字幕(ii)音频错误(音频和视频放置严重错误),并且(iii)似乎比电影的实际播放速度慢(可能需要90分钟的电影需要2个小时)。

  7. 我试图命令给定这里(Xeratul的第三篇文章),但由于错误而停止

    FATAL: Cannot initialize video driver.
    
  8. 我尝试了以下建议,以查看Mencoder页面。该页面建议使用两次通过:

    第一个读取有关电影的信息,第二个使用该信息进行编码。

    但没有说明在第二遍中要提取哪些信息以及如何使用它们。因此,我使用了以下命令:

    mencoder Videos/Test/VIDEO_TS/VTS_01_1.VOB -nosound -ovc x264 \
    -x264encopts direct=auto:pass=2:bitrate=900:frameref=5:bframes=1:\
    me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
    -vf scale=-1:-10,harddup -o video.avi
    

    确实可以转换视频,但带有不需要的字幕。完全不清楚如何避免使用字幕。


ffmpeg自很久以前就已弃用,您应该使用它自己的后继者:avconv
user2485710 2013年

那么如何使用avconv然后将VOB文件转换为avi。该命令avconv -i Videos/Test/VIDEO_TS/VTS_01_1.VOB -acodec copy -vcodec copy test.avi给出了一个错误Application provided invalid, non monotonically increasing dts to muxer in stream 1: 374 >= 374 av_interleaved_write_frame(): Invalid argument...
Alex

联机帮助页中有一个用于avconv的示例,对于解密的VOB文件,请avconv -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi尝试此操作
user2485710 2013年

这给出了一个错误Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
Alex

mencoder yourvob -oac copy -ovc x264 -x264encopts pass=1:preset=veryslow:fast_pskip=0:tune=film:frameref=15:bitrate=3000:threads=auto -nosub -o /dev/null然后尝试mencoder yourvob -oac copy -ovc x264 -x264encopts pass=2:preset=veryslow:fast_pskip=0:tune=film:frameref=15:bitrate=3000:threads=auto -nosub -o video.avi-从Arch文档@ dg99链接中获取部分内容。

Answers:


6

为了摆脱字幕,我相信您可以-nosub在.VOB文件名之后添加该开关。

$ mencoder Videos/Test/VIDEO_TS/VTS_01_1.VOB -nosub -nosound -ovc x264 \
-x264encopts direct=auto:pass=2:bitrate=900:frameref=5:bframes=1:\
me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
-vf scale=-1:-10,harddup -o video.avi

细节

这些咒语通常非常密集,因此可以将其分解

  • 输入文件: Videos/Test/VIDEO_TS/VTS_01_1.VOB
  • 输出文件: -o video.avi
  • 没有字幕: -nosub
  • 不要编码声音: -nosound
  • 使用给定的编解码器进行编码: -ovc x264

其他编解码器列表

$ mencoder -ovc help
MEncoder SVN-r36171-4.8.1 (C) 2000-2013 MPlayer Team

Available codecs:
   copy     - frame copy, without re-encoding. Doesn't work with filters.
   frameno  - special audio-only file for 3-pass encoding, see DOCS.
   raw      - uncompressed video. Use fourcc option to set format explicitly.
   nuv      - nuppel video
   lavc     - libavcodec codecs - best quality!
   libdv    - DV encoding with libdv v0.9.5
   xvid     - XviD encoding
   x264     - H.264 encoding
  • x264编码选项: x264encopts
  • 设置直接运动矢量的模式:direct=auto
  • 的数道次pass=2
  • 目标编码比特率: bitrate=900
  • 前。在B帧和P帧中用作预测变量的帧(定义:3):frameref=5
  • 并发B帧数: bframes=1
  • 全像素运动估计算法: me=umh

    注意:嗯-不规则的多六边形搜索(缓慢)

  • 启用所有宏块类型: partitions=all

  • 率失真最佳量化: trellis=1

    注意: 2-在所有模式决定期间启用(慢,需要subq> = 6)

  • 量化器增量/减量值: qp_step=4

    注意:量化值可在帧之间增加/减少的最大值(默认值:4)

  • 量化器压缩(默认值:0.6): qcomp=0.7

  • B帧中宏块的运动预测: direct_pred=auto
  • 关键帧之间的最大间隔(以帧为单位): keyint=300

  • 以下是视频过滤器的选项: -vf

注意:对于视频滤波器开关,重要的是要harddup用作最后一个滤波器:它将强制MEncoder在输出中写入每一帧(甚至重复的帧)。此外,有必要使用scale=$WIDTH,-10$WIDTH作为-1保持原有的宽度或一个新的,通常较小,宽度:它是必要的,因为H.264编解码器使用方形像素和DVD而使用矩形像素。

  • scale=-1
  • -10
  • harddup

非常感谢您提供有关如何获取视频的详尽示例。您建议的命令似乎可以完美地提取视频。但是,我现在没有音频。如果我在不-noaudio带命令和带命令的情况下使用您的命令-oac copy,则会得到音频,该音频与视频不同步。它要么以不同的速度移动,要么以两种速度移动。有什么建议可以使我的音频正确吗?那多个VOB文件呢?如何将内容打包成单个.avi文件(或其他格式)?
Alex 2014年

@Alex-只是一个想法,但我不认为您可以简单地-oac copy通过2次传递,因为您要对视频进行重新编码,所以您必须对音频进行重新编码。至于“打包”它们,VOB文件应该像这样合并:cat *.vob all.vob。然后all.vob在Mencoder中使用cmd。还有其他方法可以做到这一点。
slm

3

如果打算使用mplayer,则应尝试mencoderhttp://www.mplayerhq.hu)。它的最佳功能之一是您知道的播放选项mplayer在编码时的行为几乎相同。另外,有很多文档和电子邮件主题完全涵盖了您的要求:


提供的链接包含许多不同的示例和数百个选项。这不是我问题的清晰准确的答案。
亚历克斯

1
是的,但是我没有写出获得声誉的答案,而是为了帮助您而写。请考虑阅读一些mencoder页面。有几个海盗团体仅mencoder将其全部用于工作。这就是它的简单性,强大性和可自动化性。
dg99

2

我知道这是旧的帖子,但是在互联网上搜索此问题时,弹出了上述问题,并且其他条目甚至更旧了。

我尝试了不同的工具,但最后我对此命令最满意:

ffmpeg -i *.vob -c:v libx264 -crf 20 -c:a libmp3lame -ac 2 -ab 192k output.avi

这是我在这里找到的那个的略微修改。

我刚刚替换了音频编解码器(libflac系统上不存在,所以我将其替换为libmp3lamesource)和-crf增加质量的值。也可以使用其他格式,例如mp4

在我的测试中(使用一个相当普通的处理器),一个2.6 GB的vob文件(已经从其他三个文件中串联出来)在大约50分钟内转换为质量相当的960 MB avi视频。

20是中等可接受的质量(在我见过的Handbrake帮助文章中)。较大的数字会减小尺寸,但会降低质量。超过20的质量损失是显而易见的。

最好在终端中使用该命令以查看进度,更轻松地杀死它,等等。

我喜欢此命令的地方在于,它在质量,时间和大小之间提供了很好的平衡,并且可以从文件管理器的上下文菜单中轻松使用它。

如何执行取决于文件管理器。该命令可以作为“自定义动作”轻松添加到Thunar和Nautilus。我已将其添加到Dolphin中,并带有以下~/.kde/share/kde4/services/ServiceMenus/convert_vob_to_avi.desktop文件:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin,video/mpeg
MimeType=video/mpeg
Actions=Convert2avi
X-KDE-Submenu=Convert vob (DVD video)
Encoding=UTF8

[Desktop Action Convert2avi]
Name=to avi
Icon=video
Exec=konsole -e ffmpeg -i *.vob -c:v libx264 -crf 20 -c:a libmp3lame -ac 2 -ab 192k output.avi

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.