我希望现在能够多次做到这一点,所以我问。
如果我有一个现有的视频或音频文件ffmpeg
,mplayer
其他媒体播放器可以检测到它的至少一些“属性”,如容器、使用的编解码器和比特率,可能还有各种质量和编码特定设置等。
如何从现有文件中提取这些设置以便(直接)使用它们进行 ffmpeg 编码?
例如,我有一个mkv
使用某些设置编码的视频x264
,以及另一个未压缩的avi
文件。我想“复制”x264 mkv 文件中使用的编码设置,以便使用相同的设置。
注意:我正在寻找一种无需人工将设置从解码器“翻译”到编码器的方法。如果我需要先提取设置并将其保存在某个地方,这是可以的,但我希望能够简单地将读取选项提供给 ffmpeg 的命令行或预设|配置文件。
答案1
没有自动的方法可以做到这一点。您必须查看原始文件的参数并将其应用于输出文件。
大多数情况下,具体如下:
- 容器格式(MP4、MKV 等)
- 视频和音频编解码器(H.264、H.265 等)
- 音频特定:
- 音频通道数
- 音频采样率
- 音频比特率
- 视频特定:
但即使你做到了这一切,一些设备可能仍需要嵌入在比特流中的特定的专有信息。
至于使用 的具体任务x264
,这并非易事。我不知道有哪个脚本可以处理这些任务,这些任务通常是手动完成的。有关编码设置的大部分信息,在 Unix/Linux 或 OS X 上,您可以使用mediainfo
使用一些 Bash 技巧。
例如,对于 MP4 文件中的 x264 编码视频:
mediainfo input.mp4 | grep "Encoding settings" | cut -d':' -f2- | tr '/' '\n' | sed 's/ //'
这将输出 x264 选项列表:
cabac=1
ref=3
deblock=1:-1:-1
analyse=0x3:0x113
me=hex
subme=7
psy=1
…
然后您可以手动将这些选项传递给 x264 二进制文件。
但是,如果您使用 FFmpeg,情况会稍微复杂一些,因为并非所有 x264 选项都可以或应该像这样映射。请注意,通常简单的预设、调谐和配置文件规范也可以做到(如和中所示x264 --fullhelp
)x264 编码指南),并指定CRF级别就足够了。
这甚至还没有考虑音频,幸运的是,没有那么多选择。