flv.js Demo

视频

  1. 将视频转为浏览器可以播放的 mp4 视频
1
ffmpeg -i input.MP4 -c:v libx264 -c:a aac -s:v 1280x720 -movflags faststart output.mp4
  • -c:v libx264 视频采用 h264 编码
  • -c:a aac 音频采用 aac(LC) 编码
  • -s:v 1280x720 视频分辨率调整为 1280x720(可选)
  1. ts 文件合并为 mp4
1
ffmpeg -i index.m3u8 -c copy output.mp4
  1. mp4moov 前移
1
ffmpeg -i input.mp4 -c copy -movflags faststart output.mp4
  1. 以文件的形式保存 flv (直播)流
1
ffmpeg -i http://xxx.com/live.flv -c copy -f flv output.flv
  1. 将云端 hls 保存为 mp4
1
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i "https://xxx.com/live.m3u8" -c copy output.mp4
  • -protocol_whitelist "file,http,https,tcp,tls" 默认情况下,ffmpeg 只允许使用一些常见的协议,通过该选项可以指定允许使用的协议白名单
  1. 以 CSV 格式输出视频流的帧信息
1
ffprobe -show_frames -select_streams v -of csv abc.flv > abc.csv 2>&1
  • -show_frames 查看每一帧信息
  • -select_streams 可以只查看音频(a)、视频(v)、字幕(s)的信息
  • -of 输出格式,包括 XML、INI、JSON、CSV、FLAT 等

frame 字段说明

属性说明
media_type帧的类型(视频、音频、字幕等)video
stream_index帧所在的索引区域0
key_frame是否为关键帧1
pkt_ptsFrame 包的 pts0
pkt_pts_timeFrame 包的 pts 的时间显示0.080000
pkt_dtsFrame 包的 dts80
pkt_dts_timeFrame 包的 dts 的时间显示0.080000
pkt_durationFrame 包的时长N/A
pkt_duration_timeFrame 包的时长时间显示N/A
pkt_posFrame 包所在文件的偏移位置344
width帧显示的宽度1280
height帧显示的高度714
pix_fmt帧的图像色彩格式yuv420p
pict_type帧类型(如:I、P、B)I

IDR frame: pict_type=I 且 key_frame=1 时,表示这是 IDR frame.

音频

  1. 抽取音视频文件中的 AAC 音频流
1
ffmpeg -i input.mp4 -vn -acodec copy output.aac
  • -vn 忽略视频流
  • -an 忽略音频流
  1. 将 m4a 转为 mp3
1
ffmpeg -i abc.m4a -y -c:a libmp3lame -aq 0 abc.mp3

批量转换脚本:

1
2
3
4
5
#!/bin/bash

for i in *.m4a ; do
ffmpeg -i "$i" -y -c:a libmp3lame -aq 0 "${i%.*}.mp3"
done
  1. 将 mp3 转为 ogg
1
ffmpeg -i abc.mp3 -y -c:a libvorbis abc.ogg

批量转换脚本:

1
2
3
4
5
#!/bin/bash

for i in *.mp3 ; do
ffmpeg -i "$i" -y -c:a libvorbis "${i%.*}.ogg"
done
  1. 增大/减小 MP4 的音量

将 input.mp4 文件的音量调大 10dB,输出到 output.mp4 文件中。

1
ffmpeg -i input.mp4 -vcodec copy -af "volume=10dB" output.mp4