Mac OS 仅转格式,视频内容不变( 比如 MKV 转 mp4)的解决方法以及讨论。

2020-05-31 06:09:15 +08:00
 WesleyNZ
我电脑里有一些 [ H264 视频编码,Vorbis 音频编码] 的 mkv 视频
我的目标是转换这个 MKV 格式到 mp4 格式,并且可以预览,且 [声音相对于原视频无损] 。

于是开始了折腾之路,在上一个帖子里 https://v2ex.com/t/676849#reply64
根据 v 友遇见我尝试了如下方法:

1.直接用 ffmpeg(brew 安装,终端命令执行,无可视化界面)转换视频,可以做到只更换容器,将 mkv 转化成 mp4.
但是用这种方法 [原视频因为用 vorbis 编码的音频] 导致 预览 Preview 的 mp4 文件没有声音,但是打开以后可以正常播放。
如果想实现我的目标,参数设置太复杂--划重点 因为对于每个文件 我都不知道应该怎么设置 aac 的码率,因为各个文件都不一样 你总不能都设置成最高的,这样我还要分别去测试,很麻烦。 我搜了很久也找不到办法,就算找到了 也没有批处理的办法,必须一个一个转换 所以这条路 走不通。


2. Handbrake 是完全不支持 [仅更换容器] 的,它的每一次执行都进行了转码,这在官方文件里有。在上述帖子里有写 这条路行不通。

3.有人推荐了 Videoproc,正好在搞活动,6 刀买入序列号。
结果 坑爹的事情来了,图片解释一切,我简单说下:
Videoproc 支持 [视频直接转换容器,不进行重新编码] ,然而对于 [ vorbis 音频编码部分] ,可以转化为 AAC 但是最高音质是 160kpbs,但是我的源文件音频的码率是 1061kbps,损失太大了 无法接受

https://v2ex.com/i/0Ig7mLYG.png

另外要序列号的留言 这软件对我来说没用了。

4.最后是 mp4tools,使用了以后,用花了 10 刀买入了
可以实现 [视频直接转换容器,不进行重新编码] , 而 [ vorbis 音频编码部分] 转换为 aac 文件,码率可以自选,最高可以 640kbps, 并且在我选择 640kbps 以后,如果源文件音频信息没有 640kbps 那么大 他会自动选择最高的音质,完美解决我的问题。

https://v2ex.com/i/3Q7L36rK.jpeg

另外谁能告诉我为什么帖子另外两张图片无法插入??
3449 次点击
所在节点    macOS
33 条回复
WesleyNZ
2020-05-31 06:17:12 +08:00
3.有人推荐了 Videoproc,正好在搞活动,6 刀买入序列号。
结果 坑爹的事情来了,图片解释一切,我简单说下:
Videoproc 支持 [视频直接转换容器,不进行重新编码] ,然而对于 [ vorbis 音频编码部分] ,可以转化为 AAC 但是最高音质是 160kpbs,但是我的源文件音频的码率是 1061kbps,损失太大了 无法接受
https://v2ex.com/i/0Ig7mLYG.png

