1
WesleyNZ OP 3.有人推荐了 Videoproc,正好在搞活动,6 刀买入序列号。
结果 坑爹的事情来了,图片解释一切,我简单说下: Videoproc 支持 [视频直接转换容器,不进行重新编码] ,然而对于 [ vorbis 音频编码部分] ,可以转化为 AAC 但是最高音质是 160kpbs,但是我的源文件音频的码率是 1061kbps,损失太大了 无法接受 https://v2ex.com/i/0Ig7mLYG.png 另外要序列号的留言 这软件对我来说没用了。 |
2
kokutou 2020-05-31 06:20:55 +08:00
我能想到一个办法。。。
写个脚本先用 ffmpeg 获取音频码率,再判断下,然后再 ffmpeg -c:v copy -c:a aac 就行了。。 或者更简单粗暴的,ffmpeg 转出来 acc 音频轨放第一轨道,原始 vorbis 放第二轨道。。 |
3
WesleyNZ OP @kokutou 第二个如何实现呢?而且问题是我 1061 帧率的那个文件 真实肯定没那么高。写脚本,每个文件判断 手动再执行,我做不到。
|
4
WesleyNZ OP @kokutou 而且 Vorbis 音频比如说 400Kbps 你怎么知道转换出来的 aac 也是呢? aac 本身就是有损压缩,我怎么知道多少码率是相对源文件无损呢?
|
5
xiaket 2020-05-31 06:45:49 +08:00 1
多熟悉一下命令行吧, 这真不是什么复杂的需求.
|
6
yuzo555 2020-05-31 07:44:35 +08:00
libfdk_aac 支持 vbr,效果我没试过,理论上应该能按质量出音频(不过 libfdk_aac 有一些使用限制,最好看清楚 LICENSE 再使用)。
ffmpeg 自带的 aac 也支持质量模式 -q:a 不过效果应该是没有 libfdk_aac 好。 |
7
yzwduck 2020-05-31 08:41:20 +08:00 1
楼主是否正确判读了源音频的规格?
根据 vorbis (Xiph) 官方编码器的设定,最高质量 q10 的码率是 500kbit/s,但 OP 说源文件音频的码率是 1061 kbps,是不是在哪个地方搞错了? |
8
locoz 2020-05-31 08:42:42 +08:00 via Android
试试 obs 自带的那个小工具
|
9
gggxxxx 2020-05-31 08:52:06 +08:00 1
楼主思路不明确啊,既然想保持原样为什么要去转它呢。
目标是播放的话,直接装 vlc 什么都解决了。 一定要转的话,mp4 格式有要求和限制的,Vorbis 转 aac 是对的。 |
10
yzwduck 2020-05-31 09:02:54 +08:00 1
@WesleyNZ #4 很难确定两个不同算法的有损压缩之间转换,会损失多少信息。
题外话,44.1/48 kHz 16 bit 的音频,在有损压缩码率 240 kbps 以上时,就很难听出它与原始音频的差异了,更何况楼主用的是 24 kHz 的音频。如果真的在意这部分的差异的话,就应该全程使用无损压缩算法。 |
11
KevinM 2020-05-31 10:11:33 +08:00 via iPad 1
|
12
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 也是必须的。 |
13
starrystarry 2020-05-31 11:43:17 +08:00
MP4 容器能接受的无损音频格式只有 ALAC,Preview.app 能播放的无损音频格式也只有 ALAC 。AAC 是有损压缩,无论你设置多少码率都是有损。Vorbis 的 600Kbps 一定是大于 AAC 的 6000000000000Kbps 音质
|
15
WesleyNZ OP @starrystarry 后面这个道理我懂
|
17
yzwduck 2020-05-31 12:47:34 +08:00 via Android
@WesleyNZ 你的第一张截图里只能看出 Input #0 的码率是 1102 kb/s,但是实际的音频需要看 Stream #0:1 和 Stream #0:2 的码率。
|
18
chenpei466 2020-05-31 12:49:42 +08:00
permute
|
19
WesleyNZ OP @chenpei466 这个软件 完全没法用的。。
|
21
WesleyNZ OP @yzwduck 这是那个 1061 的码率转换设置,你帮我分析一下是不是已经 [音频转码从 vorbis 到 aac,已经有足够码率了]
求帮我解释一下这个图大概有什么意思,谢谢。 https://v2ex.com/i/2dibX90K.jpeg |
22
WesleyNZ OP @yzwduck https://v2ex.com/i/Mk841069.png 不好意思 图片在这里,麻烦帮我看一下,然后 too many bits-- clamping to max 是指的,重新编码的 aac 是已经取了最高的采样标准?
|
23
yzwduck 2020-05-31 13:56:08 +08:00 1
没有。
如果楼主看了日志都没注意到音频在编码时被重采样了的话,只能麻烦楼主先自行学习一下数字音频和流媒体的基本概念,再和其他人继续讨论了。 [声音相对原视频无损] 的两种简单做法,1 )使用无损压缩算法来二次编码,2 )复制原有音频流。如果想用有损压缩二次编码的话,算一下 hash 看有没有信息损失,或者算一下 SNR 看损失了多少。 EOF |
25
hronro 2020-05-31 16:57:12 +08:00 via iPhone
为啥不用开源的 MP4Box 呢?比 ffmpeg 简单好用
|
27
QingStone 2020-06-01 00:11:26 +08:00 via Android
小丸工具箱,试试?
|
28
pperlee 2020-06-01 16:48:20 +08:00
不要贪图图形界面。
|
30
yangxin0 2020-06-01 20:28:07 +08:00 via iPhone
不就是 remux
|
32
yangtze 334 天前
看很多人推荐用 ffmpeg ,但没人详细说明,我做一个补充:
``` docker run --rm -it --entrypoint /bin/sh -v $(pwd):/config linuxserver/ffmpeg \ -c 'find /config \( -iname "*.ts" -or -iname "*.flv" \) -exec sh -c "ffmpeg -i \"\$1\" -c copy \"\${1%.*}.mp4\" && touch -r \"\$1\" \"\${1%.*}.mp4\"" _ {} \;' ``` **以下基于 ChatGPT4 解释** 这个 Docker 命令使用 `linuxserver/ffmpeg` 镜像在一个 Docker 容器内执行视频文件格式转换。它旨在批量转换目录中的 `.ts` 和 `.flv` 文件(包括这些扩展名的所有大小写变体)到 `.mp4` 格式,同时保留原始文件的修改日期。 命令解释如下: - `docker run --rm -it`: 运行一个 Docker 容器,并在退出时自动删除它。`-it` 选项用于交互式运行,以便查看输出。 - `--entrypoint /bin/sh`: linuxserver/ffmpeg 默认入口是 ffmpeg ,需要将容器的入口点设置为 `/bin/sh`,允许运行自定义 shell 命令。 - `-v $(pwd):/config`: 将当前目录(`$(pwd)`)挂载到容器的 `/config` 目录。这意味着您应在执行此命令的目录中存放需要转换的视频文件。 - `find /config \( -iname "*.ts" -or -iname "*.flv" \)`: 查找 `/config` 目录中所有以 `.ts` 或 `.flv` 结尾的文件,不区分大小写。 - `-exec sh -c "ffmpeg -i \"\$1\" -c copy \"\${1%.*}.mp4\" && touch -r \"\$1\" \"\${1%.*}.mp4\"" _ {}`: 对每个找到的文件执行 `ffmpeg` 命令进行格式转换,然后使用 `touch -r` 命令使新的 `.mp4` 文件保持与原文件相同的修改日期。 |
33
yangtze 332 天前
不用 Docker 的话:
``` find . \( -iname "*.ts" -or -iname "*.flv" \) -exec sh -c 'ffmpeg -i "$1" -c copy "${1%.*}.mp4" && touch -r "$1" "${1%.*}.mp4"' _ {} \; ``` |