从 YouTube 下载 MPEG4(MP4 容器、H264 AVC 视频、AAC 音频)视频剪辑,如何使用免费的 Linux 工具将其音频通道分离为独立的音频(最好不解压和重新压缩音频)文件?
答案1
考虑 Youtube 视频,可能没有必要从视频中提取音频,因为音轨可以单独下载通过使用带有最新 Flashgot 插件的 Firefox 或使用mps-youtube(这是一个用于播放和下载 YouTube 音轨的工具:更多这里)。
考虑 mp4 视频文件:
正如所回答的这里,我们可以使用更通用的命令,而不需要文件的特定名称,并将其添加到文件管理器自定义菜单中,例如:
ffmpeg -i "$0" -map 0:1 -c:a copy "${0%%.*}".m4a
(使用.m4a
是更好的选择,因为它作为 的容器得到更多支持.aac
,但如果您愿意,也可以使用 raw.aac
来代替。)
此外,在终端中运行的此命令将从当前文件夹中的所有 mp4 文件中提取音轨:
for i in *.mp4; do ffmpeg -i "${i}" -map 0:1 -c:a copy "${i%.mp4}.m4a"; done
(这里来源帖子)
请参阅有关如何在文件管理器的上下文菜单中使用此类命令的链接答案和问题中的评论和相关信息。
通过相应地替换输入和输出扩展名,上述命令和其他类似命令也可用于从其他类型的视频文件中提取音频。
第一个命令也同样有效flv
;但对于其他视频,只需替换m4a
为视频剪辑中包含的任何音频即可。如果应用于不同类型的视频文件,第二个命令需要替换视频和音频扩展名。
通常,mp4
文件flv
包含aac
音频,Webm
文件包含音频ogg
,avi
文件包含mp3
音频。要确定视频中包含哪些音频,请使用 mediainfo
:媒体信息图形用户界面,或者只需mediainfo
在终端中安装 和 :mediainfo <file>
。
答案2
如果您知道只有 1 个音频流并且确实如此aac
,那么您只需要这个:
ffmpeg -acodec copy -i "movie.mp4" -y "audio.aac"
如果要编写第一个音频流 ID 和编解码器类型/文件扩展名的脚本,可以使用以下命令:
eval $(ffmpeg -i "movie.mp4" 2>&1 |awk '/Stream.*Audio/{print "stream=" $2 ";codec=" $4}' |head -n1)
stream=${stream:1}; stream=${stream/:/}
extn=${codec/,/}; [[ $extn == "aac" ]] ||
{ echo "You need to manually set the fiie extension. Codec type is: $codec"; exit 1; }
ffmpeg -map $stream -acodec copy -i "movie.mp4" "audio.$extn"