Ffmpeg ile videodan nasıl ses çıkarabilirim?


228

Videodan ses çıkarmak için aşağıdaki komutu denedim:

ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

ama şu çıktıyı alıyorum

libavutil     50.15. 1 / 50.15. 1
libavcodec    52.72. 2 / 52.72. 2
libavformat   52.64. 2 / 52.64. 2
libavdevice   52. 2. 0 / 52. 2. 0
libavfilter    1.19. 0 /  1.19. 0
libswscale     0.11. 0 /  0.11. 0
libpostproc   51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input

Birisi yardım edebilir mi lütfen?

Yanıtlar:


407

Ses akışını yeniden kodlamadan çıkarmak için:

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
  • -vn video değil.
  • -acodec copy zaten orada bulunan aynı ses akışını kullandığını söylüyor.

Doğru dosya adı uzantısını ayarlamak için, ne codec bileşeni olduğunu görmek için çıktıyı okuyun.


54
ve sadece hangi ses akışının olduğunu kontrol etmek için ffmpeg'i ilk kez çalıştırmak yerine, ffprobe input-video.avi kullanın
FlorianB

15
Yalnızca bir video akışından ses çıkarırsanız, sesin uzunluğu videonun uzunluğundan daha kısa olabilir. Bunun olmadığından emin olmak için, hem ses hem de videoyu aynı ffmpeg çağrısıyla çıkarın, örneğin "ffmpeg -i vid.avi -map 0: a audio.wav -map 0: v onlyvideo.avi
BlenderBender

2
Bu cevabı ham AAC'yi bir M4A konteynerine de içine alan bir komutla genişletmek harika olurdu.
Gras Double

8
Bu durumda, ".aac" yerine hedef yolundaki ".m4a" yazın. ffmpeg niyetinizi tahmin etmek için yeterince akıllı ve sonucu bir M4A kapsayıcısında kapsül içine alıyor :)
Gras Double

1
FWIW, bir PHP komut dosyası hazırladım, böylece sadece giriş video dosyasını belirtiyorum ve çıkış ses dosyasının uzantısını otomatik olarak belirler: superuser.com/questions/1301901/…
Gras Double

117

AVI'den yüksek kaliteli bir MP3 kodlamak için değişken bit hızı için -q: a kullanın :

ffmpeg -i sample.avi -q:a 0 -map a sample.mp3

Bir videodan sesin bir kısmını çıkarmak istiyorsanız , başlangıç ​​zaman damgasını belirtmek için -ss seçeneğini ve kodlama süresini belirtmek için -t seçeneğini kullanın; örneğin, 45 saniye içinde 3 dakika 5 saniye arasında:

ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
  • Zaman damgalarının SS: DD: SS.xxx biçiminde veya saniye cinsinden olması gerekir.

  • -T seçeneğini belirtmezseniz sonuna kadar gider.

Çalışma örneği:

  1. Ffmpeg indir
  2. Bir Komut İstemi açın (Başlat> Çalıştır> CMD) veya Linux / Mac'te bir Terminal açın
  3. ffmeg.exe ile dizine cd
  4. Komutunuzu verin ve çıktı dosyasını bekleyin (veya hataları giderin)

resim açıklamasını buraya girin


3
-q:aDeğerler için bir kılavuz : trac.ffmpeg.org/wiki/Encode/MP3 Zero, tipik olarak aklı başında CBR aralığının üst kısmında ortalama bit hızlarıyla sonuçlanan en yüksek kalitede VBR ayarıdır (320 kbit / s maksimum, muhtemelen kayıpsız sıkıştırmanın daha uygun hale geldiği noktanın biraz ötesinde).
Evgeni Sergeev

3
Ve ne yapar -map a?
Iulian Onofrei

Uyarı: Bu, sesi biraz azaltacak kayıplı bir sıkıştırma ile sesi yeniden kodlar. Orijinal zaten sıkıştırılmışsa, kaliteyi iki kez düşürürsünüz, bu fark edilebilir veya görülmeyebilir.
Davidmh

Bu komut benim için çalışır, yukarıdaki komut işe -vnyaramazsa.
Mmm

12

Komut satırı doğrudur ve geçerli bir video dosyası üzerinde çalışır. MP3 ile çalışmak için doğru kütüphaneyi kurduğunuzdan, başka bir ses codec'i ile lame o probunu kurduğunuzdan emin olurum.

Genelde

ffmpeg -formats

veya

ffmpeg -codecs

daha fazla bilgi için yeterli bilgi verir.


11

ffmpeg -i sample.avidosyanız için ses / video formatı bilgilerini verecektir. Giriş akışlarını ayrıştıracak şekilde uygun kitaplıklara sahip olduğunuzdan emin olun. Ayrıca, dosyanın bozuk olmadığından emin olun.


ben bir mkv ile aynı yorumunu çalıştığımızda şimdi, ben .avi'nin için çalışmıyor vedio.why, avi dönüştürmek için herhangi ffmpeg komutu yoktur doğru sonucu var
user1269669

1
AVI veya MKV, birçok farklı ses / video formatını tutabilen kap formatını ifade eder. AVI sesini dönüştürmek istemiyorsunuz, ses parçasını henüz belirtmediğiniz AVI dosyası içinde dönüştürmek istiyorsunuz. AVI dosyasında ne tür bir ses parçası olduğunu görmek için yukarıda listelediğim komutu kullanın. MP3 ise, FFMPEG'i LAME lame.sourceforge.net gibi bir MP3 kütüphanesiyle derlemeniz gerekir.
smp

