⧅ffmpeg DivX HomeTheater形式の生成

提供:yonewiki

⧅ffmpegに戻る

⧅ffmpeg DivX HomeTheater形式の生成 2

概要

 DivX HomeTheater形式に対応した車載オーディオやレコーダは結構ある感じです。この形式に自分の持っている音楽映像を個人的に変換して楽しむという事や自分で撮影した動画を編集して、話している内容にハード字幕を付けたりすることが出来ると嬉しい人は多いかもしれないと思って書く記事です。


 動画ファイルがあることが前提です。何も映像ファイルが無い人でも試したい人は、iPhoneで画面撮影した内容でやってみると良いと思います。iPhoneが無い人はWindowsでScreenpresoという画面キャプチャアプリで、画面のキャプチャをしてみるといいと思います。いずれのキャプチャにおいてもmp4形式になります。mp4の中身のエンコード形式はそれぞれ微妙に異なりますが、mp3ファイルもあるといいですね。ffmpegではほとんどの形式のデコード読み込みが出来るので、深く考える必要はないです。ただし、DivXにの再生に対応するデバイスが必要です。これがないとDivX形式にする意味が無いです。ハードウェアが無くても、例えば、Windowsで動画を見るために使うことも出来ます。DivX形式対応のプレイヤーは無料のモノも含め沢山あります。ナカナカ良い圧縮ができるので、荒い画質の動画を沢山、保有したい場合に便利だと思います。Bitrateは350kbps~500kbsくらいで十分楽しめる映像になります。


 DivXの30fpsでCBRの350kbpsの映像にすると5分くらいの映像で20Mbyte程度です。32GByteのSDHCカードとかに保存するとしたら、1枚に5分の映像が1600個くらい収まります。映画とかのファイルを持っているとしたら、70タイトル位入れられます。これをmicroSDを差してUSBに変換するような道具を使うと映画70本が車で楽しめたり、レコーダで見たり出来ます。MicroSDなんて、いくつでも持ち運べるので車の中に無限のMV・映画ライブラリーが保有できるということになります。


 オススメは車載DivXだね。パイオニアの液晶付きの2DIN系のAVユニットを取り付けるともれなく楽しめそう。1DINでも映像表示ディスプレイがついてるやつは対応してたりする。そしたら、ナビ付けれねぇってなるでしょ。そんなときにオンダッシュナビです。パナソニックのゴリラ・ストラーダとかカロッツェリアエアナビとか他社のでもいい。安いし、車速センサー付きのやつだと正確だし、盗まれにくい。目線が高くなって運転しやすい。いいことづくめ。オーディオとナビが分かれていると独立していて操作しやすい。オーディオに特化してるユニットは音楽好き、映像好きにはたまらない使いやすさだよね。最近のは進化がすごい。


 力説しましたが、必要の無い人には、意味ないわな。手軽にたくさんの映像を持ち運びたいというニーズとデバイスが無いと全く興味の無い話です。

 手順としては、動画を作る。動画の形式情報を確認する。音声ファイルだけ分離する。音声ファイルを編集する。動画ファイルのass形式字幕を作る。動画から、使いたい領域にしぼるクロップのいう処理をする。動画サイズを再生するデバイスのサイズに合わせて大きさを変える。場合によっては上下左右に黒帯を付ける。そして、生成した字幕をくっつける。最後にHomeTheater形式にあったDivX形式(同じmpeg4形式でもDivX形式じゃないと駄目です。)の動画にDivX形式(同じmp3でもDivX形式のmp3でないと微妙な違いがあるため駄目です)の音声に変換しつつ、くっつける。この時fpsは30fpsにAspect比16:9の映像にします。更に、動画と音声の音声をCBRに近づける工夫をします。CBRなんてものは幻想なのですが、CBRと言えるものにします。


 そんな感じです。手順は結構長いです。覚えれば、DivX形式で自分好みの映像が作れるようになります。なんならYouTubeに乗っけれるくらいのクオリティの動画も作れちゃうかも知れません。自分はYouTuberにはなりませんけど。

 

DivX HomeTheater形式を再生できる車載プレイヤーの代表的なモノ

  • DVH-570
  • DVH-P530
  • FH-770DVD 管理人所有プレイヤー
  • FH-780DVD
  • FH-6500DVD
  • FH-8500DVS
  • FH-9200
  • DMH-SZ700

 

