Pangkas MP3 ke 30 detik pertama

103

Pertanyaan Asli

Saya ingin dapat menghasilkan file MP3 baru (valid sepenuhnya) dari file MP3 yang ada untuk digunakan sebagai pratinjau - gaya coba-sebelum-Anda-beli. File baru hanya boleh berisi n detik pertama dari lagu tersebut.

Sekarang, saya tahu saya hanya bisa "memotong aliran" dalam n detik (dihitung dari bitrate dan ukuran header) saat mengirimkan file, tetapi ini agak kotor dan PITA nyata pada jalur VBR. Saya ingin dapat menghasilkan file MP3 yang sesuai.

Ada yang punya ide?

Jawaban

Keduanya mp3splitdan ffmpegkeduanya merupakan solusi yang baik. Saya memilih ffmpeg karena biasanya diinstal di server linux dan juga mudah tersedia untuk windows . Berikut beberapa parameter baris perintah yang lebih baik untuk menghasilkan pratinjau dengan ffmpeg

  • -t <seconds> potong setelah jumlah detik tertentu
  • -y memaksa file menimpa
  • -ab <bitrate>atur bitrate misalnya -ab 96k
  • -ar <rate Hz>setel laju pengambilan sampel misalnya -ar 22050 untuk 22,05kHz
  • -map_meta_data <outfile>:<infile> salin metadata lagu dari infile ke outfile

alih-alih menyetel -ab dan -ar, Anda dapat menyalin setelan trek asli, seperti yang disarankan Tim Farley, dengan:

  • -acodec copy
Cheekysoft
sumber
Saya belum pernah menggunakannya untuk tujuan khusus ini, tapi saya yakin ffmpeg bisa melakukannya.
grapefrukt
Coba pikirkan: Anda mungkin ingin melewati bagian awal lagu aslinya. Katakanlah, Anda dapat menggunakan potongan 30 detik mulai dari bagian ketiga lagu. Dalam beberapa lagu, 30 detik pertama tidak memberi tahu Anda banyak karena itu hanya bagian "pengaturan adegan" - misalnya Pink Floyd 's Shine On You Crazy Diamond .
Tomas Sedovic
Sekadar catatan, saya mengalami waktu yang sangat buruk dengan ffmpeg, mptsplit dan mp3cutter di CentOS, semuanya melaporkan "Header Missing". Jadi, saya harus menggunakan MP3 Class dan beberapa matematika untuk dipotong berdasarkan ukuran file.
Gardner
Saya tidak menyadari ffmpeg bisa melakukan itu. Terima kasih.
Sridhar Sarnobat

Jawaban:

142

Saya juga merekomendasikan ffmpeg, tetapi baris perintah yang disarankan oleh John Boker memiliki efek samping yang tidak diinginkan: ini mengkodekan ulang file ke bitrate default (yaitu 64 kb / s dalam versi yang saya miliki di sini setidaknya). Ini mungkin memberi pelanggan Anda kesan yang salah tentang kualitas file suara Anda, dan ini juga membutuhkan waktu lebih lama untuk melakukannya.

Berikut adalah baris perintah yang akan dipotong menjadi 30 detik tanpa transcoding:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

Sakelar -acodec memberi tahu ffmpeg untuk menggunakan codec "copy" khusus yang tidak ditranskode. Cepat kilat.

CATATAN: perintah telah diperbarui berdasarkan komentar dari Oben Sonne

