แปลง mp3 เป็น wav โดยใช้ FFmpeg สำหรับ VBR


27

ฉันควรใช้คำสั่งใดเพื่อแปลงmp3ไฟล์ให้wavมีบิตเรตเป็นตัวแปร หรือดีกว่าวิธีการที่ฉันจะได้รู้ว่าไม่ว่าจะเป็นเสียงที่มาที่เป็นfixedบิตเรตหรือvariable?


3
ฉันไม่คิดว่ารูปแบบไฟล์ WAV รองรับอัตราบิตผันแปร เนื่องจากตัวถอดรหัส MP3 ทั้งหมดต้องสนับสนุนให้เป็นไปตามมาตรฐานคุณควรจะสามารถแปลงไฟล์ MP3 ใด ๆ ให้เป็น WAV แบบบิตคงที่แม้ว่าผลลัพธ์ของคุณจะแตกต่างกันไปขึ้นอยู่กับคุณภาพของ MP3 ต้นทางและบิตคงที่ที่เลือกสำหรับ WAV สร้าง ซอฟต์แวร์การเล่น MP3 ส่วนใหญ่มีวิธีในการดูคุณสมบัติของไฟล์ที่กำลังเล่นดังนั้นคุณสามารถใช้เพื่อดูไฟล์ต้นฉบับที่คุณใช้
martineau

แล้วคำสั่งล่ะ? คุณแนะนำเมนูใด?
Soham Dasgupta

โปรดอ่านคำตอบของ martineau อีกครั้ง ฉันแก้ไขข้อผิดพลาดเล็กน้อย คุณไม่สามารถตั้งค่าบิตเรตสำหรับไฟล์ WAV ที่เข้ารหัสด้วย PCM ได้
slhck

คำตอบ:


36

คุณสามารถรับข้อมูลบางอย่างเกี่ยวกับบิตเรตของไฟล์อินพุตของคุณโดยใช้ffprobe song.mp3คำสั่ง อย่างไรก็ตามนี่จะบอกบิตเรตของเฟรมแรกเท่านั้น โดยปกติแล้ว VBR ในไฟล์ MP3 นั้นจะถูกนำมาใช้อย่างง่าย ๆ โดยการเปลี่ยนบิตเรตสำหรับแต่ละเฟรมดังนั้นไม่สามารถกำหนดว่าจะใช้งานได้หรือไม่เพียงแค่อ่านส่วนหัวของเฟรมแรก ฉันมักจะใช้ซอฟแวร์เครื่องเล่นไฟล์เสียงอื่น ๆ เพื่อตรวจสอบว่ามีการใช้ VBR หรือไม่โดยมากจะแสดงให้เห็นว่า (ยกตัวอย่างเช่น Foobar2000)

เมื่อคุณใช้ตัวแปลงสัญญาณเอาต์พุตแบบ lossy (เช่น MPEG-1 Layer III หรือ AAC) ffmpeg จะเลือกบิตเรตเริ่มต้นสำหรับเอาต์พุตสตรีมหรือบิตเรตตัวแปร มันขึ้นอยู่กับโปรแกรมเปลี่ยนไฟล์

สำหรับตัวแปลงสัญญาณแบบไม่สูญเสียคุณไม่สามารถตั้งค่าบิตเรตตัวแปรเนื่องจากแต่ละตัวอย่างใช้จำนวนบิตที่กำหนดไว้ล่วงหน้า ffmpeg -i song.mp3 song.wavจะทำให้คุณได้รับไฟล์ WAV ที่เข้ารหัสด้วย PCMพร้อมอัตราตัวอย่าง 44,100 Hz และ 16 บิตต่อตัวอย่าง ซึ่งส่งผลให้ประมาณ 1411 kBit / s สำหรับคอนเทนเนอร์ทั้งหมดน่าจะมากกว่าไฟล์อินพุต MP3 มาก

หากคุณต้องการขนาดไฟล์ที่เล็กลงสำหรับไฟล์ WAV ที่เข้ารหัส PCM ให้ตั้งค่ารูปแบบตัวอย่างที่มีความลึกบิตน้อยกว่า (ดู-encodersตัวเลือกสำหรับรายการทั้งหมด) และ / หรือเลือกอัตราตัวอย่างต่ำกว่า ( -ar 22050ตัวอย่างเช่น 22.05 kHz)

นี่คือตัวอย่างของการทำทั้งสองอย่าง:

ffmpeg -i song.mp3 -acodec pcm_u8 -ar 22050 song.wav

5
หากคุณเข้ารหัสเสียง PCM ในคอนเทนเนอร์ WAV คุณจะไม่สามารถตั้งค่าบิตเรตได้ ที่ไม่สมเหตุสมผล PCM เป็นรูปแบบที่ไม่มีการบีบอัด - คุณไม่สามารถบอกให้ใช้บิตมากขึ้นหรือน้อยลงต่อวินาที วิธีเดียวในการปรับขนาดคือใช้ขนาดตัวอย่างอื่น (ดู-sample_fmtsตัวเลือก) -ar 128kหมายความว่าอัตราตัวอย่างจะเท่ากับ 128,000 Hz แทนที่จะเป็น 44,1 หรือ 48 kHz ปกติ
slhck

