web-dev-qa-db-ja.com

品質を損なうことなくビデオファイルサイズを最適化

品質を損なうことなくビデオのファイルサイズを(ほぼ)減らすための簡単な方法(コマンドラインで-フォルダー内のすべてのビデオを圧縮するスクリプトを作成したい)はありますか?異なるビデオ形式(mp4、flv、m4v、mpg、mov、avi)でも同じように機能する方法はありますか?

圧縮したいビデオのほとんどがダウンロードされたWebビデオ(mp4、flv)であるため、さらに圧縮する余地があるかどうかは不明です。

5
student

PNGの神秘的な土地では、near-lossless圧縮の最も効果的な方法は、設定のほぼすべての可能な組み合わせで画像を圧縮し、出力。これは、pngcrushのようなアプリケーションが行うことです。

紙の上では、同様のプロセスが機能しない理由はありません。実際には、いくつかの問題があります。

  • ビデオの1回の圧縮は、PNG画像のエンコードよりもはるかに長いプロセスです。
  • 構成の組み合わせは約1000倍あります。
  • これらの2人は、いくつかの力によってプロセスを指数関数的に長くすることを共謀します。
  • また、不合理な量のディスクスペース、メモリ、およびCPU時間も使用します。
  • フレームレートが変更されるとフレームがブレンドされ、フレームサイズやトリミングを変更すると明らかに変更され、比較プロセスがさらに難しくなります

さらに、アーティファクトとエンコードスラッジで既に汚染されているコンテンツを扱っています。 「簡単な方法はありますか」に対する私の簡単な答えは、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 \;

しかし、損失があるでしょう。どれだけ受け入れられるかを判断する必要があります。

3
Oli

また、に基づいて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

1
Elder Geek