
普段はWindowsに入れた「携帯動画変換君」を使ってmp4に変換し、PCやスマホなどで動画を見れるようにしているが、ubuntuでもそれが出来るようにしてみました。
携帯動画変換君はffmpegを使って変換しており、変換したいファイルをまとめて登録しておくことができます。寝る前にセットして起きたら複数のファイルの処理が終わっているみたいな。
ffmpegのインストール
ffmpegのインストールはaptコマンドでサクッと完了
sudo apt install ffmpeg
変換スクリプトの作成
携帯動画変換君と同様に、複数のファイルを登録して順次処理をさせるためにスクリプトを作ってみました。
適当なディレクトリにworkフォルダを作成し、workフォルダ内に変換したいファイルを置き、その一つ上の階層にシェルを置き実行するとworkフォルダ内のファイルを順次変換するようにしてみます。
↓ こんなイメージ
└ 適当なディレクトリ
├─ shellscript.sh ※今回作ったファイル
├─ 変換されたファイル1
├─ 変換されたファイル2
├─ 変換されたファイル3
│ ・
│ ・
│
└── work
├─ 変換したいファイル1
├─ 変換したいファイル2
├─ 変換したいファイル3
・
・
作成したシェルスクリプト
当初、1つ目のファイルは処理が出来るものの、2つ目以降が処理できずに調べてみると以下のような記事があり、参考にさせてもらいました。
一行目しか処理されないのだ。また、処理対象のファイルが変わると、壊れたファイルとして扱われたり、
https://kazkn.com/post/2017/bash-loop-ffmpeg/f
に不正なファイル名が入ったりすることもあり、極めて不可解な挙動になる。
結論からいうと、ffmpeg に</dev/null
を足せば解決する。
shellscript.sh
#!/bin/sh
ls -1t work > file.lst
i=0
num=`wc -l file.lst`
while read line
do
outfile=${line%.*}
echo ${outfile}
i=$(($i+1))
date "+%Y/%m/%d %H:%M:%S"
echo $i/$num
ffmpeg -i work/"${line}" -threads 32 -level 40 -g 250 -s 1280x720 -r 29.97 -async 100 -bufsize 20000k -refs 4 -ac 2 -f mp4 "${outfile}.mp4" >/dev/null 2>&1 < /dev/null
done < file.lst
rm -f file.lst
スクリプトを実行してみる
$ sh ./1280x720.sh
変換したいファイル1
2019/08/15 13:26:33
1/2
変換したいファイル2
2019/08/15 13:31:08
2/2
$
変換されました
変換されたファイルを確認する
Ubuntuでmp4を再生するためにVLCプレイヤーをインストールしました
いつも通りaptでサクッと。
sudo apt install -y vlc
再生が出来ることの確認の際に
・音が出ること
・副音声などになっていないこと
・音ズレが起きていないこと
・再生したいデバイスで再生できること
がチェックできてると安心
コメント