12
คุณน่าจะทำได้ดีกว่าffmpeg -i song.mp3 song.wavเพราะจะเลือกบิตเรทที่เหมาะสม (ซึ่งน่าจะเป็น 44.1 กิโลเฮิร์ตซ์) หากคุณกำลังแปลงเป็น wav คุณอาจไม่ต้องการสูญเสียข้อมูลเพิ่มเติม ..
naught101

@ naught101 ถูกต้อง infact จะดีกว่าถ้าปล่อยให้ffpmegเลือกบิตเรทสุ่มตัวอย่างที่ถูกต้องตามsong.mp3ข้อมูลอินพุต ด้วยวิธีนี้wavไฟล์บิตแมปเอาท์พุทจะมีบิตเรตที่ดีที่สุด ซึ่งหมายความว่า btw ว่าขนาดไฟล์จะยอดเยี่ยม แต่ด้วยการล้นข้อมูล: `สตรีม # 0: 0: เสียง: mp3, 44100 Hz, สเตอริโอ, s16p, 128 kb / s`
loretoparisi

1
มันค่อนข้างปลอดภัยที่จะสันนิษฐานจุดประสงค์ของผู้ถามคือการเบิร์นไฟล์ WAV ที่เป็นผลลัพธ์ไปยังซีดีเพลง ความถี่ที่เหมาะสมสำหรับสิ่งนั้นคือ 44100 Hz ดังนั้นจึง-ar 44100เป็นสิ่งจำเป็นแม้ว่า ffmpeg จะใช้ตัวแปลงสัญญาณ 16 บิตที่เหมาะสมโดยอัตโนมัติ
มิคาอิลต.

3

จากความคิดเห็น @ naught101 ฉันจะทำตามขั้นตอนนี้เพื่อตรวจหาสิ่งที่ดีที่สุดacodec:

$ ffmpeg -formats | grep PCM 

 DE f32be           PCM 32-bit floating-point big-endian
 DE f32le           PCM 32-bit floating-point little-endian
 DE f64be           PCM 64-bit floating-point big-endian
 DE f64le           PCM 64-bit floating-point little-endian
 DE s16be           PCM signed 16-bit big-endian
 DE s16le           PCM signed 16-bit little-endian
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE s32be           PCM signed 32-bit big-endian
 DE s32le           PCM signed 32-bit little-endian
 DE u16be           PCM unsigned 16-bit big-endian
 DE u16le           PCM unsigned 16-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
 DE u32be           PCM unsigned 32-bit big-endian
 DE u32le           PCM unsigned 32-bit little-endian

ณ จุดนี้พิจารณาแพลตฟอร์มของคุณที่จะเลือกระหว่างbig-endian, little-endianการเลือกบิตเรต:

$ ffmpeg -i sample.mp3 
[mp3 @ 0x7fb33180da00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s

เราจะเห็นว่าไฟล์เสียงนี้เป็นmp3(ไม่ชัดเจนแม้จะมีการขยายของไฟล์อินพุตเพียงตรวจสอบไบต์) มีบิตเรตของ128 kb/sตัวแปลงสัญญาณเป็นs16pตัวอย่างที่44100 Hzดังนั้นเราเลือกตาม:

$ ffmpeg -i sample.mp3 -acodec pcm_s16le -ar 44100 sample.wav


Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
File 'sample.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'sample.wav':
  Metadata:
    INAM            : Saturday
    IART            : Winterwood
    IPRD            : Love In The Heart
    IPRT            : 2/15
    TPA             : 1/1
    ITCH            : iTunes 11.0.1
    IGNR            : Country & Folk
    ICRD            : 1997
    ISFT            : Lavf56.4.101
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc56.1.100 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=   46125kB time=00:04:27.75 bitrate=1411.2kbits/s    
video:0kB audio:46125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000457%

หากคุณใช้ mac คุณสามารถตรวจสอบเสียงว่าไม่มีwhite noiseที่จุดเริ่มต้น / สิ้นสุด (เมื่อเสียงต้นฉบับ mp3 ไม่มีเสียงสำหรับ msec / วินาทีบางส่วน):

$ afplay sample.wav

และแน่นอนคุณสามารถตรวจสอบบิตแมปอีกครั้ง:

$ ffmpeg -i sample.wav
Input #0, wav, from 'sample.wav':
  Metadata:
    artist          : Winterwood
    date            : 1997
    genre           : Country & Folk
    title           : Saturday
    album           : Love In The Heart
    track           : 2/15
    encoder         : Lavf56.4.101
    encoded_by      : iTunes 11.0.1
  Duration: 00:04:27.76, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

0

ใช้ ffmpeg เพื่อแปลงสื่อก่อนอื่นตรวจสอบคุณสมบัติของไฟล์โดยใช้ ffprobe ใช้คำสั่งนี้ ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

ที่ไหน -pcm_s16le is codec 16 bit conversion -ar is sampling rate (16000samples/sec) -ac no of audio channel

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.