当前位置: 首页 > news >正文

[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4

文章目录

  • 一、工具安装
  • 二、gif 转mp4
  • 三、mp4 两倍速

一、工具安装

安装 ffmpeg 工具:

sudo apt install ffmpeg

二、gif 转mp4

1. 配置环境
核心指令:

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output_2x.mp4

编辑 gif2map4 文件,内容如下:


#!/bin/bash# 检查是否输入参数
if [ $# -eq 0 ]; thenecho "Usage: $0 <input.gif> [output.mp4]"echo "Example:"echo "  $0 mygif.gif              # 输出: mygif_YYYYMMDD_HHMMSS.mp4"echo "  $0 mygif.gif custom_video   # 输出: custom_video.mp4"exit 1
fi# 输入文件
INPUT_FILE="$1"
if [ ! -f "$INPUT_FILE" ]; thenecho "Error: Input file '$INPUT_FILE' not found!"exit 1
fi# 输出文件名
if [ $# -ge 2 ]; then# 如果指定了第二个参数,直接使用OUTPUT_FILE="$2"# 确保输出文件有.mp4扩展名if [[ "$OUTPUT_FILE" != *.mp4 ]]; thenOUTPUT_FILE="${OUTPUT_FILE}.mp4"fi
else# 否则自动生成带时间的文件名TIMESTAMP=$(date +"%Y%m%d_%H%M%S")INPUT_BASENAME=$(basename "$INPUT_FILE" .gif)OUTPUT_FILE="${INPUT_BASENAME}_${TIMESTAMP}.mp4"
fi# 运行转换命令
ffmpeg -i "$INPUT_FILE" -vf "fps=15,scale=640:-2:flags=lanczos" -c:v libx264 -preset slow -crf 23 -pix_fmt yuv420p "$OUTPUT_FILE"# 检查是否成功生成文件
if [ -f "$OUTPUT_FILE" ]; thenecho "Success! Output file:"echo "  - $OUTPUT_FILE"
elseecho "Error: Failed to generate output file!"exit 1
fi

添加到终端指令

sudo cp gif2map4 /bin/

2. 命令使用

# 默认输出文件名
gif2map4 input.gif# 指定输出文件名
gif2map4 input.gif output_20250711.mp4

三、mp4 两倍速

1. 配置环境
与步骤二类似

# 从第30秒开始,截取10秒的视频(保持原速度)
ffmpeg -i input.mp4 -ss 00:00:30 -t 10 -c:v copy -c:a copy output_cut.mp4# 参数说明:
# -ss 开始时间(格式:HH:MM:SS或秒数)
# -t 持续时间
# -c:v copy 视频流直接复制(无损)
# -c:a copy 音频流直接复制# 视频加速2倍(音频同步加速)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output_2x.mp4
# setpts=0.5*PTS 视频速度2倍(值越小越快)
# atempo=2.0 音频速度2倍(范围0.5-2.0,超过需嵌套处理)# 同时裁剪和加速
ffmpeg -i input.mp4 -ss 00:01:00 -t 20 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output_final.mp4
#!/bin/bash# Check if input file is provided
if [ $# -eq 0 ]; thenecho "Usage: $0 <input.mp4> [output.mp4]"echo "Example:"echo "  $0 input.mp4              # Output: input_2x_YYYYMMDD_HHMMSS.mp4"echo "  $0 input.mp4 fast_video   # Output: fast_video.mp4"exit 1
fi# Input file
INPUT_FILE="$1"
if [ ! -f "$INPUT_FILE" ]; thenecho "Error: Input file '$INPUT_FILE' not found!"exit 1
fi# Output filename
if [ $# -ge 2 ]; then# If second argument is provided, use itOUTPUT_FILE="$2"# Ensure output has .mp4 extensionif [[ "$OUTPUT_FILE" != *.mp4 ]]; thenOUTPUT_FILE="${OUTPUT_FILE}.mp4"fi
else# Otherwise generate timestamped filenameTIMESTAMP=$(date +"%Y%m%d_%H%M%S")INPUT_BASENAME=$(basename "$INPUT_FILE" .mp4)OUTPUT_FILE="${INPUT_BASENAME}_2x_${TIMESTAMP}.mp4"
fi# Run the conversion command
ffmpeg -i "$INPUT_FILE" \-filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" \-map "[v]" -map "[a]" \"$OUTPUT_FILE"# Check if output was generated successfully
if [ -f "$OUTPUT_FILE" ]; thenecho "Success! 2x speed video created:"echo "  - $OUTPUT_FILE"
elseecho "Error: Failed to create output file!"exit 1
fi
http://www.lryc.cn/news/584926.html

相关文章:

  • 解决Vue页面黑底红字遮罩层报错:Unknown promise rejection reason (webpack-internal)
  • 【跟着PMP学习项目管理】每日一练 - 1
  • 【JMeter】执行SQL
  • Python七彩花朵
  • C++——this关键字和new关键字
  • 专题 字符串 Unicode
  • 排序算法与前端交互优化
  • Elasticsearch混合搜索深度解析(下):执行机制与完整流程
  • JAVA JVM垃圾收集
  • 【C语言网络编程】HTTP 客户端请求(域名解析过程)
  • Django老年健康问诊系统 计算机毕业设计源码32407
  • 华为VS格行VS中兴VS波导随身WIFI6怎么选?流量卡OR随身WIFI,长期使用到底谁更香?
  • 优学教育实战03跟进管理
  • 亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战
  • 力扣-142.环形链表 II
  • 学习笔记(34):matplotlib绘制图表-房价数据分析与可视化
  • Anaconda及Conda介绍及使用
  • 基于生产者消费者模型的线程池【Linux操作系统】
  • React之旅-05 List Key
  • 《探索电脑麦克风声音采集多窗口实时可视化技术》
  • 基于MuJoCo的宇树科技G1机器人基础动作仿真研究
  • Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
  • 两台电脑通过网线直连形成局域网,共享一台wifi网络实现上网
  • 项目开发日记
  • 【web应用】若依框架中,使用Echarts导出报表为PDF文件
  • Kafka——应该选择哪种Kafka?
  • XPath 语法【Web 自动化-定位方法】
  • 【操作系统】线程
  • [特殊字符] 扫描式处理:Python 自动提取 PDF 中关键词相关表格并导出为 Excel
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)