Tim Farley
sumber
21
ffmpegVersi terbaru (setidaknya sejak 0.10.6) menafsirkan opsi secara berbeda berdasarkan posisi. Opsi terkait-input harus muncul sebelum -i ...dan opsi keluaran-keluaran harus muncul setelahnya -i .... Artinya sekarangffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3 akan menjadi jawaban yang benar.
Oben Sonne
Dapatkah saya mengekstrak audio 30 detik dari file input 15 detik, artinya jika file diparut kemudian 30 detik kemudian ekstrak 30 detik tetapi jika file 15 detik maka ulangi dan ekstrak selesai 30 detik.
Girish Patidar
6
Jika Anda ingin mengatur waktu mulai (offset) bisa Anda gunakan -ss hh:mm:ss[.xxx]. Contoh: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3akan memotong hingga 30 detik mulai dari 00h 00m 15s 500ms .
patryk.beza
1
untuk beberapa alasan perintah di atas tidak berhasil untuk saya tetapi jika saya mengubahnya menjadi: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3maka itu berfungsi dengan sempurna
Krishnendu
Bagi saya opsi -t dan -s harus digunakan secara terpisah dalam 2 perintah. Tapi berhasil, terima kasih!
Yan King Yin
57

Jika Anda ingin MENGHAPUS 30 detik pertama (dan menyimpan sisanya), gunakan ini:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
the.jxc
sumber
18

mencoba:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
John Boker
sumber
12

Perintah ini juga bekerja dengan sempurna. Saya memotong file musik saya dari 20 menjadi 40 detik.

-y: memaksa file keluaran untuk ditimpa.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Rahul Chauhan
sumber
1
Sempurna! Terima kasih telah membagikan ini.
HerrimanCoder
11

Anda dapat menggunakan mp3cut:

cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0

Ini di ubuntu repo, jadi hanya: sudo apt-get install cutmp3.

Michał Šrajer
sumber
6

Anda mungkin ingin mencoba Mp3Splt .

Saya telah menggunakannya sebelumnya dalam layanan C # yang hanya membungkus proses mp3splt.exe win32. Saya berasumsi hal serupa dapat dilakukan dalam skenario Linux / PHP Anda.

Ryan Duffield
sumber
2
Digunakan MP3Split dengan sukses untuk mp3 cut
Freshblood
0

Saya mendapat kesalahan saat melakukan hal yang sama

Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters     ?): Invalid argumentStream mapping:

Perbaikan bagi saya adalah:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Mithun Cheriyath
sumber
0

medipack adalah aplikasi baris perintah yang sangat sederhana sebagai pembungkusffmpeg .

Anda dapat mencapai pemangkasan video Anda menggunakan perintah ini:

medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3

Anda dapat melihat opsi subperintah trim sebagai:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

Anda juga dapat menjelajahi opsi lain menggunakan medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

Anda dapat mengunjungi https://github.com/srbcheema1/medipack dan contoh checkout di README.

srbcheema1
sumber
1
Apa keuntungan dari pembungkus ini? Karena sepertinya tidak ada yang lebih sederhana dariffmpeg -i input -ss <start time> -to <end time> output
llogan
Saya juga telah menambahkan opsi -tyang dapat digunakan sebagai alternatif -eyang berarti seandainya saya memangkas video 4 menit 36 ​​detik berikutnya, saya tidak perlu khawatir menambahkan waktu-waktu itu secara manual, juga saya telah memberikan kemudahan serupa saat memotong video, lihat contoh di README Anda akan mengerti mengapa CLI-nya lebih mudah daripada ffmpeg sederhana. Saya setuju bahwa ini tidak terlalu kuat tetapi untuk orang normal alatnya yang praktis.
srbcheema1
2
ffmpegmemiliki -topilihan yang -tmungkin Anda lakukan.
llogan
bagaimana dengan opsi% umur tanaman yang disebutkan dalam README di bawah sub opsi tanaman, apakah itu juga tersedia ?? Saya baru saja membuat alat itu sesuai permintaan oleh seseorang yang membayar saya beberapa dolar, karena mereka tidak ingin khawatir tentang daftar opsi cli yang besar, mereka hanya menginginkan alat yang dapat melakukan tugas tertentu dengan mudah, bahkan jika ada semua opsi di ffmpeg, tetapi tetap akan sulit bagi noob untuk menemukan semuanya di bagian bantuan baris perintah. alat ini memiliki bagian bantuan sederhana yang mudah dipahami oleh
pemula
Oke,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan