忍者ブログ

素人翻訳

適当に翻訳する。

プログラムを読みやすくするために同一のファイルを2回走査することにした。

あるディレクトリ下にある全てのファイルに対して特定文字列の検索と置換を行い、置換が行われたファイルの名前だけを記録したいと考えた。
文字列置換が一切行われなかったファイルの名前は記録しないことにした。

そして、できれば同じファイルを2度走査したくない。

例えば、次の bash スクリプトの場合、「ファイル名」のファイルを2回走査している。(grepとsed)

grep -q "検索文字列" "ファイル名"
if [ $? -eq 0 ]; then
  echo "ファイル名" >> output.txt
  sed -i s/検索文字列/置換文字列/g "ファイル名"
fi

sed の戻り値を適切に設定してそれを確認することによって、1回の走査で目的を達成したかった。

いろいろと調べたところ、実際に sed で上記のことを行うのは可能であった。

sed のパターンスペースとホールドスペースを駆使して、置換が行われたか(検索文字列が存在したかどうか)を確認し、その結果によって返り値を変更するという方法である。

参考URL1:Return value of sed for no match

参考URL2:置換ができない/複数ある場合に sed の終了コード0以外にする

しかし、この方法だと、時間が経ってからコマンドを見返した時、処理内容を理解するまでに少し時間がかかってしまう。(自分の場合。)

そのため、最初に挙げた grep と sed で2回ファイルを走査するやり方で行くことにした。

令和のパソコンならテキストファイルを2回読んでもそれほど問題にならないと考えた。

PR

ffmpeg による動画連結で音ズレ発生(徐々にズレる)

webm のファイル複数を mp4 に変換し、変換後の mp4 ファイル複数を ffmpeg で連結したら動画の途中から少しづつ音と映像がズレるようになってしまった。

webm から mp4 へ変換は当初、次のコマンドによって行っていたが、これが良くなかったようだ。

ffmpeg -i "sample.webm" -c:v copy -c:a copy "sample.mp4"

作られた mp4 ファイルの1つ1つについて中身の符号化方式を ffprobe で確認してみたら、音声が 48000Hz の動画と 44100Hz の動画が混在していた。そのため、徐々に映像と音がズレていくことになった。(音は普通に聞こえるが、映像はある時はゆっくりになり、ある時は遅れた分を取り戻すかのように急に早送りになる感じ。)

webm から mp4 ファイルを作るコマンドを次のものに変えたら連結後の音ズレは直った。

ffmpeg -i "sample.webm" -c:a aac -ar 44100 "sample.mp4"

動画連結コマンドは次のものを使用。

ffmpeg -f concat -safe 0 -i filelist.txt -c copy sample_output.mp4

filelist.txt の中身は次の通り。

file 'sample1.mp4'
file 'sample2.mp4'
file 'sample3.mp4'
...
...

カレンダー

01 2026/02 03
S M T W T F S
1 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

最新コメント

[07/08 NONAME]
[07/08 NONAME]
[09/07 NONAME]
[08/18 NONAME]
[05/18 NONAME]

最新記事

(02/02)
(02/02)
(11/26)
(11/25)
(07/01)
(01/10)
(01/03)
(12/20)
(12/08)
(11/20)
(10/30)
(10/24)
(09/20)
(09/16)
(09/11)
(09/03)
(09/02)
(08/27)
(08/17)
(07/31)
(07/30)
(07/19)
(07/13)
(05/02)
(03/17)

ブログ内検索

広告

バーコード

広告