Fastest way to convert videos (batch or single)?
Solution 1:
If you prefer command-line you can use ffmpeg
(or handbrake-cli
).
MP4
Assuming you're using a recent version of ffmpeg
:
ffmpeg -i input -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \
-movflags +faststart -vf scale=-2:720,format=yuv420p output.mp4
-
-crf
: Quality. Range is logarithmic 0 (lossless) to 51 (worst quality). Default is 23. Subjective sane range is ~18-28 or so. Use the highest value that still gives you an acceptable quality. If you are re-encoding impractically large inputs to upload to YouTube or similar then try a value of 17 or 18 since these video services will re-encode anyway. -
-preset
: Encoding speed. A slower preset provides better compression (quality per file size) but is slower. Use the slowest that you have patience for: ultrafast, superfast, veryfast, faster, fast, medium (the default), slow, slower, veryslow. -
-movflags +faststart
: Allows video to playback before it is completely downloaded in the case of progressive download viewing. Useful if you are hosting the video, otherwise superfluous if uploading to a video service like YouTube. -
-vf scale=-2:720,format=yuv420p
: A filtergraph using scale and format video filters. Scale to 720 pixels in height, and automatically choose width that will preserve aspect, and then make sure the pixel format is compatible with dumb players. -
-b:a 128k
: Audio bitrate. If yourffmpeg
is outdated then you'll need to add-strict experimental
to use-c:a aac
.
MOV
Since your MOV and MP4 files probably contain the same video and audio formats you can encode the MP4 and make the MOV by re-muxing (with stream copy mode) instead of re-encoding:
ffmpeg -i input.mp4 -codec copy output.mov
WMV
FFmpeg only supports WMV 7 and 8. I am unaware of an open source encoder for version 9.
$ ffmpeg -encoders | grep -i windows
[...]
V..... = Video
A..... = Audio
------
V..... wmv1 Windows Media Video 7
V..... wmv2 Windows Media Video 8
A..... wmav1 Windows Media Audio 1
A..... wmav2 Windows Media Audio 2
As I am unfamiliar with these encoders I can only give an untested example:
ffmpeg -i input -c:v wmv2 -b:v 1024k -c:a wmav2 -b:a 192k output.wmv
Getting ffmpeg
You can download a Linux build of ffmpeg or follow a step-by-step ffmpeg compilation guide to customize your build.
Using a bash "for loop" to perform a batch encode
To encode all videos in a directory:
$ mkdir encoded
$ for f in *.avi; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 128k -movflags +faststart -vf scale=-2:720,format=yuv420p \
"encoded/${f%.avi}.mp4"; done
Also see
- Who can tell me the difference and relation between ffmpeg, libav, and avconv?
- FFmpeg H.264 Video Encoding Guide
- FFmpeg AAC Audio Encoding Guide
- Using HandBrakeCLI
Solution 2:
Try HandBrake.
HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs. To install, just press Ctrl+Alt+T on your keyboard to open Terminal. When it opens, run the command(s) below:
sudo add-apt-repository ppa:stebbins/handbrake-releases
sudo apt-get update
sudo apt-get install handbrake