These are commands I use on a regular basis. For the sake of simplicity, the filenames I use in the examples below are in.mp4
and out.mp4
, though you can use your imagination to picture blah.mov
or audio.wav
on a case-by-case basis.
High-Quality, Infinitely Looping GIF from MP4:
ffmpeg -i input.mp4 -vf "fps=12,scale=720:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif
Convert FLV to MP4 without full re-encode:
ffmpeg -i in.flv -vcodec copy out.mp4
Generating a waveform from a file with audio:
ffmpeg -i in.mp3 -filter_complex "showwavespic=s=1280x320" -frames:v 1 ./waveform.png
Boost audio level (volume) without re-encoding:
ffmpeg -i in.mp4 -vcodec copy -af "volume=10dB" out.mp4
Delay audio:
ffmpeg -i "in.mp4" -itsoffset 0.3 -i "in.mp4" -map 0:v -map 1:a -vcodec copy -acodec copy "out.mp4"
Rip and audio stream (I use this to periodically rip our SHOUTcast stream for a "backup reel"):
ffmpeg -y -i http://geostream.cdn.shoutdrive.com:80/sd-mp3 out.mp3
Rip an M3U8 (video HLS):
ffmpeg -i "http://on-demand.cdn.shoutdrive.com/mixes/service/2018-April-22_Thee-O/play.m3u8" -c copy -bsf:a aac_adtstoasc out.mp4
Stream a local file to an RTMP server (Periscope specification in this case):
ffmpeg -i FILE.mp4 -crf 30 -preset ultrafast -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 92k -vcodec libx264 -x264-params keyint=60:no-scenecut=1 -r 30 -b:v 3250k -s 1280x720 -f flv rtmp://ca.pscp.tv:80/x/STREAM_KEY_HERE;
Mount RTSP as virtual video device:
ffmpeg -f mjpeg -i rtsp://192.168.1.16/play2.sdp -pix_fmt yuv420p -f v4l2 /dev/video0
- Enumerate format and resolution choices:
youtube-dl --list-formats 'https://www.youtube.com/watch?v=C_YiECKlPuE'
Output:
[youtube] 2nAHpvFXo9s: Downloading webpage
[youtube] 2nAHpvFXo9s: Downloading m3u8 information
[youtube] 2nAHpvFXo9s: Downloading MPD manifest
[info] Available formats for 2nAHpvFXo9s:
format code extension resolution note
139 m4a audio only DASH audio 64k , m4a_dash container, mp4a.40.5 (22050Hz)
140 m4a audio only DASH audio 144k , m4a_dash container, mp4a.40.2 (44100Hz)
278 webm 256x144 DASH video 80k , webm_dash container, vp9, 30fps, video only
242 webm 426x240 DASH video 139k , webm_dash container, vp9, 30fps, video only
160 mp4 256x144 DASH video 192k , mp4_dash container, avc1.4d400c, 30fps, video only
243 webm 640x360 DASH video 240k , webm_dash container, vp9, 30fps, video only
244 webm 854x480 DASH video 415k , webm_dash container, vp9, 30fps, video only
133 mp4 426x240 DASH video 419k , mp4_dash container, avc1.4d4015, 30fps, video only
134 mp4 640x360 DASH video 772k , mp4_dash container, avc1.4d401e, 30fps, video only
247 webm 1280x720 DASH video 774k , webm_dash container, vp9, 30fps, video only
135 mp4 854x480 DASH video 1077k , mp4_dash container, avc1.4d401f, 30fps, video only
248 webm 1920x1080 DASH video 1402k , webm_dash container, vp9, 30fps, video only
136 mp4 1280x720 DASH video 2187k , mp4_dash container, avc1.4d401f, 30fps, video only
137 mp4 1920x1080 DASH video 4199k , mp4_dash container, avc1.4d4028, 30fps, video only
91 mp4 256x144 269k , avc1.4d400c, 30.0fps, mp4a.40.5
92 mp4 426x240 507k , avc1.4d4015, 30.0fps, mp4a.40.5
93 mp4 640x360 962k , avc1.4d401e, 30.0fps, mp4a.40.2
94 mp4 854x480 1282k , avc1.4d401f, 30.0fps, mp4a.40.2
95 mp4 1280x720 2447k , avc1.4d401f, 30.0fps, mp4a.40.2
96 mp4 1920x1080 4561k , avc1.4d4028, 30.0fps, mp4a.40.2 (best)
- The choice with ID 96 "(best)" seems ideal, let's use that one and save it as an MP4:
ffmpeg -i $(youtube-dl -f 96 -g 'https://www.youtube.com/watch?v=C_YiECKlPuE') \
-c:v copy -c:a aac -strict experimental output.mp4