本文概不介绍相关安装配置,详情请入官方或者其他大佬博客,此处做出推荐:
https://ffmpeg.org/ FFmpeg官网
https://ffmpeg.github.net.cn/developer.html FFmpeg中文文档
https://blog.csdn.net/m0_47449768/article/details/130102406 ffmpeg安装教程(windows版)
https://blog.csdn.net/Number_oneEngineer/article/details/108848206 ffmpeg安装教程(Linux版)
要学会一个人在深夜秉灯独行…
FFmpeg(Fast Forward MPEG)是一个开源的多媒体处理工具集,它包含了音频和视频处理库、编码器、解码器、转码器等多种工具。以下是FFmpeg的主要功能介绍:
FFmpeg的强大功能使其成为许多多媒体应用和服务的核心组件,例如视频编辑软件、流媒体服务器、嵌入式设备等。由于其广泛的支持和社区贡献,FFmpeg已经成为处理多媒体数据的重要工具之一。
音视频编解码是指将音频和视频信号进行压缩和解压缩的过程,以便更有效地存储和传输这些数据。编码是指将原始的音视频数据转换为压缩格式,而解码是指将压缩格式的音视频数据还原为原始格式。FFmpeg作为一个多媒体处理工具,提供了丰富的音视频编解码功能,支持多种编码器和解码器。以下是音视频编解码的一些关键概念和FFmpeg的相关用法:
# 使用AAC编码器将WAV文件转为AAC格式
ffmpeg -i input.wav -c:a aac output.aac
# 使用AAC解码器将AAC文件解码为WAV格式
ffmpeg -i input.aac -c:a pcm_s16le output.wav
# 使用H.264编码器将原始视频转为H.264格式
ffmpeg -i input.mp4 -c:v libx264 output.mp4
# 使用H.264解码器将H.264视频解码为原始格式
ffmpeg -i input.h264 -c:v rawvideo output.yuv
# 使用x264编码器,设置视频比特率
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k output.mp4
# 处理多路音频流
ffmpeg -i input1.wav -i input2.wav -filter_complex amix=inputs=2:duration=longest output.wav
总的来说,FFmpeg作为一套全面的多媒体处理工具,提供了丰富的音视频编解码功能,能够满足各种多媒体处理的需求,包括格式转换、流媒体处理、编辑等。用户可以根据自己的需求选择不同的编码器和解码器,并通过合适的参数进行配置。
格式转换是指将一个多媒体文件从一种格式转换为另一种格式的过程。在多媒体处理中,格式转换通常涉及音频、视频、图像等各种媒体类型。FFmpeg广泛用于格式转换操作。以下是一些关键的格式转换方面的介绍和FFmpeg的应用:
从 WAV 到 MP3:
ffmpeg -i input.wav -c:a libmp3lame output.mp3
从 MP3 到 WAV:
ffmpeg -i input.mp3 -c:a pcm_s16le output.wav
从 MP4 到 GIF:
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif
从 AVI 到 MP4:
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
从 PNG 到 JPEG:
ffmpeg -i input.png output.jpg
从 JPEG 到 PNG:
ffmpeg -i input.jpg output.png
合并音频和视频到一个文件:
ffmpeg -i input_video.mp4 -i input_audio.mp3 -c:v copy -c:a aac output_combined.mp4
拼接多个视频文件:
ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output_combined.mp4
调整视频尺寸:
ffmpeg -i input.mp4 -vf scale=640:480 output_resized.mp4
调整音频采样率:
ffmpeg -i input.wav -ar 44100 output_44kHz.wav
将 RTSP 流转换为 RTMP 流:
ffmpeg -rtsp_transport tcp -i rtsp://input_stream -c copy -f flv rtmp://output_stream
将 SRT 字幕转换为 VTT 字幕:
ffmpeg -i input.srt output.vtt
流媒体处理是一种通过网络实时传输音频和视频数据的技术,允许用户在数据传输的同时观看或听取内容,而不需要等待完整的文件下载。FFmpeg是一个强大的工具,广泛用于流媒体处理。以下是流媒体处理的主要方面以及FFmpeg在这些方面的应用:
# 从摄像头捕获视频
ffmpeg -f v4l2 -i /dev/video0 output.mp4
# 从麦克风捕获音频
ffmpeg -f alsa -i hw:0 output.wav
# 从URL捕获网络流
ffmpeg -i http://example.com/stream.m3u8 output.mp4
# 将输入流转码为H.264视频和AAC音频
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
# 推送到RTMP服务器
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://example.com/live/stream
# 实时捕获摄像头并推送到RTMP服务器
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -c:a aac -f flv rtmp://example.com/live/stream
# 在视频上添加水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex overlay=10:10 output.mp4
# 使用多个输出流实现自适应比特率
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -c:a aac -b:a 128k -f hls -hls_time 4 -hls_playlist_type vod output.m3u8
上述示例展示了一些FFmpeg在流媒体处理中的常见用法。这些功能使FFmpeg成为流媒体处理的强大工具,适用于多种场景,包括在线直播、视频会议、实时通信等。
图像处理是对图像进行各种操作和变换的过程,旨在改善图像的质量、提取信息、增强特定特征或实现其他特定目标。FFmpeg不是专门设计用于图像处理的工具,但它仍然提供了一些图像处理的功能,尤其是在处理视频时。以下是一些常见的图像处理任务和FFmpeg的应用:
提取所有视频帧:
ffmpeg -i input_video.mp4 -vf "select=eq(n\,0)" -vframes 1 output_frame.png
提取特定时间的视频帧:
ffmpeg -i input_video.mp4 -ss 00:01:30 -vframes 1 output_frame.png
在视频中添加静态水印:
ffmpeg -i input_video.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermarked.mp4
在视频中添加动态水印(GIF):
ffmpeg -i input_video.mp4 -ignore_loop 0 -i watermark.gif -filter_complex "overlay=10:10" output_watermarked.mp4
将图像顺时针旋转90度:
ffmpeg -i input_image.jpg -vf "transpose=1" output_rotated.jpg
裁剪图像:
ffmpeg -i input_image.jpg -vf "crop=w:h:x:y" output_cropped.jpg
调整图像尺寸:
ffmpeg -i input_image.jpg -vf "scale=width:height" output_resized.jpg
在视频上应用黑白滤镜:
ffmpeg -i input_video.mp4 -vf "hue=s=0" -c:a copy output_black_and_white.mp4
实时处理视频并显示在窗口中:
ffplay -vf "scale=640:480" input_video.mp4
将图像序列合成视频:
ffmpeg -framerate 30 -i frame_%04d.png -c:v libx264 -pix_fmt yuv420p output_video.mp4
请注意,FFmpeg的主要用途是处理音视频,因此在某些图像处理任务上,可能有更适合的专用工具。然而,FFmpeg在处理视频时提供了一些有用的图像处理功能,特别是当图像与视频密切相关时。
剪辑和编辑是指对音频和视频进行截取、拼接、修剪、合并等操作,以达到用户期望的效果。FFmpeg也可以用于进行各种剪辑和编辑任务。以下是一些常见的剪辑和编辑任务以及FFmpeg的应用:
截取视频片段:
ffmpeg -i input_video.mp4 -ss 00:00:30 -t 00:00:10 -c:v copy -c:a copy output_clip.mp4
将多个视频合并:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex concat=n=2:v=1:a=1 -c:v libx264 -c:a aac output_combined.mp4
分离音频和视频:
ffmpeg -i input_video.mp4 -c:v copy -an output_video.mp4 # 提取视频
ffmpeg -i input_video.mp4 -c:a copy -vn output_audio.mp3 # 提取音频
截取音频片段:
ffmpeg -i input_audio.mp3 -ss 00:01:00 -t 00:00:30 -c:a copy output_clip.mp3
将多个音频合并:
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex concat=n=2:v=0:a=1 -c:a aac output_combined.mp3
截取并合并音视频:
ffmpeg -i input_video.mp4 -i input_audio.mp3 -ss 00:00:30 -t 00:01:00 -c:v copy -c:a copy output_combined.mp4
使用交叉淡入淡出效果合并视频:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]fade=t=out:st=5:d=1[v0];[1:v]fade=t=in:st=0:d=1[v1];[v0][v1]concat=n=2:v=1:a=0" -c:v libx264 -c:a aac output_transition.mp4
在视频中添加SRT字幕:
ffmpeg -i input_video.mp4 -vf "subtitles=subtitles.srt" output_video_with_subtitles.mp4
将视频速度减半:
ffmpeg -i input_video.mp4 -vf "setpts=2.0*PTS" -an output_slow.mp4
将音频提高一个音调:
ffmpeg -i input_audio.mp3 -af "asetrate=2*44100,atempo=0.5" output_high_pitch.mp3
FFmpeg的命令行选项非常强大,可以进行高级的多媒体处理操作。用户可以根据自己的需求选择合适的命令,对音频和视频进行定制化的剪辑和编辑。
字幕处理是指在视频中添加、编辑或移除字幕(Subtitles)。字幕可以包含对话、场景描述、翻译等信息,提供更好的观看体验。FFmpeg支持对字幕进行各种操作,包括添加、合并、转换格式等。以下是一些常见的字幕处理任务以及FFmpeg的应用:
在视频上添加SRT字幕:
ffmpeg -i input_video.mp4 -vf "subtitles=subtitles.srt" output_video_with_subtitles.mp4
在视频上添加ASS字幕:
ffmpeg -i input_video.mp4 -vf "ass=subtitles.ass" output_video_with_ass_subtitles.mp4
合并SRT和ASS字幕:
ffmpeg -i input_video.mp4 -vf "subtitles=subtitles.srt:force_style='FontName=Arial,BorderStyle=3'" -vf "ass=subtitles.ass" output_video_with_merged_subtitles.mp4
从SRT转换为ASS:
ffmpeg -i input_subtitles.srt output_subtitles.ass
从ASS转换为SRT:
ffmpeg -i input_subtitles.ass output_subtitles.srt
从视频中提取SRT字幕:
ffmpeg -i input_video.mp4 -map 0:s:0 output_subtitles.srt
在视频上添加自定义样式的字幕:
ffmpeg -i input_video.mp4 -vf "subtitles=subtitles.srt:force_style='FontName=Arial,FontSize=24,BorderStyle=3'" output_video_with_styled_subtitles.mp4
延迟字幕显示:
ffmpeg -i input_video.mp4 -vf "subtitles=subtitles.srt:force_style='Delay=2000'" output_video_with_delayed_subtitles.mp4
从视频中删除所有字幕流:
ffmpeg -i input_video.mp4 -c copy -map 0 -map -0:s output_video_without_subtitles.mp4
音频处理是对音频数据进行各种操作和变换的过程,旨在改善音频质量、提取特定特征、进行混音等,FFmpeg也提供了许多音频处理的功能。以下是一些常见的音频处理任务以及FFmpeg的应用:
将WAV格式转为MP3:
ffmpeg -i input.wav -c:a libmp3lame output.mp3
将MP3格式转为WAV:
ffmpeg -i input.mp3 -c:a pcm_s16le output.wav
截取音频片段:
ffmpeg -i input_audio.mp3 -ss 00:01:00 -t 00:00:30 -c:a copy output_clip.mp3
将多个音频文件合并:
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex concat=n=2:v=0:a=1 -c:a aac output_combined.mp3
查看音频文件信息:
ffmpeg -i input_audio.mp3
将背景音乐混入语音:
ffmpeg -i input_speech.wav -i input_background.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 output_mix.mp3
将音频速度提高一倍:
ffmpeg -i input_audio.mp3 -filter:a "atempo=2.0" output_high_speed.mp3
将音频音调提高一个半音:
ffmpeg -i input_audio.mp3 -filter:a "asetrate=44100*1.05946" output_high_pitch.mp3
使用ANR滤波器进行降噪:
ffmpeg -i input_noisy_audio.wav -af "anlmdn=filter_type=1:denoise_strength=0.01" output_clean_audio.wav
从视频中提取音频并转换格式:
ffmpeg -i input_video.mp4 -vn -c:a aac output_audio.aac
FFmpeg支持多种音频编码和滤镜,用户可以根据需要进行不同的音频处理操作。命令行选项提供了丰富的功能,可以实现高级的音频处理任务。
实时视频处理是指在视频流传输过程中对视频进行即时处理和操作。FFmpeg可以用于实时视频处理,包括从摄像头捕获、实时编码和解码、添加滤镜效果等。以下是一些常见的实时视频处理任务以及FFmpeg的应用:
从摄像头捕获视频:
ffmpeg -f v4l2 -i /dev/video0 -vf "scale=640:480" -c:v libx264 -f mpegts udp://127.0.0.1:1234
上述命令从名为 /dev/video0
的摄像头捕获视频,调整分辨率为 640x480,使用 H.264 编码,并通过 UDP 协议实时传输到地址 udp://127.0.0.1:1234
。
实时从摄像头捕获并在本地显示:
ffmpeg -f v4l2 -i /dev/video0 -vf "scale=640:480" -c:v libx264 -an -f mpegts udp://127.0.0.1:1234
上述命令从摄像头捕获视频,使用 H.264 编码,并通过 UDP 协议实时传输到地址 udp://127.0.0.1:1234
,但在此例中不包含音频,因为 -an
表示禁用音频流。
实时从网络流接收并在窗口中显示:
ffplay -i udp://127.0.0.1:1234
上述命令使用 ffplay
实时播放通过 UDP 协议接收到的视频流。
在实时视频中添加水印并显示:
ffmpeg -f v4l2 -i /dev/video0 -vf "movie=watermark.png [watermark]; [in][watermark] overlay=W-w-10:H-h-10 [out]" -c:v libx264 -an -f mpegts udp://127.0.0.1:1234
上述命令从摄像头捕获视频,通过添加水印,并使用 H.264 编码,通过 UDP 协议实时传输到地址 udp://127.0.0.1:1234
。
从摄像头捕获视频,添加水印并混合音频,实时播放:
ffmpeg -f v4l2 -i /dev/video0 -i audio_input.wav -vf "movie=watermark.png [watermark]; [in][watermark] overlay=W-w-10:H-h-10 [out]" -c:v libx264 -c:a aac -f mpegts udp://127.0.0.1:1234 | ffplay -
上述命令从摄像头捕获视频,添加水印并混合音频,通过 H.264 编码和 AAC 编码,实时传输到地址 udp://127.0.0.1:1234
并通过 ffplay
实时播放。
FFmpeg提供了丰富的滤镜和效果,可用于在视频处理过程中进行各种操作,例如调整亮度、对比度、添加水印、旋转等。这些滤镜和效果可以通过 -vf
(视频滤镜)和 -af
(音频滤镜)选项来指定。以下是一些常见的滤镜和效果以及它们的应用:
亮度和对比度调整:
增加亮度和对比度:
ffmpeg -i input.mp4 -vf "eq=brightness=0.2:contrast=1.5" output.mp4
色调、饱和度和亮度调整:
调整色调、饱和度和亮度:
ffmpeg -i input.mp4 -vf "hue=s=0.5:saturation=1.5:lightness=1.2" output.mp4
水印添加:
在视频中添加静态水印:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
在视频中添加动态水印(GIF):
ffmpeg -i input.mp4 -ignore_loop 0 -i watermark.gif -filter_complex "overlay=10:10" output.mp4
旋转视频:
顺时针旋转90度:
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
视频剪裁:
剪裁视频:
ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4
添加字幕:
在视频上添加SRT字幕:
ffmpeg -i input.mp4 -vf "subtitles=subtitles.srt" output.mp4
音频音调调整:
提高音频音调一个半音:
ffmpeg -i input.mp3 -af "asetrate=44100*1.05946" output_high_pitch.mp3
音频混音:
将两个音频混合:
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 output_mix.mp3
音频降噪:
使用ANR滤波器进行降噪:
ffmpeg -i input_noisy_audio.wav -af "anlmdn=filter_type=1:denoise_strength=0.01" output_clean_audio.wav
这些示例涵盖了一些常见的视频和音频滤镜和效果,但并不限于这些。FFmpeg支持许多滤镜和效果,用户可以根据需要选择合适的滤镜和参数。具体的滤镜和效果选项的详细信息可以查阅FFmpeg的文档。