# AndroidFFmpeg **Repository Path**: nissan/AndroidFFmpeg ## Basic Information - **Project Name**: AndroidFFmpeg - **Description**: study Android and FFmpeg - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-02 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AndroidFFmpeg #### 介绍 study Android and FFmpeg #### 编译教程 1. 使用`ndk`编译 1. [centos7使用ndk编译lame](https://blog.csdn.net/ice_bear221/article/details/128546922) 2. [centos使用ndk编译fdk-acc-2.0.2](https://blog.csdn.net/ice_bear221/article/details/128547846) 3. [centos7使用ndk编译x264](https://blog.csdn.net/ice_bear221/article/details/128550815) 4. [centos7使用ndk编译FFmpeg](https://blog.csdn.net/ice_bear221/article/details/128555241) 2. 用于`windows`命令行 1. [windows使用MSYS2编译FFmpeg](https://blog.csdn.net/ice_bear221/article/details/128515239) 2. [Linux编译FFmpeg](https://blog.csdn.net/ice_bear221/article/details/128515636) #### Android项目 1. [Android使用lame将PCM文件转码为MP3文件](https://blog.csdn.net/ice_bear221/article/details/128568087) 2. [Android使用FFmpeg](https://blog.csdn.net/ice_bear221/article/details/128556581) #### FFmpeg命令行使用 1. ffprobe 1. 查看一个音频文件 `ffprobe song.mp3` 2. 查看一个视频文件 `ffprobe movie.mp4` 3. 查看视频文件的封装信息 `ffprobe -show_format movie.mp4` 4. 格式化查看流信息 `ffprobe -print_format json -show_streams movie.mp4` 5. 显示帧信息 `ffprobe -show_frame movie.mp4` 6. 查看包信息 `ffprobe -show_packets movie.mp4` 2. ffplay 1. 播放音频文件 `ffplay song.mp3` 2. 播放视频文件 `ffplay movie.mp4` 3. 指定音频流或者视频流 1. `ffplay movie.mp4 -ast 1` 2. `ffplay movie.mp4 -vst 1` 4. 播放音频pcm文件 1. `ffplay song.pcm -f s16le -channels 2 -ar 44100` 5. 播放YUV420P格式的视频帧 1. `ffplay -f rawvideo -pixel_format yuv420p -s 480*480 movie.yuv` 6. 显示YUV420P格式图片 1. `ffplay -f rawvideo -pixel_format yuv420p -s 480*480 pic.yuv` 7. 显示RGB格式的图像 1. `ffplay -f rawvideo -pixel_format rgb24 -s 480*480 pic.rgb` 8. 音视频同步,音频、视频、外部时钟为基准 1. `ffplay movie.mp4 -sync audio` 2. `ffplay movie.mp4 -sync video` 3. `ffplay movie.mp4 -sync ext` 3. ffmpeg 1. 通用参数 -f fmt:指定格式(音频或者视频格式)。 -i filename:指定输入文件名,在Linux下当然也能指定:0.0(屏幕录制)或摄像头。 -y:覆盖已有文件。 -t duration:指定时长。 -fs limit_size:设置文件大小的上限。 -ss time_off:从指定的时间(单位为秒)开始,也支持[-]hh:mm:ss[.xxx]的格式。 -re:代表按照帧率发送,尤其在作为推流工具的时候一定要加入该参数,否则ffmpeg会按照最高速率向流媒体服务器不停地发送数据。 -map:指定输出文件的流映射关系。例如:“-map 1:0-map 1:1”要求将第二个输入文件的第一个流和第二个流写入输出文件。如果没有-map选项,则ffmpeg采用默认的映射关系。 2. 视频参数 -b:指定比特率(bit/s),ffmpeg是自动使用VBR的,若指定了该参数则使用平均比特率。 -bitexact:使用标准比特率。 -vb:指定视频比特率(bits/s)。 -r rate:帧速率(fps)。 -s size:指定分辨率(320×240)。 -aspect aspect:设置视频长宽比(4:3,16:9或1.3333,1.7777)。 -croptop size:设置顶部切除尺寸(in pixels)。 -cropbottom size:设置底部切除尺寸(in pixels)。 -cropleft size:设置左切除尺寸(in pixels)。 -cropright size:设置右切除尺寸(in pixels)。 -padtop size:设置顶部补齐尺寸(in pixels)。 -padbottom size:底补齐(in pixels)。 -padleft size:左补齐(in pixels)。 -padright size:右补齐(in pixels)。 -padcolor color:补齐带颜色(000000-FFFFFF)。 -vn:取消视频的输出。 -vcodec codec:强制使用codec编解码方式('copy'代表不进行重新编码)。 3. 音频参数 -ab:设置比特率(单位为bit/s,老版的单位可能是Kbit/s),对于MP3格式,若要听到较高品质的声音则建议设置为160Kbit/s(单声道则设置为80Kbit/s)以上。 -aq quality:设置音频质量(指定编码)。 -ar rate:设置音频采样率(单位为Hz)。 -ac channels:设置声道数,1就是单声道,2就是立体声。 -an:取消音频轨。 -acodec codec:指定音频编码('copy'代表不做音频转码,直接复制)。 -vol volume:设置录制音量大小(默认为256)<百分比>。 4. 命令 1. 列出ffmpeg支持的所有格式 1. `ffmpeg -formats` 2. 剪切一段媒体文件 1. `ffmpeg -i input.mp4 -ss 00:00:50.0 -codec copy -t 20 output.mp4` 3. 切割为多个文件 1. `ffmpeg -i input.mp4 -t 00:00:50 -c copy small-1.mp4 -ss 00:00:50 -codec copy small-2.mp4` 4. 提取一个视频文件中的音频文件 1. `ffmpeg -i input.mp4 -vn -acodec copy output.m4a` 5. 将一个视频文件中的音频静音,只保留视频 1. `ffmpeg -i input.mp4 -an -vcodec copy output.mp4` 6. 从MP4文件中抽取视频流导出为裸H264数据 1. `ffmpeg -i input.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb output.h264` 7. 使用AAC音频数据和H264的视频生成MP4文件 1. `ffmpeg -i test.aac -i test.h264 -acodec copy -bsf:a aac_adtstoasc -vcodec copy -f mp4 output.mp4` 8. 对音频文件的编码格式做转换 1. `ffmpeg -i input.wav -acodec libfdk_aac output.aac` 9. 从WAV音频文件中导出PCM裸数据 1. `ffmpeg -i input.wav -acodec pcm_s16le -f s16le output.pcm` 10. 重新编码视频文件,复制音频流,并封装到MP4格式的文件中 1. `ffmpeg -i input.flv -vcodec libx264 -acodec copy output.mp4` 11. 将一个MP4格式的视频转换成GIF格式的动图 1. `ffmpeg -i input.mp4 -vf scale=100:-1 -t 5 -r 10 image.gif` 12. 将一个视频的部分画面生成图片 1. `ffmpeg -i input.mp4 -r 0.25 frame_%04d.png` 13. 使用一组图片组成一个GIF 1. `ffmpeg -i frame_%04d.png -r 5 output.gif` 14. 使用音频效果器,改变一个音频媒体文件中的音量 1. `ffmpeg -i input.wav -af 'volume=0.5' output.wav` 15. 使用淡入效果器,处理音频前5秒 1. `ffmpeg -i input.wav -filter_complex afade=t=in:ss=0:d=5 output.wav` 16. 使用淡出效果器 1. `ffmpeg -i input.wav -filter_complex afade=t=out:st=200:d=5 output.wav` 17. 合并两路声音 1. `ffmpeg -i vocal.wav -i accompany.wav -filter_complex amix=inputs=2:duration=shortest output.wav` 18. 对声音进行变速但不变调效果器的使用,0.5倍速处理 1. `ffmpeg -i vocal.wav -filter_complex atempo=0.5 output.wav` 19. 为视频增加水印效果 1. `ffmpeg -i input.mp4 -i icon.png -fliter_complex '[0:v][1:v]overlay=main_w-overlay_w-10:10:1[out]' -map '[out]' output.mp4` 20. 视频提亮效果器的使用,`brightness [-1.0, 1.0]` 1. `ffmpeg -i input.flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=brightness=0.25 -f mp4 output.mp4` 21. 为视频增加对比度效果,`contrast [-2.0, 2.0]` 1. `ffmpeg -i input.flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=contrast=1.5 -f mp4 output.mp4` 22. 视频旋转效果器的使用 1. `ffmpeg -i input.mp4 -vf "transpose=1" -b:v 600k output.mp4` 23. 视频裁剪效果器的使用 1. `ffmpeg -i input.mp4 -an -vf "crop=240:480:120:0" -vcodec libx264 -b:v 600k output.mp4` 24. 将一张`RGBA`格式表示的数据转换为`JPEG`格式的图片 1. `ffmpeg -f rawvideo -pix_fmt rgba -s 480*480 -i texture.rgb -f image2 -vcodec mjpeg output.jpg` 25. 将一个`YUV`格式表示的数据转换为`JPEG`格式的图片 1. `ffmpeg -f rawvideo -pix_fmt yuv420p -s 480*480 -i texture.yuv -f image2 -vcodec mjpeg output.jpg` 26. 将一段视频推送到流媒体服务器上,`-re`表示以播放速度作为推流速度 1. `ffmpeg -re -i input.mp4 -acodec copy -vcodec copy -f flv rtmp://xxx` 27. 将流媒体服务器上的流`dump`到本地,下载流媒体文件 1. `ffmpeg -i http://xxx/xxx.flv -acodec copy -vcodec copy -f flv output.flv` 28. 将两个音频文件以两路流的形式封装到一个文件中 1. `ffmpeg -i 131.mp3 -i 134.mp3 -map 0:a -c:a:0 libfdk_aac -b:a:0 96k -map 1:a -c:a:1 libfdk_aac -b:a:1 64k -vn -f mp4 output.m4a`