另外要序列号的留言 这软件对我来说没用了。
kokutou
2020-05-31 06:20:55 +08:00
我能想到一个办法。。。
写个脚本先用 ffmpeg 获取音频码率,再判断下,然后再 ffmpeg -c:v copy -c:a aac 就行了。。
或者更简单粗暴的,ffmpeg 转出来 acc 音频轨放第一轨道,原始 vorbis 放第二轨道。。
WesleyNZ
2020-05-31 06:29:27 +08:00
@kokutou 第二个如何实现呢?而且问题是我 1061 帧率的那个文件 真实肯定没那么高。写脚本,每个文件判断 手动再执行,我做不到。
WesleyNZ
2020-05-31 06:30:51 +08:00
@kokutou 而且 Vorbis 音频比如说 400Kbps 你怎么知道转换出来的 aac 也是呢? aac 本身就是有损压缩,我怎么知道多少码率是相对源文件无损呢?
xiaket
2020-05-31 06:45:49 +08:00
多熟悉一下命令行吧, 这真不是什么复杂的需求.
yuzo555
2020-05-31 07:44:35 +08:00
libfdk_aac 支持 vbr,效果我没试过,理论上应该能按质量出音频(不过 libfdk_aac 有一些使用限制,最好看清楚 LICENSE 再使用)。
ffmpeg 自带的 aac 也支持质量模式 -q:a 不过效果应该是没有 libfdk_aac 好。
yzwduck
2020-05-31 08:41:20 +08:00
楼主是否正确判读了源音频的规格?
根据 vorbis (Xiph) 官方编码器的设定,最高质量 q10 的码率是 500kbit/s,但 OP 说源文件音频的码率是 1061 kbps,是不是在哪个地方搞错了?
locoz
2020-05-31 08:42:42 +08:00
试试 obs 自带的那个小工具
gggxxxx
2020-05-31 08:52:06 +08:00
楼主思路不明确啊,既然想保持原样为什么要去转它呢。
目标是播放的话,直接装 vlc 什么都解决了。
一定要转的话,mp4 格式有要求和限制的,Vorbis 转 aac 是对的。
yzwduck
2020-05-31 09:02:54 +08:00
@WesleyNZ #4 很难确定两个不同算法的有损压缩之间转换,会损失多少信息。
题外话,44.1/48 kHz 16 bit 的音频,在有损压缩码率 240 kbps 以上时,就很难听出它与原始音频的差异了,更何况楼主用的是 24 kHz 的音频。如果真的在意这部分的差异的话,就应该全程使用无损压缩算法。
KevinM
2020-05-31 10:11:33 +08:00
Vorbis 跟 AAC 都是 lossy compression,因此你的要求不可能成立。
@yzwduck 指出的也很對,Vorbis 的 nominal bitrate 最高到 q10 也只有 500Kbps,儘管可能是 variable bitrate 報告了最大值,但你原來的音頻可能有些非標準做法。
建議直接最高質量轉 AAC 就行了,你聽不出區別的,實在要追求「無損」,照 @kokutou 存兩條音軌就行了,AAC 做默認(第一),Preview 應該就能預覽了。
starrystarry
2020-05-31 11:27:58 +08:00
ffmpeg -i input.mkv -c:v copy -c:a alac_at -tag:v avc1 output.mov
注意是 .mov 不是 .mp4 (都能预览),-tag:v avc1 也是必须的。
starrystarry
2020-05-31 11:43:17 +08:00
MP4 容器能接受的无损音频格式只有 ALAC,Preview.app 能播放的无损音频格式也只有 ALAC 。AAC 是有损压缩,无论你设置多少码率都是有损。Vorbis 的 600Kbps 一定是大于 AAC 的 6000000000000Kbps 音质
WesleyNZ
2020-05-31 12:04:43 +08:00
@KevinM 如何保留两条音轨?同时如何设置默认音轨?
WesleyNZ
2020-05-31 12:05:23 +08:00
@starrystarry 后面这个道理我懂
WesleyNZ
2020-05-31 12:06:52 +08:00
@yzwduck 你看一下我贴出来的图片里链接 里面告诉你码率了。
yzwduck
2020-05-31 12:47:34 +08:00
@WesleyNZ 你的第一张截图里只能看出 Input #0 的码率是 1102 kb/s,但是实际的音频需要看 Stream #0:1 和 Stream #0:2 的码率。
chenpei466
2020-05-31 12:49:42 +08:00
permute
WesleyNZ
2020-05-31 12:52:54 +08:00
@chenpei466 这个软件 完全没法用的。。
WesleyNZ
2020-05-31 12:53:11 +08:00
@yzwduck 我有软件的 log,等我截个图给你看。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/677104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX