2014-09-06 20 views
9

Tôi cố gắng để sử dụng lệnh sau đây với việc xây dựng ffmpeg mới nhất để loại bỏ sự im lặng từ file .mp3 tôi:sử dụng FFMPEG với silencedetect để loại bỏ sự im lặng âm thanh

ffmpeg -i SILENCE.mp3 -af silencedetect=n=-50dB:d=1 -y -ab 192k SILENCE_OUT.mp3 

Tuy nhiên, đầu ra sau đây được tạo ra:

ffmpeg version N-66154-g1654ca7 Copyright (c) 2000-2014 the FFmpeg developers 
    built on Sep 5 2014 22:10:38 with gcc 4.8.3 (GCC) 
    configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av 
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab 
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca -- 
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib 
modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw 
b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge 
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en 
able-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis 
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable- 
libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib 
    libavutil  54. 7.100/54. 7.100 
    libavcodec  56. 1.100/56. 1.100 
    libavformat 56. 4.100/56. 4.100 
    libavdevice 56. 0.100/56. 0.100 
    libavfilter  5. 1.100/5. 1.100 
    libswscale  3. 0.100/3. 0.100 
    libswresample 1. 1.100/1. 1.100 
    libpostproc 53. 0.100/53. 0.100 
Input #0, mp3, from 'SILENCE.mp3': 
    Metadata: 
    title   : Snowblind (Featuring Tasha Baxter) 
    artist   : Au5 
    album   : Snowblind (Featuring Tasha Baxter) 
    genre   : Electronica 
    performer  : Au5 
    track   : 1/1 
    date   : 2014 
    album_artist : Au5,Tasha Baxter 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    encoder   : Lavf55.42.100 
    Duration: 00:05:50.80, start: 0.025057, bitrate: 192 kb/s 
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 192 kb/s 
Output #0, mp3, to 'SILENCE_OUT.mp3': 
    Metadata: 
    TIT2   : Snowblind (Featuring Tasha Baxter) 
    TPE1   : Au5 
    TALB   : Snowblind (Featuring Tasha Baxter) 
    TCON   : Electronica 
    TPE3   : Au5 
    TRCK   : 1/1 
    TDRL   : 2014 
    TPE2   : Au5,Tasha Baxter 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    TSSE   : Lavf56.4.100 
    Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s16p, 192 kb/s 
    Metadata: 
     encoder   : Lavc56.1.100 libmp3lame 
Stream mapping: 
    Stream #0:0 -> #0:0 (mp3 (native) -> mp3 (libmp3lame)) 
Press [q] to stop, [?] for help 
[silencedetect @ 0000000004398f40] silence_start: -0.00628118 
[silencedetect @ 0000000004398f40] silence_end: 3.21413 | silence_duration: 3.22 
041 
[silencedetect @ 0000000004398f40] silence_start: 343.844 
[libmp3lame @ 00000000043b2940] Trying to remove 1152 samples, but the queue is 
empty 
size= 8223kB time=00:05:50.79 bitrate= 192.0kbits/s 
video:0kB audio:8222kB subtitle:0kB other streams:0kB global headers:0kB muxing 
overhead: 0.011485% 

Tệp âm thanh được tạo tuy nhiên vẫn có độ dài ban đầu mà không bị tắt tiếng. Xem các hình ảnh sau: http://i.imgur.com/nVxe5lX.png

Mọi trợ giúp đều được đánh giá cao!

CHỈNH SỬA: Được rồi, phát hiện im lặng chỉ phát hiện sự im lặng. Không xóa nó. Tôi sẽ cố gắng đăng một giải pháp cho việc này.

Trả lời

10

phát hiện im lặng ffmpeg chỉ phát hiện sự im lặng. Người ta phải quét đầu ra ffmpeg và cắt tập tin mp3.

Về lý thuyết, điều này sẽ được thực hiện như:

ffmpeg -i INPUT.mp3 -af silencedetect=n=-50dB:d=1 

và giám sát đầu ra dưới hình thức:

[silencedetect @ 0000000004970f80] silence_start: -0.00154195 
[silencedetect @ 0000000004970f80] silence_end: 3.20435 | silence_duration: 3.2059 
... 
[silencedetect @ 0000000004970f80] silence_start: 343.84 

Và, cắt đầu và cuối im lặng:

ffmpeg -i INPUT.mp3 -ss 3.20435 -t (343.84-3.20435) 

Tôi đã viết một chương trình Java nhỏ. Gợi ý:

  • ffmpeg viết thư cho stderr. Điều này có nghĩa, bạn cần sử dụng ProcessBuilder và redirectErrorStream (true).
  • thứ hai, bạn cần trích xuất thông tin silence_start và silence_end.
  • sau đó bạn có thể sử dụng các timestamps để cắt video

mã sau đây có thể hữu ích: Using Java and FFMPEG with silencedetect to remove audio silence

+0

Xin chào lệnh đó dường như không hoạt động vỏ. Dấu ngoặc đơn đang làm gì? '$ echo ffmpeg -i INPUT.mp3 -ss 3.20435 -t (343.84-3.20435)' sản lượng '-bash: lỗi cú pháp gần mã thông báo không mong muốn \' (''. – Chloe

+1

Bạn cần tính toán sự khác biệt và sau đó thay thế biểu thức trong các dấu ngoặc đơn với kết quả – Zahlii

19

Sử dụng bộ lọc silenceremove. Điều này sẽ loại bỏ sự im lặng khỏi bản âm thanh - video sẽ không thoát khỏi video, tức là mọi thứ sẽ không đồng bộ

Đối số của nó hơi khó hiểu.

Một ví dụ

ffmpeg -i input.mp3 -af silenceremove=1:0:-50dB output.mp3 

này loại bỏ sự im lặng

  • ngay từ đầu (được chỉ định bởi đối số đầu tiên 1)
  • với chiều dài tối thiểu không (chỉ định bởi đối số thứ hai 0)
  • im lặng được phân loại là bất cứ điều gì dưới 50 decibel (được chỉ định bởi -50dB).

Tài liệu: FFMPEG silence remove filter

Cũng bất cứ ai tìm kiếm để tìm giá trị đúng để phân loại im lặng như thể muốn nhìn vào bình thường hóa đầu vào của họ âm lượng để 0dB đầu tiên, để làm điều này trong ffmpeg thấy this answer.

Sửa

Như đã chỉ ra bởi @mems, để phát hiện xem các phiên bản của ffmpeg có bộ lọc chạy

ffmpeg -hide_banner -filters | grep silenceremove

nếu bạn có bộ lọc nó sẽ ra cái gì đó như

silenceremove A->A Remove silence

+1

Để biết bộ lọc này có sẵn không: 'ffmpeg -hide_banner -filters | grep silenceremove' sẽ hiển thị' ... silenceremove A-> A Remove silence.' – mems

+5

Xin lưu ý rằng '-f silenceremove' sẽ mã hóa lại các tệp âm thanh của bạn và do đó thay đổi tốc độ bit.Bạn không thể sử dụng '-acodec copy' để giữ chất lượng gốc. – nixda

Các vấn đề liên quan