使用 ffmpeg 翻录 CD/DVD

使用 ffmpeg 翻录 CD/DVD

使用 ffmpeg 可以实现吗?您有任何链接可以解释如何做到这一点吗?

我已经使用 Google 搜索过,但没有得到太多结果。

我只是想将 CD 或 DVD 转换为 MP3 音频文件。

答案1

虽然你可以从 DVD 直接访问 VOB 文件,但你必须将它们连接起来

cd /path/to/dvd/
cat VOB1.VOB VOB2.VOB VOB3.VOB | ffmpeg -i - -c:a libmp3lame -vn /path/to/output.mp3

对于 CD,如果你的 ffmpeg 是在libcdio支持下编译的,@M132给了我们一个解决方案:

ffmpeg -f libcdio -ss 0 -i /dev/sr0 dump.flac

libcdio在 Windows 下使用 ffmpeg,请查看媒体自动构建套件.然后它可以从.cue文件中读取。

答案2

对于 DVD,关键部分是安装DVD解密库(例如libdvdcss)。

直接使用 ffmpeg 读取 DVD 导致出现很多断帧。

最有效的方法是先将电影转储到磁盘

mpv dvd:// --dvd-device=/dev/cdrom --stream-dump=filename.vob
dvd://[title][/device] --dvd-device=PATH
          Play a DVD. DVD menus are not supported. If no title is given, the longest ti‐
          tle  is  auto-selected.  Without --dvd-device, it will probably try to open an
          actual optical drive, if available and implemented for the OS.

然后使用 ffmpeg 进行转换:

ffmpeg -i filename.vob \
    -c:a libopus -b:a 90k -ar 48000 \  # OPUS, vbr 90 kbps, 48000 Hz
    -c:v libx264 -bf 16 -crf 22  \ # X.264, 16 B-frames (might be too high for action movies), target quality 22
    -trellis 2 -direct-pred auto \ # Some video quality tweaks
    -vf "unsharp=3:3:1.:5:5:0.0" \ # Unsharp masking for low DVD resolutions (720x576)
    -profile:v high444 -pix_fmt yuv444p -movflags +faststart \ # Some output settings
    outfile.mp4

对于音频 CD我建议

  • asunder作为一个简单、轻便的 GUI 程序,它可以可靠地“工作”,并具有一些不错的功能,例如自动元数据查找、错误更正、多输出格式转换等。
  • abcde如果您真的想深入研究并自定义所有内容。 非常好的控制台程序,但请准备好先花一些时间阅读手册并弄清楚配置。

答案3

如果您ffmpeg没有libcdio或者您想自动分别存储每个轨道并且已经cdparanoia安装,您可以用它作为输入并将每个轨道传输到ffmpeg

$ cdparanoia -Q 2>&1 | 
grep "^ *[1-9]" | 
sed -e 's/^ *\|\..*//g' | 
while read t; do 
  cdparanoia $t - | ffmpeg -i pipe: -b:a 128k -ar 44100 -ac 2 -y "rip $t.mp3"; 
done
  • cdparanoia -Q 2>&1打印曲目列表并将其重定向至标准输出
  • grep "^ *[1-9]"查找开头带有数字的行,该数字表示曲目
  • sed -e 's/^ *\|\..*//g'删除所有不是曲目号的子字符串
  • while read t; do将每个轨道号读入变量t
  • cdparanoia $t -再次运行cdparanoia,这次读取给定的轨道并将输出写入标准输出
  • ffmpeg -i pipe: -b:a 128k -ar 44100 -ac 2 -y "rip $t.mp3";从标准输入读取输入并进行转换,这里转换为 mp3(当然,您可以使用任何您喜欢的音频编码)
  • donewhile 循环结束

因此,您最终会在当前目录中得到一堆名为“rip <track number>.mp3”的文件。

答案4

如果一张 CD 包含原始 pcm 数据(比如每秒 44100 个样本、每通道 16 位),那么就可以简单地将原始数据传输到 HDD,然后为其提供标准波头。将数据制作成一个完全属于它自己的文件取决于你,因为我不知道如何找到编程工具来预先打开一个空文件。

相关内容