m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/ffmpeg.md
blob: 764c89e5652e4ef02d7dbf6aa94dca24a873a821 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# ffmpeg tricks

## Convert

Works for audio, too.

    ffmpeg -i in.EXT1 out.EXT2

## Cut

    ffmpeg -i in.mp4 -codec:v copy -codec:a copy -ss START_TIME -t DURATION out.mp4
    ffmpeg -ss START_TIME -t DURATION -i in.mp4 -codec:v copy -codec:a copy out.mp4

## Quality

### Resize

    ffmpeg -i in.mp4 -s 720x480 out.mp4
    # -1 means to automatically preserve aspect ratio
    ffmpeg -i in.mp4 -filter:v scale=720:-1 out.mp4

### Bitrate

* `-b:a 192k`: specify audio bitrate to 192 kbps
* `-b:v 2M`: specify video bitrate to 2 mbps

### Encoding

H.265 is one of the top recommended formats, for size:quality ratio.

    ffmpeg -i in.mp4 -vcodec libx265 -crf <value> out.mp4

Reasonable `crf` values could be 24 to 30.

## Audio/video delay

    ffmpeg -i "$input" -itsoffset <offset in seconds> -i "$input" -map 1:v -map 0:a -c:a copy -c:v libx264 "$output"

For reverse offset, swap 1 and 0.

Basically, take the input once with an offset, once without. Take the audio from
one of them, video from the other.

## Rotate

    # 90 degrees clockwise
    ffmpeg -i in.mov -vf "transpose=1" out.mov
    # 180 degrees
    ffmpeg -vf "transpose=2,transpose=2"

For the transpose parameter you can pass:

    0 = 90CounterCLockwise and Vertical Flip (default)
    1 = 90Clockwise
    2 = 90CounterClockwise
    3 = 90Clockwise and Vertical Flip

## Record screen

    ffmpeg -f x11grab -s 1920x1080 -i :0.0 out.mkv

## Record from webcam

    ffmpeg -i /dev/video0 out.mkv

## Record sound

    ffmpeg -f alsa -i default out.flac

## Concatanate audio

    ffmpet -i in1.mp3 -i in2.mp3 -i in3.mp3 -filter_complex '[0:0][1:0][2:0]concat=n=3:v=0:a=1' output.mp3

## Fitlering

### Filtergraph

* A filtergraph is a `;`-separated list of filterchains.
* A filterchain is a `,`-separated list of filters.
* A filter is

    [in1] ... [ink] filter_name=option1=val1:...:optionn=valn [out1] ... [outm]

* Use `-filter_complex` if more than one input or output stream.

## Video file info

Just running

    ffmpeg -i video.mp4

will fail, but give a bunch of info about the file (including resolution, fps, etc)