mp4形式の動画を作るキャプチャ方法 iPhone編

 画面録画の機能は、iPhoneのiOS場合画面、画面下端から上にスワイプした時に出てくるコントロールセンターと呼ばれる画面から操作できます。iPadの場合右上あたりから下にスワイプするとコントロールセンターの画面が表示されます。残念ながらデフォルトに近い状態で使っている場合は画面録画の機能はコントロールセンターに追加されていません。追加するには次の手順を踏む必要があります。


  • [設定]アプリを開く。


  • [コントロールセンター]の項目をタップ
コントロールセンターを開く(流石にこれも画像なくてもわかるか…)


  • [画面録画]の追加をする「+」マークをタップ
画面録画を追加


 これで画面録画が追加されました。コントロールセンターを見るとこんな感じのものが増えています。


画面録画ボタン


 画面録画ボタンを長押しタップすると以下のような画面録画の設定画面に移動します。

画面録画設定画面


 この画面で何処に画面収録した動画ファイルを送るかの設定が出来ます。動画を受け取ることが出来るアプリが真ん中に並んでいるのでスワイプを駆使して、対象のアプリを選択します。自分は最初から導入されているiOSのアプリ、写真アプリに保存しています。


 もう一つ、赤枠の部分のマイクというボタンで、ON状態にすると、iPhoneの通話マイクを使って、外部の自然環境音が録音されます。OFFにするとiOSの内部で鳴っているサウンドだけを保存するモードになります。 このモードは優秀で、iOSで小さい音が出力される状態や無音の状態でも内部で鳴っている出力のために音量を調整する前の波形そのものをキャプチャしてくれるので、大音量にする必要がないのが嬉しいですね。


 青枠で囲った録音開始を押すとこの画面からも画面録画がスタートできます。3秒のカウントダウン後。「ピコーン」ってなって画面録画が始まります。このピコーンっていう音は画面録画の最初の部分で記録されます。気になる場合は、動画のオーディオ部分を編集するか、動画編集でトリミング、サイズ調整で最初の1秒くらいの部分を切り落とす必要があります。  

 コントロールセンターで先ほどは画面録画のボタンをロングタップしましたが、通常のタップをすると、現在の画面録画の設定で、画面録画が開始されます。録画開始のカウントダウンが始まります。


 こんな感じ。


IMG 0316.PNG

 カウントダウン中です。2秒前だと、こうなります。速くコントロールセンターを閉じて、録画したい画面を表示させると良いでしょう。


 録画を終える時は電源ボタンを短く押せば終わります。画面は一度OFFになります。もう一度、コントロールセンターを開いて、画面録画ボタンを押しても終わりますが、動画の終わりにコントロールセンターの画面が表示されるのは具合が悪い場合もあるかもしれません。あとで動画編集する予定ならば、トリミングなんてのは基本機能なので、気にする必要は無いのかも知れないです。録画が終わると、写真アプリに動画ファイルがmp4形式で保管されています。下のようなメッセージ表示されます。


画面録画完了通知


 あとは写真アプリから、写真を選択(選択ボタンは画面の上のとこあります。それからそれぞれの動画ファイルのサムネイルを選択)して共有ボタン(共有ボタンは左下の四角から上矢印が出ているマーク)からファイルに保存(割かし下の項目を表示させるべく方向に向かってスワイプしないとファイルに存の項目は出てこない)を選択して、iCloudに保管して、WindowsPCからiCloudのファイルをダウンロードするという作業をすれば、ffmpegで処理が始められます。


 WindowsでiCloudに接続するには iCloudアプリをMicrosoft App Storeから入手する必要があります。

mp4形式の動画を作るキャプチャ方法 Screenpresso編

 Windowsの操作画面を動画で録画するにはScreenpresso (公式サイト)を使うという方法があります。Screenpresso左下にロゴが入ってしまうので、クロップ[Crop](画面サイズ切り抜き変更)という作業をしなければ純粋な動画は作れないのが辛いところです。3691円を支払えば、プロ版を使うことが出来るので、ロゴも入らないし、音声も含めてキャプチャできるようになります。PC側の処理速度が十分あれば、スムースな動きの動画をキャプチャすることができます。これくらいの性能になると動画にロゴが出るとか制限をかけてくるのが普通ですね。自分はクロップして使う方法で事足りていますので、無料版を使っています。


 インストールしたらCtrl+PrintScreen(PRTSC)キーで、指定領域の動画撮影が出来ます。領域を広くした分だけ、処理は重たくなりますし、ファイルサイズも大きくなります。終わるときは、PrintScreenキーです。


 これでffmpegで遊ぶ準備が出来たと思います。