6

Mp3 audio kodlamak için ffmpeg.org aşağıdaki örneği gösterir:

ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3

Bir videodan sadece input.wavvideo dosya adıyla değiştirerek sesi çıkardım . 2Aracı 190 kb / s. Diğer kalite seviyelerini yukarıdaki linkimde görebilirsiniz.


Bu örnek, bir ses dosyasını videodan ayıklamak için değil, farklı bir biçime dönüştürmek içindir.
Iulian Onofrei

@IulianOnofrei, cevabımda açıkladığım gibi, ses dosyasını bir video dosyasıyla değiştirebilirsiniz. Benim için çalıştı.
Suragch

6

İşte az önce kullandığım şey:

ffmpeg -i my.mkv -map 0:3 -vn -b:a 320k my.mp3

Seçenekler açıklaması:

  • my.mkv bir kaynak video dosyasıdır, diğer formatları da kullanabilirsiniz
  • -map 0:3video dosyasından 3. akış istediğimi gösterir. N'nizi oraya koyun - video dosyalarında genellikle birden fazla ses akışı vardır; atlayabilir veya kullanabilirsiniz-map 0:a varsayılan ses akışını almak için . ffprobe my.mkvVideo dosyasının hangi akışlara sahip olduğunu görmek için çalıştırın .
  • my.mp3 bir hedef ses dosya adıdır ve ffmpeg uzantısından bir MP3 istiyorum. Benim durumumda kaynak ses akışı ac3 DTS ve sadece kopyalama istediğim şey değildi
  • 320k istenen bir hedef bit hızıdır
  • -vn, hedef dosyada video istemediğim anlamına geliyor

2

Sadece bir tahmin:

-ab 192

olmalı

-ab 192k

Bu bir sorun olabilir gibi görünüyor, ama belki ffmpeg düzeltmek için yeterince akıllı.


2
Geçerli yorum ve OP'nin sorusunu değiştirmek için düzenledim, ancak bu hiçbir şeyi değiştirmiyor (en çok, bu bir uyarı üretir).
Jean-Philippe Pellet

2

Avi'ye sarılmış ses, başlamak için mp3 formatında değilse, -acodec mp3ek bir parametre olarak belirtmeniz gerekebilir . Ya da mp3 kodlayıcınız ne olursa olsun (muhtemelen Linux sistemlerinde -acodec libmp3lame). -f mp3Tüm ffmpeg sürümleri hala bu anahtarı desteklemese de, aynı etkiyi, platform agnostik olarak, mp3 formatını "zorla" olarak belirterek de alabilirsiniz . Kilometre Değişebilir.


2

Dönüştürme olmadan ayıklamak için aşağıdakileri çalıştırmak için bir bağlam menüsü girişi - Linux'ta dosya yöneticisi özel eylemi olarak kullanıyorum (videonun hangi ses türünü içerdiğini kontrol ettikten sonra; oggses içeren video örneği ):

bash -c 'ffmpeg -i "$0" -map 0:a -c:a copy "${0%%.*}".ogg' %f 

ffmpeg komutunu temel alır ffmpeg -i INPUT -map 0:a -c:a copy OUTPUT.

Bunu -map 0:1sorunsuz bir şekilde kullandım , ancak @LordNeckbeard tarafından yapılan bir yorumda belirtildiği gibi, " Akışın her zaman ses olması garanti edilmez. Bunun yerine kullanmak belirsizliği önleyecektir."0:1-map 0:a-map 0:1


1
Akışın 0:1her zaman ses olduğu garanti edilmez. -map 0:aBunun yerine kullanmak -map 0:1belirsizliği önleyecektir.
llogan

@LordNeckbeard ~ Bunu dikkate alacağım, teşekkürler.

Kullandığım mediainfoses belirlemek için, ve bunun gibi seçti: -map 0:a:11 saniye ses parçası indeksi, thx: Bir yerde! -c:a copyçok daha hızlı yaptı!
Kova Gücü

1

Orijinal video dosyasının parametrelerini korurken bir video dosyasından ses çıkarmanın daha basit bir yolunu arayanlar için şunları kullanabilirsiniz:

ffmpeg -i <video_file_name.extension> <audio_file_name.extension>

Örneğin;

ffmpeg -i screencap.mov screencap.mp3

video dosyasından bir mp3ses dosyası çıkarır mov.


Basit ve çalışır. Diğer tüm çözümler neden bu kadar karmaşık? +1
Scott Biggs

1
Soru, bunun neden bir silme oyu var ?!
Iulian Onofrei

-1

Kullanım -b:ayerine -abolarak -abartık modası geçmiş, ayrıca giriş dosyası yolunun doğru olduğundan emin olun.

Bir videodan ses çıkarmak için aşağıdaki komut ve onun iyi çalışıyor kullandım.

String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", outputFileAbsolutePath};

Buraya,

  • -y - Sormadan çıktı dosyalarının üzerine yazın.
  • -i- FFmpeg, -iseçenek tarafından belirtilen rasgele sayıda “dosya” girişinden okur
  • -vn - Video kaydını devre dışı bırak
  • -ar - kodlanmışsa ses akışları için örnekleme hızını ayarlar
  • -ac - Ses kanalı sayısını ayarlayın.
  • -b:a - Ses bit hızını ayarlayın
  • -f - biçim

GitHub'daki tam örnek FFmpeg android projem için bunu kontrol et .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.