下载的视频格式不对,需将视频转码为H.264/AAC的MP4格式
使用 ffmpeg 对视频进行转码
ffmpeg可以对视频进行转码、加水印等操作,还是挺强大的
代码如下
public static void transcodeToMP4(String inputPath, String outputPath) throws IOException, InterruptedException {
// FFmpeg命令:将视频转码为H.264/AAC的MP4格式
String[] command = {
ffmpegEXE,
"-i", inputPath,
"-c:v", "libx264", // 视频编码器
"-preset", "fast", // 编码速度与压缩率平衡
"-crf", "23", // 质量参数(18-28,值越小质量越高)
"-c:a", "aac", // 音频编码器
"-b:a", "128k", // 音频比特率
"-movflags", "+faststart", // 使视频支持流式播放
"-y", // 覆盖输出文件
outputPath
};
ProcessBuilder pb = new ProcessBuilder(command);
pb.inheritIO(); // 继承当前进程的IO,方便查看输出
Process process = pb.start();
process.waitFor();
}
ffmpegEXE:下载的ffmpeg的可执行文件exe的全路径
FFmpeg 是一个功能极其强大的开源多媒体处理工具,几乎可以处理所有与音视频相关的任务。以下是它能做的核心功能分类,附典型命令示例:
1. 视频处理
功能 | 命令示例(经典场景) |
---|---|
格式转换 | ffmpeg -i input.avi output.mp4 |
视频压缩 | ffmpeg -i input.mp4 -crf 23 compressed.mp4 (CRF值越小质量越高) |
提取所有帧 | ffmpeg -i input.mp4 frame_%04d.png |
调整分辨率 | ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4 |
裁剪视频区域 | ffmpeg -i input.mp4 -vf "crop=w=800:h=600:x=100:y=50" output.mp4 |
加速/减速视频 | ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" 2x_speed.mp4 (0.5倍速) |
去除水印 | ffmpeg -i input.mp4 -vf "delogo=x=100:y=50:w=200:h=100" clean.mp4 |
视频反交错 | ffmpeg -i interlaced.mp4 -vf yadif deinterlaced.mp4 |
2. 音频处理
功能 | 命令示例 |
---|---|
提取音频 | ffmpeg -i video.mp4 -vn -c:a libmp3lame audio.mp3 |
合并音视频 | ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac output.mp4 |
音频降噪 | ffmpeg -i noisy.mp3 -af "afftdn=nf=-20dB" clean.mp3 |
切割音频片段 | ffmpeg -i song.mp3 -ss 00:01:30 -to 00:02:30 clip.mp3 |
转换采样率 | ffmpeg -i input.wav -ar 44100 output.wav |
3. 直播与流媒体
功能 | 命令示例 |
---|---|
RTMP推流 | ffmpeg -i input.mp4 -c:v libx264 -f flv rtmp://server/live/stream_key |
HLS切片 | ffmpeg -i input.mp4 -c:v h264 -hls_time 10 -hls_list_size 0 playlist.m3u8 |
拉取直播流保存 | ffmpeg -i http://live.server/stream.m3u8 -c copy output.mp4 |
RTSP转RTMP | ffmpeg -i rtsp://cam_ip/live -c:v copy -c:a aac -f flv rtmp://server/stream |
4. 高级特效
功能 | 命令示例 |
---|---|
画中画 | ffmpeg -i main.mp4 -i pip.mp4 -filter_complex "[1]scale=320:-1[small];[0][small]overlay=x=10:y=10" output.mp4 |
绿幕抠像 | ffmpeg -i green_screen.mp4 -vf "chromakey=0x00FF00:0.1" output.mp4 |
添加字幕 | ffmpeg -i video.mp4 -vf "subtitles=sub.srt" output.mp4 |
生成动态缩略图 | ffmpeg -i video.mp4 -vf "fps=1/10,scale=320:-1" thumb_%03d.jpg |
5. 设备采集
功能 | 命令示例(不同系统) |
---|---|
录屏(Linux) | ffmpeg -f x11grab -s 1920x1080 -i :0.0 screen.mp4 |
录屏(macOS) | ffmpeg -f avfoundation -i "1:0" screen.mp4 |
录屏(Windows) | ffmpeg -f gdigrab -i desktop screen.mp4 |
摄像头录制 | ffmpeg -f v4l2 -i /dev/video0 camera.mp4 |
6. 元数据操作
功能 | 命令示例 |
---|---|
查看媒体信息 | ffmpeg -i input.mp4 |
修改元数据 | ffmpeg -i input.mp4 -metadata title="New Title" output.mp4 |
删除元数据 | ffmpeg -i input.mp4 -map_metadata -1 clean.mp4 |