[FFmpeg] 常用命令记录

本文介绍了如何使用FFmpeg工具进行多个视频的合并,处理不同帧率的视频,计算图像的PSNR值,将图片合成为视频,调整视频码率,截取视频中的特定区域以及拼接两幅图片。提供的命令行示例详细展示了每个操作的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、合并两个视频

假设需要将 视频 01.Overall_Shallow_sea_out.mp4 复制几次达到重复播放的效果,可以使用如下ffmpeg命令。

ffmpeg.exe -f concat -safe 0 -i .\test.txt -c copy -y o1.mp4

test.txt里面的内容为:

file '01.Overall_Shallow_sea_out.mp4'

file '01.Overall_Shallow_sea_out.mp4'

file '01.Overall_Shallow_sea_out.mp4'

当然,如果需要合并两个不一样的视频,只需要修改file后面的名称即可

二、合并不同帧率的视频

.\ffmpeg.exe -i "concat:50fps.ts|30fps.ts|" -c copy all.ts

该命令可以实现将50fps和30fps的视频进行合并。目前测试只能成功实现 ts 视频格式的合并。

三、计算PSNR

ffmpeg -s 1920x1080 -pix_fmt bgra -i .\TextOnTreeInField_1920x1080_8bit_444p_src.rgb -s 1920x1080 -pix_fmt bgra -i .\TextOnTreeInField_1920x1080_8bit_444p_decompressed.rgb -lavfi psnr="stats_file=psnr.log"  -f null  -

ffmpeg可以计算两幅图像的psnr和mse,通过上面的命令可以实现,过滤器里面的东西后面解析。执行之后会得到psnr.log的文件

四、将一帧/几帧图片合成视频

-loop为ffmpeg中一个选项,表示的是循环输入一帧图像

ffmpeg -loop 1 -i photo.jpg -t 10 photo.mp4

下面是将几张图片合成视频的操作:

ffmpeg -f image2 -i img%d.jpg -r 25 video.mp4

格式化名称为:

ffmpeg -f image2 -i img%3d.jpg -r 25 video.mp4

五、修改视频码率

 ffmpeg -i .\memc_search_range_test_3840x2160_24hz.mp4  -b:v 5M  .\memc_search_range_test_3840x2160_24hz_5M.mp4

一般10M左右已经无损了,没必要更大的码率了
5M码率也可接受,码率代表每秒视频是多大的
码率越大最后体积也越大,视频质量相对较好

六、截取感兴趣区域

ffmpeg -i img -vf crop=960:0:960:2160 crop_out.png

其中,crop的四个参数分别代表: crop_w : crop_h : start_x : start_y,即截取宽、截取高、起点x坐标、起点y坐标
该命令可以截取视频和图片。

七、拼接两幅图片

直接拼接两幅图像的指令:

ffmpeg -i img1 -i img2 -filter_complex hstack out.png

如果需要拼接图像中的感兴趣区域则可使用如下指令:

ffmpeg -i cat.jpg -i dog.jpg -filter_complex "[0:v]crop=960:1920:0:0[img1];[1:v]crop=960:1920:0:0[img2];[img1][img2]hstack" phoutput.jpg
<think>嗯,用户想用FFmpegMP4视频切片,我应该怎么介绍呢?首先得确定他们需要什么格式的切片,通常是HLS的m3u8和ts文件吧。FFmpeg命令行参数可能有点复杂,得一步步分解。 首先,用户可能不太清楚HLS是什么,可能需要简单解释一下。然后,基本的命令结构,比如ffmpeg -i输入文件,加上一些参数,比如-c:v和-c:a指定编码器,还有-hls_time每个切片的时长。可能需要提到常用的h264视频编码和aac音频,这样兼容性比较好。 然后,参数的具体含义,比如-hls_list_size 0是让m3u8列表包含所有切片,如果有需要保留多少切片的话可以调整。还有-hls_segment_filename自定义文件名格式,可能用户需要这个选项来整理输出文件。 另外,可能用户需要调整视频的分辨率或者码率,可以建议他们使用额外的参数,比如-vf scale或者-b:v。不过这可能属于高级选项,如果用户只是基础切片可能不需要,但提一下比较好。 还要注意输出的m3u8和ts文件的位置,确保用户知道输出目录在哪里。可能还需要提醒安装FFmpeg,或者版本是否支持HLS参数。有没有常见的错误,比如输入文件路径不对,或者编码器不支持? 另外,如果用户需要加密切片,可能需要提到HLS的加密选项,比如使用-hls_key_info_file,不过这可能比较复杂,用户如果不需要的话可以暂时忽略。 总结一下,应该先介绍HLS的基本概念,然后给出一个典型命令,分解每个参数的作用,再提一些常用的额外参数和注意事项。这样用户能快速上手,同时了解如何调整参数满足自己的需求。</think>FFmpeg 是一个功能强大的多媒体处理工具,支持将 MP4 视频切割成多个小片段(如 HLS 流媒体格式的 `.ts` 文件 + `.m3u8` 索引文件)。以下是使用 FFmpeg 进行视频切片的基本方法: --- ### **基础命令示例** ```bash ffmpeg -i input.mp4 \ -c:v copy -c:a copy \ -f hls \ -hls_time 10 \ -hls_list_size 0 \ -hls_segment_filename "output_%03d.ts" \ output.m3u8 ``` --- ### **参数说明** 1. **输入/输出参数** - `-i input.mp4`:输入的视频文件。 - `-f hls`:指定输出格式为 HLS(HTTP Live Streaming)。 - `output.m3u8`:生成的索引文件(记录切片信息)。 2. **编码参数** - `-c:v copy -c:a copy`:直接复制原始视频和音频流(不重新编码,速度快、无损)。 - 如果需要重新编码(如压缩体积),可替换为 `-c:v libx264 -c:a aac`。 3. **切片控制** - `-hls_time 10`:每个切片的时长(单位:秒),此处设为 10 秒。 - `-hls_list_size 0`:索引文件 `.m3u8` 中保留所有切片记录(`0` 表示不限制)。 - `-hls_segment_filename "output_%03d.ts"`:自定义切片文件名格式(例如 `output_001.ts`, `output_002.ts`)。 --- ### **常见扩展选项** - **调整分辨率/码率**(需重新编码): ```bash -vf "scale=1280:-2" -b:v 2M -b:a 128k ``` - **强制关键帧对齐**(避免切片位置偏差): ```bash -force_key_frames "expr:gte(n,n_forced*N)" # 将 N 替换为期望的关键帧间隔秒数 ``` - **HLS 加密**(DRM 保护): ```bash -hls_key_info_file key_info.txt # 需提前生成加密密钥文件 ``` --- ### **注意事项** 1. 确保 FFmpeg 已安装并支持 HLS 格式(大部分官方编译版本均支持)。 2. 切片后的 `.ts` 文件和 `.m3u8` 需放在同一目录(或按路径规则部署到服务器)。 3. 若需网页播放,推荐使用 [hls.js](https://github.com/video-dev/hls.js) 等库解析 HLS 流。 通过上述命令FFmpeg 会将视频按指定时长切割,适用于流媒体服务或分片传输场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值