I know there are a lot of questions about video encoders around here, but my question is more about workflow/efficiency.
For my day job, I need to convert videos, frequently, from many random formats (usually large AVI, M4V, and what not) and convert them and compress them down into efficient files we can use around the internet for uploading. Formats I must produce are:
- WMV (Windows Media Video 9)
- MOV (H.264)
- MP4 (H.264)
I need to create common templates for a couple use cases (convert to same-as-source, 1080p, or 720p) and be able to process these quickly, and en queue.
Any ideas on how to best go about this process in Ubuntu?
Best Answer
If you prefer command-line you can use
ffmpeg
(orhandbrake-cli
).MP4
Assuming you're using a recent version of
ffmpeg
:-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:
WMV
FFmpeg only supports WMV 7 and 8. I am unaware of an open source encoder for version 9.
As I am unfamiliar with these encoders I can only give an untested example:
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:
Also see