diary/Kojima

・動画と音声の分割,結合(その2)

画像で困ればnetpbm,動画で困ればffmpeg,と言われている通り, この手の作業を自動化するにはffmpegが使えるのでは,とあれこれ調べてみた.

ffmpegの場合,-vn オプションを指定すれば画像が,-an オプションを指定すれば音声が,それぞれ出力されないらしい. この機能を指定すればステレオ片チャンネルの動画ファイルから,音声データと画像データを分割できそう.

このあたりを見ると,-acオプションはずいぶん柔軟に音声入力を指定できるようで, 自前で5.1chなデータなんてのも作れるらしい.

とりあえずやりたいことは片チャンネルを欠くステレオ音声をモノラルにすることなので,-ac 1 を指定すればよさげ.また,ボリュームをあげるには -af "volume=5dB" という指定が使える.

ということで,音声をモノラルで取りだすのはこんな感じ.

ffmpeg -y -i $infile -vn -ac 1 -af "volume=5dB" temp.aac

一方,音声なしの動画データは -an で作れ,CODECを変える必要はないので,こんな感じでよさそう.

ffmpeg -y -i $infile -an -vcodec copy temp.mp4

最終的にこれらを一つにまとめるには,-i オプションで入力ファイルを複数指定する.

ffmpeg -i temp.mp4 -i temp.aac  $newfile

これらをまとめてシェルのforループから回せるように,st2mono.sh という名前のスクリプトにしてみた.

#!/bin/sh
infile=$1
ffmpeg -y -i $infile -vn -ac 1 -af "volume=5dB" temp.aac
ffmpeg -y -i $infile -an -vcodec copy temp.mp4
ffmpeg -i temp.mp4 -i temp.aac  New/$infile

あとは,作業用ディレクトリに変換が必要な動画ファイルを集めて,Newディレクトリを作り,

$ ls
316-1-01.mp4  316-1-06.mp4  316-1-11.mp4  316-2-04.mp4  316-2-09.mp4
316-1-02.mp4  316-1-07.mp4  316-1-12.mp4  316-2-05.mp4  316-2-10.mp4
316-1-03.mp4  316-1-08.mp4  316-2-01.mp4  316-2-06.mp4  316-2-11.mp4
316-1-04.mp4  316-1-09.mp4  316-2-02.mp4  316-2-07.mp4  316-2-12.mp4
316-1-05.mp4  316-1-10.mp4  316-2-03.mp4  316-2-08.mp4  New/

先に作ったスクリプトに食わせてやるだけ.

$ for i in 316*.mp4 ; do
> ../st2mono.sh $i
> done
(temp.aac作成)
ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
  built on Feb 28 2015 15:37:07 with gcc 4.8.4 (GCC)
  configuration: --prefix=/usr --libdir=/usr/lib64 
  ..
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '316-1-01.mp4':
...
  Duration: 00:04:00.47, start: 0.021333, bitrate: 918 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 782 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
 ...
 size=    2427kB time=00:04:00.44 bitrate=  82.7kbits/s    
video:0kB audio:2427kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

(temp.mp4作成)
ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '316-1-01.mp4':
...
  Duration: 00:04:00.47, start: 0.021333, bitrate: 918 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 782 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 782 kb/s, 29.97 fps, 30k tbn, 30k tbc (default)
    Metadata:
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
...
video:22958kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.356696%

(両者を合成)
ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'temp.mp4':
...
 Duration: 00:04:00.47, start: 0.021000, bitrate: 784 kb/s
   Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 782 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
...
Input #1, aac, from 'temp.aac':
 Duration: 00:04:02.13, bitrate: 82 kb/s
   Stream #1:0: Audio: aac (LC), 48000 Hz, mono, fltp, 82 kb/s
[libx264 @ 0x70e120] using SAR=1/1
[libx264 @ 0x70e120] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x70e120] profile High, level 3.0
...
Output #0, mp4, to 'New/316-1-01.mp4':
  Metadata:
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #1:0 -> #0:1 (aac (native) -> aac (libfaac))
Press [q] to stop, [?] for help
frame= 7207 fps=128 q=-1.0 Lsize=   24891kB time=00:04:00.44 bitrate= 848.0kbits/s    
video:22205kB audio:2427kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.048357%
[libx264 @ 0x70e120] frame I:38    Avg QP:20.25  size: 25932
[libx264 @ 0x70e120] frame P:2598  Avg QP:23.53  size:  6145
[libx264 @ 0x70e120] frame B:4571  Avg QP:28.00  size:  1266
[libx264 @ 0x70e120] consecutive B-frames:  4.1% 27.3% 20.1% 48.5%
...

このスクリプトで作成した動画ファイルは,無事モノラル音声になっている模様

mono_01.jpg

GUIなaudacityとavidemuxでやるのに比べて, スクリプト経由でffmpegを回すと人手がかからないのでずっと楽. こういう処理がちゃっちゃと組めるのがLinux/Unix環境の魅力だなぁ..



添付ファイル: filemono_01.jpg 96件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42