为什么在 Ubuntu 12.04 上,当我从视频(MP4 或 FLV 等)中提取 M4A 格式的音频时avconv
:
avconv -i video.mp4 -c:a libvo_aacenc sound.m4a
其中有一个视频流,如果我只想要音频流,我必须添加选项-vn
,如下所示:
avconv -i video.mp4 -c:a libvo_aacenc -vn sound.m4a
我的意思是,M4A 不是一种音频格式吗?
可以将艺术作品添加到音频输出吗?
用这个命令我可以提取一帧,
avconv -i vid.mp4 -vsync 1 -frames 1 -s 1024x768 -an -y image.jpeg
但是否可以将其与音频输出关联?我猜解决方案是两者的一部分,但我搞不清楚。
答案1
.m4a
只是另一个常用的文件扩展名MPEG-4 第 14 部分容器,通常称为 MP4。该容器可以承载视频、音频和字幕。扩展名不会改变这一事实,尽管通常情况下,您只会将音频放入.m4a
文件中,将视频放入.m4v
文件中。
请参阅维基百科了解更多信息:
… 由于 MPEG-4 Part 14 是一种容器格式,MPEG-4 文件可能包含任意数量的音频、视频甚至字幕流,因此无法仅根据其文件扩展名来确定 MPEG-4 文件中的流类型。为此,Apple Inc. 开始使用并推广 .m4a 文件扩展名,该扩展名用于 MP4 容器,其中包含有损高级音频编码 (AAC) 或其自己的无损 Apple Lossless (ALAC) 格式的音频数据。能够播放音频/视频的软件应该能够识别文件扩展名为 .m4a 或 .mp4 的文件,这是意料之中的,因为两者之间没有文件格式差异。大多数能够创建 MPEG-4 音频的软件都允许用户选择所创建 MPEG-4 文件的文件扩展名。
如果您希望将静态图片与音频一起显示,则必须将其转换为视频。例如,创建所需的帧并将其命名为image.png
(或image.jpg
):
avconv -i input.mp4 -frames:v 1 image.png
这将为您提供视频的第一帧。如果您想要其他时间戳的帧,请在跳转-ss
之前添加选项,例如 10 秒: 。-i
avconv -ss 10 -i …
然后:
avconv -i input.mp4 -i image.png \
-c:v libx264 -pix_fmt yuv420p -r 1 -c:a copy -map 0:a:0 -map 1 output.mp4
在这里,选择 x264 来从静态图像编码视频,然后从原始文件中复制音频流。帧速率-r 1
应该足够了,尽管你可以省略这部分。
使用 可以-map 0:a:0
从第一个文件选择第一个音频流,使用 可以-map 1
选择要混入输出的图像。(\
只是为了避开换行符。)
这些-map
开关适用于最近(和不错的)最新的 FFmpeg 版本——但我不能谈论 Ubuntu 的 Libav。如果它不适合您下载 FFmpeg。
如果要设置文件的专辑封面.m4a
,请使用原子欧芹:
AtomicParsley input.m4a --artwork image.jpg
这将创建一个新文件,其中嵌入了图片作为艺术作品,现在大多数媒体播放器都可以正确显示。要覆盖输入文件本身,--overWrite
也请使用开关。