热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpeg视频Mp4分离语音与图片--Java使用

ffmpeg视频Mp4分离语音与图片一、目标Mp4格式视频中分离语音与图片。二、ffmpeg介绍ffmpeg是一款专业视频、音频、图像处理软件。它提供了录制、转换以及流化音视频的

ffmpeg视频Mp4分离语音与图片

一、目标

Mp4格式视频中分离语音与图片。

二、ffmpeg介绍

ffmpeg是一款专业视频、音频、图像处理软件。它提供了录制、转换以及流化音视频的完整解决方案。是基于C++实现的,使用时需注意不同的系统环境。

三、ffmpeg下载

官网http://ffmpeg.org/ 请自行下载适合各自环境的执行文件。

下载的文件为ffmpeg-20150415-git-fbdaebb-win32-static.zip

解压目录结构:


Bin目录结构:

 

上述ffmpeg.exe是个关键文件

四、本机环境介绍

Win7,32位

五、Mp4格式分离图片

直接上代码:

packagenet.sf.ffmpeg_java.example;

importjava.io.InputStream;

importjava.util.List;

publicclass PhotoSeparate {

         public static void main(String[] args){

                   // 视频文件

                   String videoRealPath ="D:\\mp4\\test.mp4";

                   // 截图的路径(输出路径)

                   String imageRealPath ="D:\\ffmpeg\\output\\test.jpg";

                   List commend =new java.util.ArrayList();

                   commend.add("D:\\ffmpeg-20150415-git-fbdaebb-win32-static\\bin\\ffmpeg.exe");

                   commend.add("-i");

                   commend.add(videoRealPath);

                   commend.add("-ss");

                   commend.add("3");

                   commend.add("-vframes");

                   commend.add("1");

                   commend.add("-r");

                   commend.add("1");

                   commend.add("-ac");

                   commend.add("1");

                   commend.add("-r");

                   commend.add("1");

                   commend.add("-ac");

                   commend.add("1");

                   commend.add("-ab");

                   commend.add("2");

                   commend.add("-s");

                   commend.add("350*240");

                   commend.add("-f");

                   commend.add("image2");

                   commend.add(imageRealPath);

                   try {

                            ProcessBuilderbuilder = new ProcessBuilder();

                            builder.command(commend);

                            builder.redirectErrorStream(true);

                            System.out.println("视频截图开始...");

                            Process process =builder.start();                     

                            System.out.println("视频截图完成...");

                   } catch (Exception e) {

                            e.printStackTrace();

                            System.out.println("视频截图失败!");

                   }

         }

}

 

六、Mp4格式分离语音

直接上代码:

packagenet.sf.ffmpeg_java.example;

import java.io.InputStream;

import java.util.List;

/**

 * 视频语音分离

 */

publicclass VoiceSeparate {

         public static void main(String[] args){

                   // 视频文件

                   String videoRealPath ="D:\\mp4\\test.mp4";

                   // 截图的路径(输出路径)

                   String voiceRealPath ="D:\\ffmpeg\\output\\test.mp3";                  

                   List commend =new java.util.ArrayList();

commend.add("D:\\ffmpeg-20150415-git-fbdaebb-win32-static\\bin\\ffmpeg.exe");         commend.add("D:\\ffmpeg-20150415-git-fbdaebb-win32-static\\bin\\ffmpeg.exe");

                   commend.add("-i");

                   commend.add(videoRealPath);

                   commend.add("-vn");

                   commend.add("-ar");

                   commend.add("44100");

                   commend.add("-ac");

                   commend.add("2");

                   commend.add("-ab");

                   commend.add("192");

                   commend.add("-f");

                   commend.add("mp3");

                   commend.add(voiceRealPath);                

                   try {

                            ProcessBuilderbuilder = new ProcessBuilder();

                            builder.command(commend);

                            builder.redirectErrorStream(true);

                            System.out.println("视频语音分离开始...");

                            Process process =builder.start();

                            process.waitFor();//等待进程执行结束

                            System.out.println("视频语音分离完成...");

                   } catch (Exception e) {

                            e.printStackTrace();

                            System.out.println("视频语音分离失败!");

                   }

         }

}

七、Ffmpe命令摘录

1,获取视频的信息

ffmpeg -i video.avi

2,将图片序列分解合成视频

ffmpeg -i src.mpg image%d.jpg

   ffmpeg -f image2 -iimage%d.jpg dst.mpg  

合成注意事项:

如果图片序列是3位数,用image%03d

如果jpg文件名字是乱的用,下面命令规整一下

x=1; for i in *jpg; do counter=$(printf %03d $x); mv "$i" image"$counter".jpg; x=$(($x+1)); done

3, 从视频中分离 video, audio 片断

只要音频
ffmpeg -i src.mp4  -ss 00:00:10 -t 00:00:5  -vn -acodec copy dst.mp4  ( -vn 表示 "video no" , -ss00:00:10 -t 00:00:5 表示开始时间为10秒,长度5秒)

只要视频

ffmpeg -i src.mp4  -ss 00:00:10 -t 00:00:5  -an -vcodec copy dst.mp4  ( -an 表示 "audio no" >)
4.从视频抽出声音,并存为Mp3
   ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3sound.mp3
( Ubuntu 下可能转化失败,现运行sudo apt-get install ffmpeglibavcodec-extra-53)
5 合成视频和音频
   ffmpeg -i son.wav -i video_origine.avi video_finale.mpg (音频也可以是 mp3 , 如果音频比视频长,用KMP播放文件, 视频播完后停最后一画面,音频继续) 

其他
为视频重新编码以适合在iPod/iPhone上播放
   ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodecmpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180-title X final_video.mp4
为视频重新编码以适合在PSP上播放
   ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar24000 -acodec aac final_video.mp4
将.avi转成gif动画(未压缩)
   ffmpeg -i video_origine.avi gif_anime.gif
将.avi转成dv
   ffmpeg -i video_origine.avi -target pal-dv video_finale.dv
将.avi压缩成divx
   ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

八、总结

ffmpeg是一款强大的视频、音频、图片处理工具。从代码中也可看出,熟悉ffmpeg命令才能更好使用ffmpeg的强大功能。

 


推荐阅读
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在多年使用Java 8进行新应用开发和现有应用迁移的过程中,我总结了一些非常实用的技术技巧。虽然我不赞同“最佳实践”这一术语,因为它可能暗示了通用的解决方案,但这些技巧在实际项目中确实能够显著提升开发效率和代码质量。本文将深入解析并探讨这四大高级技巧的具体应用,帮助开发者更好地利用Java 8的强大功能。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
author-avatar
骑着母猪去相亲
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有