6月4日 13:47
How to use FFmpeg for audio processing? What are the common audio filters?
FFmpeg provides powerful audio processing capabilities, including audio extraction, conversion, mixing, noise reduction, and various other operations.
Audio Extraction and Conversion
Extract Audio from Video
bash# Extract audio stream (no re-encoding) ffmpeg -i video.mp4 -vn -acodec copy audio.aac # Extract and convert to MP3 ffmpeg -i video.mp4 -vn -acodec libmp3lame -ab 192k audio.mp3 # Extract and convert to WAV ffmpeg -i video.mp4 -vn audio.wav
Audio Format Conversion
bash# MP3 to AAC ffmpeg -i input.mp3 -c:a aac -b:a 128k output.aac # WAV to MP3 ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3 # FLAC to MP3 (lossy compression) ffmpeg -i input.flac -c:a libmp3lame -b:a 320k output.mp3
Audio Parameter Adjustment
Adjust Volume
bash# Increase volume (2x) ffmpeg -i input.mp3 -af "volume=2.0" output.mp3 # Decrease volume (0.5x) ffmpeg -i input.mp3 -af "volume=0.5" output.mp3 # Adjust using decibels ffmpeg -i input.mp3 -af "volume=3dB" output.mp3 # Normalize volume ffmpeg -i input.mp3 -af "loudnorm" output.mp3
Adjust Sample Rate
bash# Convert to 44.1kHz ffmpeg -i input.wav -ar 44100 output.wav # Convert to 48kHz ffmpeg -i input.wav -ar 48000 output.wav # Convert to 16kHz (common for speech recognition) ffmpeg -i input.wav -ar 16000 output.wav
Adjust Channels
bash# Convert to mono ffmpeg -i input.mp3 -ac 1 output.mp3 # Convert to stereo ffmpeg -i input.mp3 -ac 2 output.mp3 # Extract left channel ffmpeg -i input.mp3 -af "pan=mono|c0=c0" output.mp3 # Extract right channel ffmpeg -i input.mp3 -af "pan=mono|c0=c1" output.mp3
Audio Editing
Clip by Time
bash# Start from 10 seconds, clip 30 seconds ffmpeg -i input.mp3 -ss 00:00:10 -t 00:00:30 output.mp3 # Start from 1 minute, clip to 3 minutes ffmpeg -i input.mp3 -ss 00:01:00 -to 00:03:00 output.mp3 # Clip first 60 seconds ffmpeg -i input.mp3 -t 60 output.mp3
Audio Concatenation
bash# Concatenate using concat protocol echo "file 'part1.mp3'" > filelist.txt echo "file 'part2.mp3'" >> filelist.txt echo "file 'part3.mp3'" >> filelist.txt ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp3 # Concatenate using concat filter ffmpeg -i part1.mp3 -i part2.mp3 -i part3.mp3 \ -filter_complex "[0:a][1:a][2:a]concat=n=3:v=0:a=1[outa]" \ -map "[outa]" output.mp3
Audio Effects
Fade In/Out
bash# Fade in for 3 seconds ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3" output.mp3 # Fade out for 3 seconds ffmpeg -i input.mp3 -af "afade=t=out:st=5:d=3" output.mp3 # Fade in and out ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3,afade=t=out:st=7:d=3" output.mp3
Audio Mixing
bash# Mix two audio files ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex "amix=inputs=2:duration=first" output.mp3 # Mix three audio files ffmpeg -i audio1.mp3 -i audio2.mp3 -i audio3.mp3 \ -filter_complex "amix=inputs=3:duration=longest" output.mp3 # Adjust mixing ratio ffmpeg -i audio1.mp3 -i audio2.mp3 \ -filter_complex "[0:a]volume=0.7[a0];[1:a]volume=0.3[a1];[a0][a1]amix=inputs=2" output.mp3
Audio Delay
bash# Delay audio by 500 milliseconds ffmpeg -i input.mp3 -af "adelay=500|500" output.mp3 # Different delay for left and right channels ffmpeg -i input.mp3 -af "adelay=500|1000" output.mp3 # Advance audio (negative delay) ffmpeg -i input.mp3 -af "adelay=-200|-200" output.mp3
Audio Noise Reduction
bash# Remove low frequency noise using highpass filter ffmpeg -i input.mp3 -af "highpass=f=200" output.mp3 # Remove high frequency noise using lowpass filter ffmpeg -i input.mp3 -af "lowpass=f=3000" output.mp3 # Use bandpass filter ffmpeg -i input.mp3 -af "bandpass=f=1000:width_type=h:width=500" output.mp3
Audio Analysis and Processing
Audio Visualization
bash# Generate audio waveform ffmpeg -i input.mp3 -filter_complex "showwavespic=s=640x320" waveform.png # Generate spectrogram ffmpeg -i input.mp3 -lavfi showspectrumpic=s=640x320 spectrum.png # Generate audio video ffmpeg -i input.mp3 -filter_complex "showwaves=s=640x320" output.mp4
View Audio Information
bash# View detailed audio information ffmpeg -i input.mp3 -hide_banner # View audio sample rate, bitrate, etc. ffprobe -i input.mp3 -show_streams -select_streams a # Analyze audio volume ffmpeg -i input.mp3 -af "volumedetect" -f null -
Advanced Audio Processing
Audio Speed Change
bash# Speed up 1.5x ffmpeg -i input.mp3 -filter:a "atempo=1.5" output.mp3 # Slow down 0.75x ffmpeg -i input.mp3 -filter:a "atempo=0.75" output.mp3 # Large speed change (requires multiple atempo) ffmpeg -i input.mp3 -filter:a "atempo=2.0,atempo=2.0" output.mp3
Audio Pitch Change
bash# Increase pitch (semitone) ffmpeg -i input.mp3 -filter:a "asetrate=44100*1.05946" output.mp3 # Decrease pitch (semitone) ffmpeg -i input.mp3 -filter:a "asetrate=44100*0.94387" output.mp4
Audio Echo
bash# Add echo effect ffmpeg -i input.mp3 -af "aecho=0.8:0.9:1000:0.3" output.mp3
Audio Encoding Parameters
Common Audio Encoders
bash# AAC encoding ffmpeg -i input.wav -c:a aac -b:a 128k output.aac # MP3 encoding ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3 # Opus encoding (high quality) ffmpeg -i input.wav -c:a libopus -b:a 128k output.opus # FLAC encoding (lossless) ffmpeg -i input.wav -c:a flac output.flac
Audio Quality Settings
bash# High quality MP3 (320kbps) ffmpeg -i input.wav -c:a libmp3lame -b:a 320k output.mp3 # Medium quality MP3 (192kbps) ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3 # Low quality MP3 (128kbps) ffmpeg -i input.wav -c:a libmp3lame -b:a 128k output.mp3 # VBR encoding (variable bitrate) ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3
When processing audio, it is recommended to use lossless formats (such as WAV, FLAC) for intermediate processing, and finally convert to lossy formats to reduce quality loss.