最近因爸下肢靜脈曲張手術後白天要穿八小時彈性襪兩周, 這襪要脫時不難, 但穿上最好有人幫忙, 所以我這兩周都從鄉下通勤, 上下班各約需 50 分鐘, 在車上聽廣播或音樂覺得沒營養, 就想說乾脆來聽日語教學, 但手邊教材都是 mp4 影片, 需將其中的音訊抽取出來, 轉成 mp3 後轉存在 USB 再插入車上音響播放.
我詢問 ChatGPT 如何從 mp4 抽取音訊, 它建議用開源軟體 ffmpeg, 以下摘要紀錄作法.
1. 下載 ffmpeg :
下載網址如下 :
按中間的 Windows 圖案, 下方會出現兩個下載連結, 按任何一個皆可 :
點選第一個 essentials.7z 檔即可 :
解壓縮後進入 bin 子目錄, 點路徑後方空白按滑鼠右鍵, 選擇 "複製位址" :
打開 Windows 設定, 搜尋 "環境變數" :
切換到 "進階" 頁籤, 按底下的 "環境變數" 鈕 :
這時開啟命令提示字元視窗, 輸入 ffmpeg 指令 :
這樣 ffmpeg 就設定好, 可在任何資料夾下執行了.
2. 抽取 m4a 音訊 :
用 ffmpeg 從 mp4 檔案中抽取 m4a 音訊的指令如下 :
ffmpeg -i input.mp4 -vn -acodec copy output.m4a
說明如下 :
- -i input.mp4 : 指定輸入檔案
- -vn : 不處理影像 (video none)
- -acodec copy : 直接複製音訊串流(不重新編碼)
- output.m4a : 輸出檔案
mp4 與 m4a 本質上都是同一種格式 (MPEG-4 Part 14) 的容器 (container), 差別只在於 mp4 通常包含影像與音訊 (影音檔); 而 m4a 容器通常只包含音訊, 用來裝以 AAC 或 ALAC 格式編碼的音訊, 它是 mp4 的音訊限定版.
上面的指令只是做封裝轉換 (remux) 而已, 並不重新編碼音訊, 所以速度非常快, 1 小時的影片不到 5 秒就可抽取完畢成為 .m4a 檔, 一般播放器皆能直接撥放 .m4a 檔.
例如 :
C:\test>ffmpeg -i 旅遊日文第1章.mp4 -vn -acodec copy 旅遊日文第1章.m4a
ffmpeg version 2025-11-02-git-f5eb11a71d-essentials_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 15.2.0 (Rev8, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-cairo --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-openal --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 60. 16.100 / 60. 16.100
libavcodec 62. 19.100 / 62. 19.100
libavformat 62. 6.101 / 62. 6.101
libavdevice 62. 2.100 / 62. 2.100
libavfilter 11. 9.100 / 11. 9.100
libswscale 9. 3.100 / 9. 3.100
libswresample 6. 2.100 / 6. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '旅遊日文第1章.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf59.16.100
Duration: 01:25:18.60, start: 0.000000, bitrate: 1329 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 1086 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 235 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Output #0, ipod, to 'output.m4a':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf62.6.101
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 235 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Press [q] to stop, [?] for help
[out#0/ipod @ 00000133de030400] video:0KiB audio:147353KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.638092%
size= 148293KiB time=01:25:18.60 bitrate= 237.3kbits/s speed= 730x elapsed=0:00:07.01
3. 將 m4a 檔轉成 mp3 檔 :
m4a 是新一代的音訊格式, 音質普遍比 mp3, 比較不會有高頻失真與金屬聲現象, 但較老舊的播放器或車上音響可能不支援, 較舊的音量調整軟體如 Mp3Gain 也無法開啟 m4a 檔, 這時就需要將 .m4a 檔案轉成 .mp3 檔, 轉換指令如下 :
ffmpeg -i input.m4a output.mp3
此處參數 -i 仍然是指輸入檔案.
也可以加上參數 -b:a 指定位元率 (bit rate), 但檔案可能會較大 :
ffmpeg -i input.m4a -b:a 192k output.mp3 (指定位元率 192k)
例如 :
C:\test>ffmpeg -i 旅遊日文第1章.m4a 旅遊日文第1章.mp3
ffmpeg version 2025-11-02-git-f5eb11a71d-essentials_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 15.2.0 (Rev8, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-cairo --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-openal --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 60. 16.100 / 60. 16.100
libavcodec 62. 19.100 / 62. 19.100
libavformat 62. 6.101 / 62. 6.101
libavdevice 62. 2.100 / 62. 2.100
libavfilter 11. 9.100 / 11. 9.100
libswscale 9. 3.100 / 9. 3.100
libswresample 6. 2.100 / 6. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '旅遊日文第1章.m4a':
Metadata:
major_brand : M4A
minor_version : 512
compatible_brands: M4A isomiso2
encoder : Lavf62.6.101
Duration: 01:25:18.60, start: 0.000000, bitrate: 237 kb/s
Stream #0:0[0x1](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 235 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to '旅遊日文第1章.mp3':
Metadata:
major_brand : M4A
minor_version : 512
compatible_brands: M4A isomiso2
TSSE : Lavf62.6.101
Stream #0:0(und): Audio: mp3, 48000 Hz, stereo, fltp (default)
Metadata:
encoder : Lavc62.19.100 libmp3lame
handler_name : SoundHandler
vendor_id : [0][0][0][0]
[out#0/mp3 @ 0000029c30fcbc80] video:0KiB audio:79979KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.000409%
size= 79979KiB time=01:25:18.61 bitrate= 128.0kbits/s speed=57.3x elapsed=0:01:29.29
可見 m4a 轉成 mp3 花的時間較長些.
4. 直接從 mp4 檔抽取音訊並編碼為 mp3 檔 :
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
其中 -q:a 2 參數用來指定 mp3 音質等級 (VBR 模式), 有 0~4 等級, 0 為幾乎無損之最高等級 (約 245~320 kbps), 4 為中等音質 (約 160 kbps), 一般長指定等級 2 高音質 (約 190~220 kbps).
例如 :
C:\test>ffmpeg -i 旅遊日文第1章.mp4 -vn -acodec libmp3lame -q:a 2 旅遊日文第1章.mp3
ffmpeg version 2025-11-02-git-f5eb11a71d-essentials_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 15.2.0 (Rev8, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-cairo --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-openal --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 60. 16.100 / 60. 16.100
libavcodec 62. 19.100 / 62. 19.100
libavformat 62. 6.101 / 62. 6.101
libavdevice 62. 2.100 / 62. 2.100
libavfilter 11. 9.100 / 11. 9.100
libswscale 9. 3.100 / 9. 3.100
libswresample 6. 2.100 / 6. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '旅遊日文第1章.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf59.16.100
Duration: 01:25:18.60, start: 0.000000, bitrate: 1329 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 1086 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 235 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to '旅遊日文第1章.mp3':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
TSSE : Lavf62.6.101
Stream #0:0(und): Audio: mp3, 48000 Hz, stereo, fltp (default)
Metadata:
encoder : Lavc62.19.100 libmp3lame
handler_name : SoundHandler
vendor_id : [0][0][0][0]
[out#0/mp3 @ 000001ee18f2fcc0] video:0KiB audio:80743KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.000410%
size= 80743KiB time=01:25:18.61 bitrate= 129.2kbits/s speed= 102x elapsed=0:00:50.22
直接從 mp4 抽取轉成 mp3 才 50 秒, 比 m4a 轉 mp3 還快.








沒有留言 :
張貼留言