适合通过 UPnP 提供的 DVD 翻录服务

适合通过 UPnP 提供的 DVD 翻录服务

我是旧 Mac Mini G4 上的 (版本 1.0.24) 的忠实用户minidlna。它在我的环境中运行良好。由于 minidlna 不允许转码,我想翻录一套 DVD(主要是动画片)以供观看。但是,我无法理解如何正确编码它们,以便通过 UPnP 提供它们。

  • 我的 DSL 提供商有一个内置客户端(Freebox ADSL,固件 1.5.20),它根本拒绝提供ISO Media, MP4 Base Media v1 [IS0 14496-12:2003](*.mp4) 文件。
  • 我有一台 Windows 8 平板电脑,它不支持EBML file / Matroska(*.mkv) 容器。

因此我需要使用AVI容器来进行设置。现在复杂的部分是我需要使用哪些编码选项来将 DVD 翻录到 AVI 容器中

视频:我测试过,mpeg4 和 x264 视频流都可以正常工作。据我所知,x264 不是一个选项,因为我使用 AVI 容器。那么,有什么选项可以获得高质量的 mpeg4 视频流呢?经过反复试验,我发现使用 mkv 容器和以下流的视频有点不连贯:

Stream #0.0(eng): Video: h264 (High), yuv420p, 1280x568 [PAR 1:1 DAR 160:71], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)

声音的:我遇到了包含以下内容的文件问题:

Stream #0.1(fre): Audio: dca (DTS), 48000 Hz, 5.1, s16, 1536 kb/s (default)

这些音频确实有效:

Stream #0.1(fre): Audio: aac, 48000 Hz, stereo, s16 (default)
Stream #0.1: Audio: mp3, 44100 Hz, mono, s16, 128 kb/s (default)

我应该选择什么音频选项?

加分:完整的avconvffmpeg)命令行是什么,用于直接从 DVD(*.vob)转换为此类 AVI?我想避免使用mencoder,因为它最近被已删除来自 Debian。

编辑:这完全是题外话,但这可能会澄清下面的评论。经过多次试验,我诊断出 MPEG-4 容器问题确实出在客户端。我不知道为什么客户端拒绝显示它。我能够获取 *.mp4 容器并使用以下方式对其进行转码:mkvmerge -o out.mkv in.mp4,现在文件在客户端上正确显示(并且可以播放!)。相同的 *.mp4 确实可以在默认的 Windows 8 Media Player 中很好地显示,因此这绝对不是服务器问题。

EDIT2:使用的唯一技巧minidlnaFreeBox client可以看到这里

参考: *创建可用于 HTTP 流式传输的 MP4 视频

答案1

经过进一步的研究,我发现了这一点上一篇。因此,要生成 *.mp4 文件,技巧是使用:

$ ffmpeg -i input.avi -c:v libx264 -crf 22 -c:a libfaac -movflags faststart output.mp4

但是-movflags faststart只有在生成 mp4 时才有意义。从man ffmpegdebian/jessie 系统来看,我能够找到建议的 DVD 翻录一行代码:

$ ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi

生成的文件在我的设置中播放流畅,我可以轻松快进和快退,所以我猜这AVI是正确的索引(或者至少与协议中需要的内容兼容UPnP)。

根据一些信息可在互联网上获取,看来 Freebox V5 仅支持有限的格式和编解码器:

  • 内容 编解码器 视频编解码器 音频编解码器 可接受的最大分辨率
  • ts (mpeg ts) mpeg4 ac52 1280×720
  • ts (mpeg ts) h264 ac52 1280×720
  • avi xvid mp3 1280×720 和 1440×1080

但是,它部分支持 matroska (*.mkv),在这种情况下,从这里。所以最后我使用 HandBrake (GUI) 将 DVD 转换为 mp4 (高配置 +网络优化),然后转码为mkv:

$ mkvmerge -q -o out.mkv --compression 0:none --compression 1:none in.mp4

另外,还需要确保使用-map_chapters -1avconv 选项来确保生成的 mkv 输出文件中没有章节。我无法通过 UPnP(使用 minidlna)播放任何带有章节的 mkv 文件,尽管它们在本地(或通过 USB)播放得很好,Windows媒体播放器(Windows 8.1)。

$ ffmpeg -i input.mkv -map_chapters -1 -c:v copy -c:a copy output.mkv

因为我可以使用全高清电影(1920x)让 FreeBox 客户端轻易崩溃(fast forward连续按下两次按钮会让整个系统重新启动),所以我需要稍微缩小视频尺寸(1280x):

$ ffmpeg -i in.mp4 -c:v libx264 -crf 23 -vf scale=1280:-1 -c:a aac -strict experimental -sn -movflags faststart -metadata title="aTitle" -metadata date="aYear" out.mp4 

有些电影使用的是 ac3 和/或 DTS,对我来说不起作用,所以这aac是一个可以接受的解决方案。Windows Media Player 不喜欢 UPnP 上的 ac3,而 FreeBox V5(固件 1.5.20)不喜欢数字化转型声音。

因此,当输入是带有 ac3 声音流的 AVI 容器时,您需要将其转换为 mp4(对于 FreeBox 实际上是 mkv):

$ ffmpeg -i input_with_ac3.avi -c:v copy -c:a copy output.mp4

如果您想要 mkv 并且不想先转换为 mp4 然后再转换为 mkv,您需要解决以下错误:

[matroska @ 0x1b62100] 无法写入带有未知时间戳的数据包 av_interleaved_write_frame():参数无效

例如这里

$ ffmpeg -fflags +genpts -i input_with_ac3.avi -c copy out.mkv

更新:有时使用mpeg4_unpack_bframes确实会导致文件大小变小。请参阅文档

更新:请注意,如果您在 Linux 上工作,则ntfs-3g默认使用windows_names:off,因此您不应在其中创建带有“:”的新文件(Windows Media Player 和 VLC 不支持它们)。请参阅这里


更新:FreeBox 将需要特定的像素格式: 。由于盒子生成的 *.ts 文件使用此配置文件,因此-pix_fmt yuv420p也可以使用(ffprobe -show_streams *.ts | grep "profile\|level")-profile:v high -level 4.0

相关内容