Notes on ffmpeg
- Transcode audio with metadata
- Encode/compress raw video and audio
- Screencast on Linux with PulseAudio
- Video to GIF
- Trim/cut video to video
- Misc
- Videos with wrong orientation in metadata
- Map video and audio streams into single output
- References
Transcode audio with metadata
ffmpeg
and quodlibet
/operon
Encode/compress raw video and audio
Compress raw video into Matroska container, see Digitizing Hi8 cassettes & Digitizing VHS cassettes.
Screencast on Linux with PulseAudio
Choose a PulseAudio source device
$ pactl list sources
<...>
To perform capture and lossless compression with x264 and Vorbis in one go, run:
With microphone
Close pavucontrol
and run below to load loopback module
$ pactl load-module module-loopback latency_msec=1
Open pavucontrol
again, and configure using below pictures as guide
Substitute below level to 70%
Substitute below level Built-in Audio Analog Stereo to 70%
Then repeat steps above.
Video to GIF
Manually extract portion of video into a video file adding extra stuff like effects, subtitles, merges with images, etc.
Resize video to desired size of GIF, using only one coordinate
$ ffmpeg -i video_source.mp4 -vf scale=-1:720 video_source_resized.mp4
If you get an error about audio encoding, just copy/reencode the same audio
$ ffmpeg -i video_source.mp4 -vf scale=-1:720 -c:a copy video_source_resized.mp4
File extension mp4
refers only to container, is not that relevant. Use
whatever the original video extension is.
Finally, convert to GIF
$ ffmpeg -i video_source_resized.mp4 -b 2048k video.gif
Online
- https://imgur.com/vidgif. Video must be hosted elsewhere. Creates both
video and GIF; to get GIF add
.gif
to the URL. - https://giphy.com/
- http://www.video2gif.org/about.html
- https://imgflip.com/
Trim/cut video to video
$ in=/path/to/input/file
$ out=/path/to/output/file
Trim/cut from minute 18:20 to 18:30. Try following commands in descending order of preference/priority.
Fast without re-encoding
$ ffmpeg -i $in -ss 00:18:20 -c:v copy -c:a copy -to 00:18:30 $out
About as fast as previous, no re-encoding
$ ffmpeg -ss 00:18:20 -i $in -c:v copy -c:a copy -t 10 $out
Slower, more accurate, with re-encoding
$ ffmpeg -ss 00:18:20 -i $in -t 10 $out
Slower, CPU-intensive, more accurate, with re-encoding
$ ffmpeg -i $in -ss 00:18:20 -to 00:18:30 $out
Short Python script
Misc
-
Use H.264 because of its good quality, size and compatibility.
-
Use MP4 if using audio compression, otherwise use Matroska.
-
When dealing with raw audio (PCM) specify the format with the
-f
option (for example). -
Don’t try to map audio channels without re-encoding (info).
Videos with wrong orientation in metadata
Sometimes when recording from a device like a cellphone or a tablet, the resulting video will play as if it was recorded in portrait mode
$ ffprobe VID_20160924_012917.mp4
ffprobe version 2.8.7 Copyright (c) 2007-2016 the FFmpeg developers
built with gcc 5.3.1 (GCC) 20160406 (Red Hat 5.3.1-6)
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID_20160924_012917.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2016-09-24 06:33:43
Duration: 00:04:24.47, start: 0.000000, bitrate: 12234 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080, 12130 kb/s, SAR 1:1 DAR 16:9, 30.33 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
rotate : 90
creation_time : 2016-09-24 06:33:43
handler_name : VideoHandle
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
Metadata:
creation_time : 2016-09-24 06:33:43
handler_name : SoundHandle
Below command fixes it without re-encoding.
$ ffmpeg -i VID_20160924_012917.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4
Map video and audio streams into single output
Merge the video stream of normal_export.mkv
and audio stream of
normal_export_Audio_1.mkv
into a single container MKV
normal_export_final.mkv
.
$ ffmpeg -i normal_export.mkv -i normal_export_Audio_1.mkv -map 0:0 -map 1:1 -c:v copy -c:a copy normal_export_final.mkv
References
- How to Install FFmpeg on Windows, Mac, Linux Ubuntu and Debian
- https://trac.ffmpeg.org/wiki/AudioChannelManipulation
- https://trac.ffmpeg.org/wiki/audio%20types
- https://wiki.archlinux.org/index.php/FFmpeg
- https://trac.ffmpeg.org/wiki/Encode/H.264
- https://trac.ffmpeg.org/wiki/Capture/Desktop
- https://ffmpeg.org/ffmpeg-devices.html
- http://wiki.oz9aec.net/index.php/High_quality_screen_capture_with_Ffmpeg
- https://askubuntu.com/questions/123798/how-to-hear-my-voice-in-speakers-with-a-mic
- http://blog.superuser.com/2012/02/24/ffmpeg-the-ultimate-video-and-audio-manipulation-tool/
- https://trac.ffmpeg.org/wiki