Debian サーバーには、約 300 個のビデオが次のように保存されています。
/mediaroot/1/m32.mp4
/mediaroot/2/m421.mp4
/mediaroot/n/mx.mp4
すべてデインターレースする必要があり、そのためにFFmpegを使用したいと思います。
別の有用なソールの助けを借りて、次のステップはある程度許容可能な結果を得ました。
- オーディオ抽出
トランスコーディングビデオ、はい
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
手順1で抽出したオーディオと新しいビデオをミキシングします。
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 ...