DebianでFFmpegを使用した大規模なデインターレース

DebianでFFmpegを使用した大規模なデインターレース

Debian サーバーには、約 300 個のビデオが次のように保存されています。

/mediaroot/1/m32.mp4
/mediaroot/2/m421.mp4
/mediaroot/n/mx.mp4

すべてデインターレースする必要があり、そのためにFFmpegを使用したいと思います。

別の有用なソールの助けを借りて、次のステップはある程度許容可能な結果を​​得ました。

  1. オーディオ抽出
  2. トランスコーディングビデオ、はい

    ffmpeg -y -i m148.mp4 -pix_fmt yuv420p -an -pass 1 -passlogfile m148.x600.1351896878.log -an -vcodec libx264 -b:v 600k -preset medium -tune film -threads 0 m148.x600.1351896878.mp4
    ffmpeg -y -i m148.mp4 -pix_fmt yuv420p -an -pass 2 -passlogfile m148.x600.1351896878.log -an -vcodec libx264 -b:v 600k -preset medium -tune film -threads 0 m148.x600.1351896878.video.mp4
    
  3. 手順1で抽出したオーディオと新しいビデオをミキシングします。

  4. qt-faststartを使用した原子の移動

    ffmpeg/qt-faststart m148.x600.1351896878.mp4 m148.x600.1351896878.atom.mp4
    

私の質問は:自動的にインターレースを解除し、すべてのビデオを交換するにはどうすればよいですか?

答え1

デインターレースするには、次のようにします。YADIFフィルタ-filter:v yadifコマンドラインで少し後ろに追加するだけです-i input.mp4

オーディオを抽出して再利用する必要はありません。 FFMPEG は、ユーザーが-acodec copy要求した場合、 encode コマンドにソースオーディオを追加して、入力ストリームのソースオーディオを出力にコピーします。繰り返しますが、オプションの後に表示する必要が-i input.mp4あり、おそらく後ろに表示する必要があります。-f container私はそれをすべてのビデオオプションの後ろに置く傾向があります。それは個人的なスタイルの問題です。

入力ファイルの交換に関しては、これが明確でなければなりません。一時出力ファイルにコーディングして成功すると、スクリプトに次の内容が表示されますmv /tmp/whatever.mp4 input.mp4

答え2

単純なシェルスクリプトを書く - デフォルトでは、すべての操作が完了しました。すべてを「1屋根の下」(1つのスクリプトファイルに)入れるだけです。

#!/bin/bash

# loop over all arguments to the script - place each single
# one into variable f (further referenced to by $f) and execute
# the commands in the loop
for f in "$@"; do
    # create new variable holding filename without the extension
    n=${m%.mp4}

    # commands you mentioned above go here, you only need to
    # replace the strings that correspond to actual filename
    # with "$f" or "$n". Use the quotes around in case your
    # filenames contained spaces. e.g.:
    ffmpeg -y -i "$f" -pix_fmt yuv420p -an -pass 1 -passlogfile "$n".x600.1351896878.log -an -vcodec libx264 -b:v 600k -preset medium -tune film -threads 0 "$n".x600.1351896878.mp4
    ffmpeg -y -i "$f" -pix_fmt yuv420p -an -pass 2 -passlogfile "$n".x600.1351896878.log -an -vcodec libx264 -b:v 600k -preset medium -tune film -threads 0 "$n".x600.1351896878.video.mp4

    # more commands...
done

次に、引数に変換するファイル名を使用してスクリプトを実行します。

script.sh file1.mp4 /another/directory/file2/mp4 ...

実行可能にするchmod a+x script.shか、シェルインタプリタを介して明示的に実行する必要があります。bash script.sh ...

関連情報