使用 ffmpeg 可以实现吗?您有任何链接可以解释如何做到这一点吗?
我已经使用 Google 搜索过,但没有得到太多结果。
我只是想将 CD 或 DVD 转换为 MP3 音频文件。
答案1
答案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我建议
答案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(当然,您可以使用任何您喜欢的音频编码)done
while 循环结束
因此,您最终会在当前目录中得到一堆名为“rip <track number>.mp3”的文件。
答案4
如果一张 CD 包含原始 pcm 数据(比如每秒 44100 个样本、每通道 16 位),那么就可以简单地将原始数据传输到 HDD,然后为其提供标准波头。将数据制作成一个完全属于它自己的文件取决于你,因为我不知道如何找到编程工具来预先打开一个空文件。