1、Flash格式像其他格式进行转换
(1)、转换成wmv/asf格式
ffmpeg -i (要转换的flv文件完整路径) -f asf -vcodec (wmv1或wmv2) [-b 视频码率] -acodec mp3
[-ab 音频码率] (输出的asf/wmv文件完整路径)
(2)、转换成mpeg格式
ffmpeg -i (要转换的flv文件完整路径) -f mpeg -vcodec mpeg1video [-b 视频码率] -acodec mp2
[-ab 音频码率] (输出的mpg文件完整路径)
(3)、转换成avi格式
ffmpeg -i (要转换的flv文件完整路径) -f avi -vcodec (msmpeg4或msmpeg4v1或msmpeg4v2) [-b 视频码
率] -acodec mp3 [-ab 音频码率] (输出的avi文件完整路径)
2、ffmpeg的七个技巧
(1)、音频转换
ffmpeg -i my_audio.wav my_audio.mp3-i 后为要转换的音频文件,my_audio.mp3为目的音频文件
(2)、视频转换
ffmpeg -i my_video.mpeg -s 500×500 my_video.flv-i 后为源视频文件, -s 表示设置目标视频文件的
分辨率 my_video.flv为目的视频文件
(3)、从视频中截取图片
ffmpeg -i test.mpg image%d.jpg默认1s截取25张图片,可以通过-r设置每秒截取的图片数量-r fps 设置
帧率,也就是每秒截取图片的数量(默认25)
ffmpeg -i test.mpg -r 1 image%d.jpg这样子每1s截取1张图片还可以设置截取间隔,起止-ss 设定时间
位置,语法:hh:mm:ss[.xxx]-t 时长:限制转码/捕获视频的时间,语法:hh:mm:ss[.xxx]
ffmpeg -i test.mpg -r 25 -ss 00:00:10 -t 00:00:05 images%05d.png在第10秒开始,以每秒截取
25张
图片的速度,截取5秒时长的图片
(4)、从视频中采集音频
ffmpeg -i video.avi -f mp3 audio.mp3-f 强制选择格式
ffmpeg -i video.avi -vn audio.mp3-vn 取消截取视频(也就是只输出音频文件)
(5)、创建截屏视频
ffmpeg -f x11grab -r 25 -s wxga -i :0.0 /tmp/outputFile.mpg0.0 是你X11 server的屏幕
显示号码,和DISPLAY一样样的.
此条命令以每秒25帧的速率来截取wxga屏幕视频,当然这里可以用-s 来设置视频分辨率,输出文件
是/tmp/outputFile.mpg。
(6)、用图片制作视频
ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
将`img001.jpg’, `img002.jpg'这种顺序排列的图片文件转制作为视频
(7)从webcam中截取视频
ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 out.mpg
同时截取音频和视频:
ffmpeg -f oss -i /dev/dsp -f video4linux2 -s 320x240 -i /dev/video0 out.mpg/dev/video0为
视频设备 /dev/dsp为音频设备
[D:\software\MediaCoder\codecs\ffmpeg.exe, -i, d:\test\a.mp4, -ab, 64, -ac, 2, -ar, 22050,
-b, 230, -r, 29.97, -y, d:\test\b.flv]
package pkg; import java.io.File; import java.util.ArrayList; import java.util.List; public class VideoToVoice { public static List<String> L=new ArrayList<String>(); //获取一个文件夹路径dir下所有的子目录地址(子目录不是文件夹形式) public static void listDirectory(File dir) { if (!dir.exists()) { throw new IllegalArgumentException("目录" + dir + "不存在"); } if (!dir.isDirectory()) { throw new IllegalArgumentException(dir + "不是目录"); } File[] files = dir.listFiles();// 返回的是直接子目录的抽象 if (files != null && files.length > 0) { for (File file1 : files) { if (file1.isDirectory()) { listDirectory(file1); } else { L.add(file1.toString()); } } } } private static boolean processMP3(String path) { String voiceName = path.substring(path.lastIndexOf("\\") + 1, path.lastIndexOf("\\") + 3); System.out.println(voiceName); switch (voiceName) { case "愤怒": ffmpeg_process(voiceName, path); break; case "伤心": ffmpeg_process(voiceName, path); break; case "惊讶": ffmpeg_process(voiceName, path); break; case "快乐": ffmpeg_process(voiceName, path); break; case "恐惧": ffmpeg_process(voiceName, path); break; case "厌恶": ffmpeg_process(voiceName, path); break; case "自然": ffmpeg_process(voiceName, path); break; default: break; } return true; } public static boolean ffmpeg_process(String Name, String path) { String voiceNameNum = path.substring(path.lastIndexOf("\\") + 1, path.indexOf(".")); String voiceName = path.substring(path.lastIndexOf("\\") + 1, path.lastIndexOf("\\") +3); String number = voiceNameNum.replaceAll(voiceName, ""); System.out.println(number); int num = Integer.parseInt(number); System.out.println(num); List<String> commend = new java.util.ArrayList<String>(); commend.add("ffmpeg.exe"); commend.add("-i"); commend.add(path); commend.add("-vn"); commend.add("D:\\迅雷下载\\多模态资源\\视频中截取的音频" +"\\"+ Name + "\\" + Name + num + ".mp3"); System.out.println(commend); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public static void main(String[] args) { listDirectory(new File("D:\\迅雷下载\\多模态资源\\人脸表情")); System.out.println(L.size()); for (int i = 0; i < L.size(); i++) { System.out.println(L.get(i)); processMP3(L.get(i)); } // processMP3("D:\\迅雷下载\\多模态资源\\人脸表情\\伤心\\伤心10.avi"); } }