ffmpegで変換したいファイルの情報を見る

 まずはiPhoneで録画したものがコチラ。

C:\...>ffmpeg -i input_iOS_capture.MP4
ffmpeg version 4.3.1-2020-11-02-full_build-www.gyan.dev Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.0 (Rev3, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input_iOS_capture.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: isommp41mp42
    creation_time   : 2020-XX-XXTXX:57:39.000000Z
  Duration: 00:05:21.51, start: 0.000000, bitrate: 4957 kb/s
    Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      creation_time   : 2020-XX-XXTXX:57:39.000000Z
      handler_name    : Core Media Audio
    Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709/bt709/iec61966-2-1), 750x1334, 4826 kb/s, 24.37 fps, 60 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2020-XX-XXTXX:57:39.000000Z
      handler_name    : Core Media Video
At least one output file must be specified

   上記の情報から動画は、avc1のH264(High)形式(H.264とMPEG-4 AVCは同じ意味で、H.264はITU-T(:International Telecommunication Union Telecommunication Standardization Sector国際電気通信連合の通信部門)での呼び方で、MPEG-4 AVC(Advanced Audio Coding)という名称の圧縮方式にあなっています。)で750x1334pxのサイズでビットレート、4826kbpsの24.37fpsというヌルヌルの動作をする動画形式であり、24.37fpsという中途半端なことこの上無い形式であることがわかります。何気に高性能だわiPhone。

tbr,tbn,tbcは数値の逆数の値が本当の数値の意味するモノになります。

  • tbr = tbrはVideoStreamのr_time_baseという値で実ベースフレームレートです。ビデオフレームレートを探すときに得られる値です。すべてのタイムスタンプを正確に表現できる最小フレームレートで、サンプルのキャプチャ動画では60tbr(time base rate)になっていて、これの逆数が1フレームあたりの秒数であることを今しています。このタイムスタンプに従うならば使うには60fpsで再生されたいとする設定がされています。
  • tbn =VideoStreamのtime_baseはフレーム・タイム・スタンプが表される基本的な時間単位 (秒単位)です。サンプルのキャプチャ動画では1/600秒になっています。 フレームレートの10分の1の時間がbaseになっています。
  • tbc =AVCodecContext>time_baseは特定のストリームに使用されるコーデックのAVCodecContextのタイムベースです。サンプルのキャプチャ動画では1/1200秒になっています。フレームレートの20分の1です。


 こんな複雑な動画形式上手くデコードできるプレイヤーは、かなりの新進気鋭のソフトウェアだね。古いデバイスとかだと音ズレとかしやすい。そして音声はmp4aのaac(LC:Low Complexity)形式(mp4aはmp4のAudioコンテナで、その中にaac=Advanced Audio CodingのLC形式が格納されているイメージで良いです。 )でビットレート126kbpsでサンプリング周波数44.1kHz。これまた中途半端なビットレートです。普通は128kbpsとかが多い気がします。癖が強いな。


 次にScreenpressoでキャプチャした動画は、

