FFmpeg

ffmpeg version 4.4.2-0ubuntu0.22.04.1

FreeBSD 14

# cd /usr/ports/multimedia/ffmpeg
# make install clean

Ubuntu 22.04 LTS

$ sudo apt update
$ $sudo apt install ffmpeg

$ ffmpeg -version
$ ffmpeg -encoders
$ ffmpeg -decoders

CentOS 7

$ sudo yum install epel-release
$ sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
$ sudo yum install ffmpeg ffmpeg-devel

CentOS 8

$ wget http://www.ffmpeg.org/releases/ffmpeg-4.4.tar.gz
$ tar -xvf ffmpeg-4.4.tar.gz
$ cd ffmpeg-4.4/
$ ./configure && make && make install
$ ffmpeg -version

Windows 10

Visit the FFmpeg download page. The More downloading options section has FFmpeg packages and executable files for Linux, Windows, and Mac. To get the Windows version, Windows builds from gyan.dev

Extract the Downloaded Files

Add FFmpeg to PATH

> set path=D:\Program Files\ffmpeg-7.0.2-full_build\bin

Verify FFmpeg PATH

> ffmpeg -version

Instructions

$ sudo yum install mediainfo
$ mediainfo input.mp4

Conversion

$ ffmpeg -i input.avi output.mp4
$ ffmpeg -i input.mp4 output.ts

Encoding format conversion

$ ffmpeg -i input.mp4 -vcodec h264 output.mp4

Extract audio

$ ffmpeg -i input.mp4 -acodec copy -vn output.aac
$ ffmpeg -i input.mp4 -acodec aac -vn output.aac

Extract video

$ ffmpeg -i input.mp4 -vcodec copy -an output.mp4

Video clip

  • ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
  • ffmpeg -ss [start] -i [input] -to [end] -c copy [output]
$ ffmpeg -ss 00:03:03 -i ./input.mp4 -c copy ./output.mp4
$ ffmpeg -ss 00:03:03 -to 33:33:33 -i ./input.mp4 -c copy ./output.mp4

Video merge

$ vim ./join.txt
file /home/sk/myvideos/part1.mp4
file /home/sk/myvideos/part2.mp4
file /home/sk/myvideos/part3.mp4
$ ffmpeg -f concat -i join.txt -c copy output.mp4
$ ffmpeg -f concat -safe 0 -i ./join.txt -c copy output.mp4

Bit rate

There are 3 options for ffmpeg to control the bit rate: -minrate**-b:v****-b:a****-maxrate**

bitrate = file size / duration

biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps

分辨率320x240 码率200-384kbps
分辨率640x480 码率768-1024kbps
分辨率1280x720(720p) 码率2048-3072kbps
分辨率1920x1080(1080p) 码率5120-8192kbps
$ ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
$ ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

Use of filters

Scale down the input 1920x1080 to 960x540 output

$ ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
$ ffmpeg -i input.mp4 -vf scale=960:-1 output.mp4

Add logo to video

$ ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
$ ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
$ ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
$ ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

-vf delogo=x:y:w:h[:t[:show]]

the coordinates from the upper left corner

-vf delogo=x:y:w:h[:t[:show]]
x:y The coordinates from the upper left corner
w:h Logo width and height
t The thickness of the rectangle edges defaults to 4
show If set to 1 to have a green rectangle, the default value is 0.
$ ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

Capture video image

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r 表示每一秒几帧
-q:v表示存储jpeg的图像质量,一般2是高质量。
如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。可以设置开始的时间,和你想要截取的时间。

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss 表示开始时间
-t 表示共要多少时间。
如此,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

Batch file

$ ffmpeg -i a.mp4
$ ffmpeg -i a.mp4 -hide_banner
$ ffmpeg -i a.mkv b.mp4
$ ffmpeg -i input.webm -qscale 0 output.mp4
$ ffmpeg -formats

$ ffmpeg -i ./input.mp4 -ss 01:01:01 -to 02:02:02 -c copy ./output.mp4
$ ffmpeg -i input.mp4 -t 00:33:03 -c copy output.mp4
$ ffmpeg -i input.mp4 -t 00:01:06 -c copy part1.mp4 -ss 00:01:06 -c copy part2.mp4
#!/bin/sh

Folder_A="/home/a"
for file_a in ${Folder_A}/*
do
    out_filename=`basename $file_a`
    in_filename="NEW-"${out_filename}
    ffmpeg -i /home/a/$out_filename -vf scale=1280:-1 $in_filename -y
done
#!/bin/sh
 
echo -e "start_time:${PWD}"
read start_time
echo -e "end_time:${PWD}"
read end_time
 
Folder_A="/home/cidi/Documents/vedio/fill_vedio"
for file_a in ${Folder_A}/*
do
    out_filename=`basename $file_a`
    in_filename="_CIDI_"${out_filename}
    ffmpeg -i /home/cidi/Documents/vedio/fill_vedio/$out_filename -vcodec copy -acodec copy -ss $start_time -to $end_time $in_filename -y
done
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus