品質を損なうことなくビデオのファイルサイズを(ほぼ)減らすための簡単な方法(コマンドラインで-フォルダー内のすべてのビデオを圧縮するスクリプトを作成したい)はありますか?異なるビデオ形式(mp4、flv、m4v、mpg、mov、avi)でも同じように機能する方法はありますか?
圧縮したいビデオのほとんどがダウンロードされたWebビデオ(mp4、flv)であるため、さらに圧縮する余地があるかどうかは不明です。
PNGの神秘的な土地では、near-lossless圧縮の最も効果的な方法は、設定のほぼすべての可能な組み合わせで画像を圧縮し、出力。これは、pngcrush
のようなアプリケーションが行うことです。
紙の上では、同様のプロセスが機能しない理由はありません。実際には、いくつかの問題があります。
さらに、アーティファクトとエンコードスラッジで既に汚染されているコンテンツを扱っています。 「簡単な方法はありますか」に対する私の簡単な答えは、No。でなければなりません
しかし、FLVのような低圧縮ビデオ(この形式の経験ではかなりゴミの圧縮)が大量にある場合は、ffmpeg
またはmencoder
を試してみる価値があります。 FLV。このような何かが動作する可能性があります:
find -iname '*.flv' -exec \
mencoder {} -o {}.recomp.avi -ovc x264 -x264encopts threads=9:bitrate=400 -oac mp3lame -lameopts abr:br=52 \;
しかし、損失があるでしょう。どれだけ受け入れられるかを判断する必要があります。
また、に基づいてavconvでこれを達成することができますavconv -i <sourcefile> -c:v libx264 -crf 23 output.mp4
crf係数(この例では23)を下げることで品質を上方に調整し、値を上げることで下方に調整できます。
0〜51の値を設定できます。値を小さくすると、品質が向上します(ファイルサイズが大きくなります)。適切な値は18〜28です。x264のデフォルトは23なので、これを出発点として使用できます。
品質を損なうことなく別の形式に変更できるスクリプト(ただし、サイズの縮小はほとんどまたはまったくありません)
#!/bin/bash
echo "This script will attempt to copy the video and audio streams of all non-mkv files in the current directory to a mkv video container of the same name as the sources without overwriting."
read -p "Press any key to continue or CTRL-C to cancel"
for f in *.*
do
name=$(echo "$f" | sed 's/\.[^\.]*$//')
ext=$(echo "$f" | sed 's/^.*\.//')
echo "$f is made up of the base $name and ends with $ext"
target="$name.mkv"
echo target = $target
if [ "$f" = "$target" ];
then
echo "$f=$target skipping overwrite"
else
avconv -i "$f" -c:a copy -c:v copy "$name.mkv"
fi
done
このスクリプトで使用されているオーディオおよびビデオコーデックはcopy
であるため、再エンコードは行われないことに注意してください。サイズの節約は最小限であり、以前使用されていたよりも効率的なコンテナの結果になります。サイズを小さくするには、再エンコードが必要です。c:v copy
を-c:v libx264 -crf 23
に置き換えてスクリプトを調整する必要があります(上記のように、必要に応じて-crf値を調整します)。余分なエコーラインはコメントアウトまたは削除してください。
注:「mp4、flv、m4v、mpg、mov、avi」という形式はコンテナであり、その中のストリームをエンコードするために使用されるコーデックにほとんどまたはまったく関係ありません。サイズ削減のための再エンコードに関する議論には、コンテナに含まれるコーデックの知識が必要であり、ケースバイケースで評価する必要があります。
出典:テストおよび http://slhck.info/articles/crf