如何將 MP4 影片文件中的音頻通道抓取到單獨的音頻文件中?
擁有從 YouTube 下載的 MPEG4(MP4 容器、H264 AVC 影片、AAC 音頻)影片剪輯,如何使用免費的 Linux 工具將其音頻通道分離為獨立的音頻(最好不解壓縮音頻)文件?
如果您知道只有 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"
考慮到 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-GUI,或僅安裝mediainfo
and 在終端中:mediainfo <file>
。