ffmpeg -i Screenpresso_Capture.mp4
ffmpeg version 4.3.1-2020-11-02-full_build-www.gyan.dev Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.0 (Rev3, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Screenpresso_Capture.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:17.07, start: 0.000000, bitrate: 65 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 244x130, 5 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 32000 Hz, mono, fltp, 74 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

 こちらもh264ですね。15fps。少なすぎる。カクカクだな。Pro版はもっとぬるぬるなのかな。ビットレートは5kbps。少なっ!AudioもiPhoneと同じだ。aac mp4aね。サンプリングレートは3.2kHz。低いし、あんまり見ないレートだな。monoサウンドらしい。ビットレートは74kbps。低めだな。これもProならもう少しいい音になるのかな?それとも設定でいじれるのに自分が気付いていないだけか。この形式の動画を生成したエンジンの名前だけが違うみたいだ。screenpressoは大企業相手にも販売しているソフトウェアなので、自前のコーデックなのかもしれない。

音声ファイルを抽出する

 動画づくりの場合は撮影した音声ファイルを編集したい人もいると思うので、効果音なんかを追加することを想定してまずは映像から音声だけを抽出する処理をやってみます。大丈夫です。後からくっつけれるようにします。ここからはどちらの動画も同じ形式なので、一つのファイルだけで説明をします。

後日記:

 やべぇ、ここから、モノラル音源作成完了までの手順いらなかった。めっちゃながながと書いたのに。でも消さないわ。だって何かの役に立つかもしれないから。Sub Station Alphaというアプリケーションを使って字幕作る場合と混同してた。でもSub Station Alphaで使える技術だし、なおのこと必要な記事かもね。でもSubStationAlphaでは符号化bit深度(8bitならサンプリング音量レベルの分解能を256段階にするという意味。32bitはintとfloatがある。浮動小数点数)を8bitにしないと駄目でした。もう一工夫必要でした。bit深度は大きければいいというものではありませんが、8bitはさすがに音楽としては役不足です。なのでFL Studioでは8bitにできませんでした。会話だと話が聞き取れればいいので、8bitでもいいですけどね。ー後日記、ここまでー


 ffmpegの以下のコマンドだけで、動画に埋め込まれた音声ファイルの形式のままで取り出せます。

ffmpeg -i input.mp4 -acodec copy -map 0:1 output.mp3

 音声ファイルの形式を変更して取り出したい場合は上記の copy という記述部分を変更します。copyは元の形式のままということを意味しています。

ffmpeg -i input.mp4 -acodec [ここに変換する形式を指定する] -map 0:1 output.mp3
  • mp4あるいはflv形式の動画ではmp3かaac
  • webm形式の動画ではvorbisかopus

 と、いったように動画ファイル自体には組み込める形式の制限はあります。


 抽出(Extract)は、自由な形式で抜き出せます。オーディオ形式として指定できるキーワード以下の通りです。拡張子の情報を付けましたが、拡張子なんてものはソフトウェア側のさじ加減である部分もあります。一つのフォーマット形式を複数のソフトウェアの拡張子が対応していることは多いです。例えばRealAudioというソフトウェアで、拡張子*.raとなっていれば、中身の形式がaacでエンコードされた形式なら読み込めるということを意味しています。*.aacという拡張子のままの方が都合が良いソフトウェアもあります。固有の拡張子にしないと読み込めないソフトウェアもあるかもしれません。キーワード名(エンコード名)の後ろに、代表的な拡張子を記載しておきます。逆に、対応する拡張子であっても、ソフトウェアによっては読み込めない形式もあります。その拡張子が対応しているソフトウェアだからといって絶対開けるということはありません。拡張子とその形式の組み合わせが揃ってこそ開けます。

利用できるオーディオコーデック

DivX の場合は libmp3lame .mp3
 ※他の形式だとDivX規格を満たしません。DivX認証を受けている機器では、
  基本的には駄目です。パソコンで鳴らす分にはdecoderさえあれば、
  再生してくれる事が多いです。


aac(*.m4a,*aac/*.mka(matroska Audioファイル)/*.ra*,*..rm,
  *.rmvb(RealAudioファイル))
ac3、ac3_fixed(.ac3/*.avi/*.vob/*.m2ts/*.mp4)
adpcm_adx(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
adpcm_g722、g722(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
adpcm_g726、g726(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
adpcm_g726le、g726le(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
adpcm_ima_qt、(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff) 
  Apple QuickTime用に開発されたADPCM Encoder
adpcm_ima_ssi(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
  Simon&Schuster(サイモン&シュフスター) Intaractive出版物用に
  開発されたADPCM Encoder
adpcm_ima_wav(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
adpcm_ms(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
  MicrosoftのSoftware用に開発されたADPCM Encoder
adpcm_swf(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
  Macromedia Shockwaver用に開発されたADPCM Encoder
adpcm_yamaha(*.wav/*.mov/*.mkv/*.mka/*.brstm/*.aif/*.aiff)
  Yamahaのオーディオ機器用に開発されたADPCM Encoder
alac(*.m4a/*.mov/*.alac)Apple Lossles Audio Codec
amr_nb、 libopencore_amrnb(*.amr)Adaptive Multi-Rate Narrow Band 
  ノキア、エリクソン、シーメンスで共同開発。電話用音声として策定
amr_wb、libvo_amrwbenc(*.awb)Adaptive Multi-Rate Wide Band 
  ノキア、エリクソン、シーメンスで共同開発。
  電話用音声形式として策定
aptx(*.aptx) Audio Processing Technology for Bluetooth 
  半導体ファブレス事業を行うクアルコム社が策定した
  Bluetooth通信用の形式
aptx_hd(*.aptx) Audio Processing Technology HD for Bluetooth 
  半導体ファブレス事業を行うクアルコム社が策定した
  Bluetooth通信用の形式
comfortnoise 不明
dts、dca(*.dts)
  dts社が策定したdolbyより後発の規格です。
  普及率ではdolbyが勝ります。
  古いDVDプレイヤーでは再生できない事があります。
  音だけの再生で見るとDVD-Audioという規格でしたが、
  近年はSA-CD(SuperAudioCD)が5.1ch音楽の規格として普及しています。
  SA-CDを個人で作ることは出来ません。
  特殊なSA-CDもどきは作れてごく一部で対応した再生機器があります。
  dsdという規格です。
eac3(*.eac3)
  Dolby社が開発したDolby Digital Plus形式で、
  VLC media playerで再生できます。
flac(*.flac/*.fla(拡張子はAdobe Animateと重複)
  /*.oga/*.ogg/*.mkv/*.mka)Free Lossless Audio Codec 
g723_1(*.?) 
  G.723.1は狭帯域幅の音声向けコーデック 
  そのままの形式でどうやって聞くのか分からないっす。
gsm、libgsm(*.?) global system for mobile communication 
  イギリスの通信会社が策定した2G世代の通話音声コーデック 
  そのままの形式でどうやって聞くのか分かりません。
gsm_ms、libgsm_ms(*.?) 
  gsmのマイクロソフト策定版
ilbc、libilbc(*.?) 
  米国Global IP Solutionsが策定した音声用コーデック 
  そのままの形式でどうやって聞くのかわかりません。実際にGizmo5、
  Ekiga、QuteCom、Google トーク、Yahoo! Messengerで
  使われている形式
mlp(*.?)Advanced Audioという
  ブランドを持つMeridian Lossless Packing形式 は
  Meridian Audio社が作成したもので、Blu-rayやHD-DVDプレイヤーに
  必ず搭載されているコーデックの一つ。
mp2、mp2fixed、libtwolame(*.mp2/.mpc) 
  mp3の前身でVideo-CD(CompactDiscDigitalVideo)に
  使われている形式のオーディオ。
  mpeg2動画は*.m2pという名前になる。
mp3、libmp3lame、libshine(*.mp3)
  最も有名なオーディオ規格です。
nellymoser(.asao)
  Asaoはネリモーザー社が策定しマクロメディア社に
  ライセンスされた形式です。
  FLASH 6以降のバージョンで対応する形式です。
opus、libopus(*.ogg/*.opus)IETF(The Internet Engineering Task Force:
  インターネット技術特別調査委員会) によって策定された音声ファイル。
pcm_alaw(*.wav/*.pcm/*.raw)G.711※G.711のような形式は
  ITU-Tが策定する規格。 A-law。
  PCMはwavという拡張子がよく付けられるが解釈できるかどうかは
  ソフトウェア次第。
  多数のエンコードを使い始めると謎の箱っていうイメージになっていく。
  特殊なPCMエンコーダの利用には手を出さない方がいい。
  ffmpeg Misterなら、操り切れますけどね。そんな人、一握りでしょう。
pcm_dvd(*.wav/*.pcm/*.raw) dvd向けのpcm
pcm_f32be(*.wav/*.pcm/*.raw)  32bit浮動小数点量子化ビッグエンディアン
  ※ビッグエンディアンは8ビット符号化されたサンプルブロックを
  メモリ番地の小さい方から値を詰めていく方式。
  リトルは逆で割り当てられたメモリ番地の大きいところから
  埋めていきます。
  じゃあビッグエンディアンが普通な感じだし、ビッグエンディアンが
  幅を効かせるに決まってるじゃんと思うかもしれませんが、
  Windowsはリトルエンディアンです。
  32bitの場合は8bitの塊が4つで構成されますが、その4つがメモリ番地の
  大きい方から埋められるのがリトルエンディアンです。一長一短なのです。
  ビットの取り出し手順や切り捨ての手順で処理スピードに差がある
  ということを意味していますが、それが一長一短なのです。
pcm_f32le(*.wav/*.pcm/*.raw) 32bit浮動小数点量子化リトルエンディアン
pcm_f64be(*.wav/*.pcm/*.raw) 64bit浮動小数点量子化ビッグエンディアン
pcm_f64le(*.wav/*.pcm/*.raw) 64bit浮動小数点量子化リトルエンディアン
pcm_mulaw(*.wav/*.pcm/*.raw) μ-lawアルゴリズム 
  国際通話ではA-lawアルゴリズムが優先される仕組みになっている。
pcm_s16be(*.wav/*.pcm/*.raw) 符号付き16bitビッグエンディアン
pcm_s16be_planar(*.wav/*.pcm/*.raw) 符号付き16bitビッグエンディアン
pcm_s16le(*.wav/*.pcm/*.raw) 符号付き16bitリトルエンディアン
pcm_s16le_planar(*.wav/*.pcm/*.raw) 符号付き16bitリトルエンディアン
pcm_s24be(*.wav/*.pcm/*.raw) 符号付き24bitビッグエンディアン
pcm_s24daud(*.wav/*.pcm/*.raw) 符号付き24bitビッグエンディアン 
  5.1ch D-Cinema向け
pcm_s24le(*.wav/*.pcm/*.raw) 符号付き24bitリトルエンディアン
pcm_s24le_planar(*.wav/*.pcm/*.raw) 符号付き24bitリトルエンディアン
  ※Planarはステレオ音声がブロックの単位で左の音声右の音声という
  カタチなっている。
  通常のものは左右左右みたいにデータが交互に並ぶ。要するにデータの
  並べ方が違うだけ。
pcm_s32be(*.wav/*.pcm/*.raw) 符号付き32bitビッグエンディアン
pcm_s32le(*.wav/*.pcm/*.raw) 符号付き32bitリトルエンディアン
pcm_s32le_planar(*.wav/*.pcm/*.raw) 符号付き32bitリトルエンディアン
pcm_s64be(*.wav/*.pcm/*.raw) 符号付き64bitビッグエンディアン
pcm_s64le(*.wav/*.pcm/*.raw) 符号付き64bitリトルエンディアン
pcm_s8(*.wav/*.pcm/*.raw) 符号付き8bit
pcm_s8_planar(*.wav/*.pcm/*.raw) 符号付き8bit
pcm_u16be(*.wav/*.pcm/*.raw) 符号無し16bitビッグエンディアン
pcm_u16le(*.wav/*.pcm/*.raw) 符号無し16bitリトルエンディアン
pcm_u24be(*.wav/*.pcm/*.raw) 符号無し24bitビッグエンディアン
pcm_u24le(*.wav/*.pcm/*.raw) 符号無し24bitリトルエンディアン
pcm_u32be(*.wav/*.pcm/*.raw) 符号無し32bitビッグエンディアン
pcm_u32le(*.wav/*.pcm/*.raw) 符号無し32bitリトルエンディアン
pcm_u8(*.wav/*.pcm/*.raw) 符号無し8bit
pcm_vidc(*.wav/*.pcm/*.raw) 
  Acorn Archimedesアコーンアルキメデス社のコンピュータで
  使われたVIDCエンハンサー向けPCM
ra_144、real_144(*.ra/*.rm/*.rmvb/*.ram/*.smil) 
  米国リアルネットワークス社が策定したもの。
  *.rmvbはRealMedia variable bitrateの意で*.rmはビデオ形式。
  *.ramと*.smilはストリーミング形式。
  リアルオーディオビデオ自体は他の形式の音声も取り込める。
roq_dpcm  
  id Software社が策定したマルチメディア ファイル(DPCM(差分PCM)形式)
s302m(*.?)
  SMPTE(Society of Motion Picture and Television Engineers:
  米国映画テレビ技術者協会)が策定した形式。LPCM/TSの規格で
  高度衛生デジタル放送の音声符号化形式。
  SMPTEはタイムコードを付けることに関する技術を
  策定した機関でもあります。
sbc(*.wav)Bluetoothの伝送で使われるcodecです。
sonic(*.?)調査しましたが出所不明のcodec
sonicls(*.?)同じく不明のcodec。lossless形式らしい。
speex(*.spx)
  Voice of IP(ネット通話音声形式)でOpusが上回るとして、
  技術はopusに移行されている。opusがあるので、
  廃止方向になっている。
truehd(*.mlp)ドルビーラボトリーズ社策定のTrueHDは可逆音声コーデック
tta(*.tta/*.mkv/*.mka)The True Audioは可逆圧縮で
  Matroskaに対応している。
  matroska(マトロスカ)はマルチメディアコンテナフォーマット
  (*.mkv/*.mka/*.mks/*.mk3d/)
vorbis(*.ogg) Xiph.orgが開発した非可逆音声 liborbisの仲間。
wavpack(*.wv) 可逆圧縮コーデック *.wavとは異なるもの
wmav1(*.wma)WindowsMediaAudioはマイクロソフトの策定した形式
wmav2(*.wma)WindowsMediaAudioのビットストリームの
  構文や圧縮アルゴリズムをマイナーチェンジしたと言われている。


 やべぇ、この記事。書き始めるんじゃなかったっていう位、深すぎる。対応しているファイル形式多すぎてヤバイ。よくわからないものを放置して貼るのも嫌だし、わからない奴は逐一、どういうものか調べた。Wikipediaだけでは分からない全貌だった。いろんなところ彷徨った。やべぇ。生きて帰ってこれただけマシなネットサーフィンだった。いい波来てたけど乗りこなせなかった。そんな感じ。

 

音声ファイルを編集する

 動画の音声ファイルを編集する必要は無い場合もありますが、ここでは自分で映像に字幕を付けることを目的とした音声ファイル編集をします。音が小さいので全体をノーマライズにより音が割れない程度に全体の音量の割合を上げることをしてみたり、車で映像を見るので音楽より音声を引き立てる編集とか、全体の音量に激しい差があって一定の心地よい音量にした場合、一部の場面で音が全く聞こえないなどの問題を解決する音圧を上げるということや動画配信のために効果音を付け足したりする編集はそれぞれでやってもらえればと思います。


 字幕をつけることを目的とした音声ファイル編集とは何?という疑問があると思いますが、音や会話に合わせて字幕をつけるには音と映像を見ながら字幕を付けていく作業になると思いますが、フリーの字幕作成アプリでは、モノラル音声しか対応しないといった制限があったりするので、前の作業で抜き出したAudioファイルがステレオ音声の場合にモノラルに変換する作業について説明します。


 2つの方法を示します。わかる人は他の方法でも出来ます。

  • ffmpegでのStereo→mono変換やLR分離やLR統合をする。
  • 完全FreeのWave編集ツール「SoundEngine Free」を使って、LR分離を行う。
  • FL StudioのEdisonという波形編集ツールでLR分離を行い。LR統合をする。


 SoundEngineの方法では左か右のどちらかしか使わないMono音声なので、ひょっとしたら振り切ったパン(例えば左側の音量100%右は0%のトラックがある。あるいはその逆)をしている音声があった場合聞き取れなくなる懸念はあります。後者は完全に両方の音声を活かしたmono音声なので欠落が少ないはずです。


ffmpeg

 モノラル変換もffmpegでやれます。モノラルは英語でmonoで通じますが、正式にはmonauralあるいはmonophonicです。そしたらmonaじゃねぇの?と思うかもしれませんが、monoです。あらゆる場面でmonoです。monatoneとか言いません。

 ffmpegによるステレオ→モノラル変換。

ffmpeg -i inputStereo.mp3 -ac 1 outputMonaural.mp3

 逆も出来ます。

 ffmpegによるモノラル→ステレオ変換。

ffmpeg -i inputMnoaural.mp3 -ac 2 outputMono2Stereo.mp3

 この時点では両チャンネルが同じ波形になっています。ここからステレオ音声での編集がStartしますので、とっかかりとしては役に立つかもしれません。

L(左)チャンネルのみ取り出す。

ffmpeg -i inputStereo.wav -af pan="mono|c0=c0" OutputLchOnlyMono.wav

R(右)チャンネルのみ取り出す。

ffmpeg -i inputStereo.wav -af pan="mono|c0=c1" OutputRchOnlyMono.wav

 -afはオーディオエフェクト関連のオプションが始まることを意味していて。panをmono|c0に設定でmono音声に変換することを意味していて、c0=c0で入力の左チャンネルを新たなc0に設定するという感じです。反対のチャンネルも同じことをしています。

 c0=FC、c1=FL、c2=FR、c3=LFE、c4=BL、c5=BRに対応していて、c0は5.1chのセンタースピーカーにも対応していて、2chスピーカーとしては「FC=mono|c0 (mono)」で「FL=steleo|c0 (stereo)」と「FR=steleo|c1 (stereo)」はステレオの左と右の音声を扱うチャンネルとして処理されます。LFE=LowFrEquencyで低音のウーファーのためのチャンネルでBL、BRは後ろの左、右という意味です。それがc0のようなc[数字]という形式でも表現できるということです。

ffmpeg -i inputStereo.wav -af pan="mono|c0=c0" OutputLchOnlyMono.wav
ffmpeg -i inputStereo.wav -af pan="mono|FC=FL" OutputLchOnlyMono.wav

 は同じ意味になります。

 結合は以下のとおりです。

ffmpeg -i monoFrontLeft.wav -i monoFrontRight.wav -filter_complex "[0:a][1:a]amerge=inputs=2,pan=stereo|c0=c0|c1=c1[aout]" -map "[aout]" MonoMono2Stereo.wav
ffmpeg -i monoFrontLeft.wav -i monoFrontRight.wav -filter_complex "[0:a][1:a]amerge=inputs=2,pan=stereo|c0<c0|c1<c1[aout]" -map "[aout]" MonoMono2NormalizeStereo.wav
ffmpeg -i stereoFrontLeft.wav -i stereoFrontRight.wav -filter_complex "[0:a][1:a]amerge=inputs=2,pan=stereo|c0<c0+c1|c1<c2+c3[aout]" -map "[aout]" StereoStereo2NormalizeStereo.wav

 一番上とその下はモノラル音声ファイル2つをステレオファイルに統合する変換です。上はそのままくっつけるだけです。下はNormalizeをします。

 一番下はステレオ音声二つをくっつけて、一つ目のステレオの音声の右と左を足し合わせた音を左、もう一つの音声をのステレオ音声の右と左を足し合わせた音を右にしてステレオ音声を一つ作るという方法です。c0c1c2c3の組み合わせをいろいろ変えれば、いろいろな結合が出来ることを想像できると良いのですが、大丈夫かな(´・ω・`)


 難しい変換ですが、-fileter_complexはフィルターチェーンを後ろに定義します。っていう意味です。フィルターていうのは映像音声加工のある部分を消したり重ねたり特定の見せ方にしたりという処理で、それをまとめていくつか書きますっていうことです。「"」ダブルクォーテーションで囲ったところが、そのチェーンで「,」カンマが各フィルターの区切りになっています。[0:a][1:a]amerge=inputs=2で入力記載された順番で0:a 1:aという名前で扱うとして、二つのファイルを結合するという意味になっています。このとき各チャンネル(ステレオファイルの1の左、右/2の左、右)はc0から順番にc0,c1…c3と名前をつけていくことを意味しています。モノラルならチャンネルは1コなので一つしか増えませんね。pan=の後の意味は一番上の例でいうと音声の左右の振り分けの設定は、stereoの設定として出力ファイルのc0が左、c1が右としてチャンネルは左のc0=c0で一つ目のモノラルファイルの一つしかないチャンネルc0をそのまま割り当て、右はc1=c1で2つ目のファイルの一つしかないチャンネルがc1なのでそれを割り当てます。それを[aout]という名前の出力とします。[aout]はオーディオの出力という意味です。それを-map "[aout]"として展開して、それを出力ファイルとして吐き出そうみたいな指定になっています。


 今回は使わないですが、Sub Station Alphaで読み込めるようにするには、更にビット深度を8bitにしておく必要があるので

ffmpeg -i inputMono.wav -acodec pcm_u8 output8bitMono.wav

 というコマンドを使います。

 

SoundEngine Free

 こちらの方法を使う場合はオーディオファイルの形式はwavである必要があります。

ffmpeg -i input.mp4 -map 0:1 output.wav

 で変換できます。変換するコーデックが指定されていない場合でも拡張子から、変換するに使用するべきcodecをffmpegが自動で割り当てしてくれます。.wavの場合はWindows10 64bit環境ではpcm_s16leエンコーダーが使われます。他の環境ではどうなるのか知りません。どちらにしてもWindows用の説明なので、分からなくても問題ないです。

  • SoundEngine Freeで読み込む。
  • メニュー[ファイル]-[その他の保存]-[LR分割保存]
  • まず左チャンネルのwavを名前を付けて保存。
  • 次に右チャンネルのwavを名前を付けて保存。2回分の保存画面が続けて表示されます。


 残念ながらモノラルとして片チャンネル抽出はできますが、2つを合わせる方法はありません。

後日記:

 無いと思っていたらありました。メニューの[編集]-[フォーマット変換]でした。選択するとダイアログが表示されるので、そこでチャンネル数を2~1に変更するだけで、ステレオからモノラルにも出来ます。ビット深度も変更できます。同時にノーマライズもしてくれるみたいです。ー後日記、ここまでー

 

FL Studio20

 自分が持っているDAWアプリです。ffmpegのような操作ができるのか確認しました。

 結論、やれますが、手順が複雑かつ、長いので別記事にします。

 FL Studio ステレオ左右分割→モノラル変換/ステレオ→モノラル変換

後日記:

 ビット深度8bitには出来ないので、今回は使いませんが、Sub Station Alphaでは、8bitでないと読み込めないです。別の手順を使いましょう。ー後日記、ここまでー

続きの記事はコチラ

⧅ffmpeg DivX HomeTheater形式の生成 2

 

関連情報

AviUtl 動画に凝った字幕をつける

 

⧅ffmpegに戻る