ffmpegならこちらへ 5

■ このスレッドは過去ログ倉庫に格納されています
2020/08/13(木) 19:43:45.34ID:j48XP1pP0
公式サイト
http://ffmpeg.org/

エンコード、ストリーミング配信を高画質高音質で行えるffmpeg。
OSに拘らず対応コーデックが多い。
対応コーデックが多く、多彩なオプションを使用可能。
コマンドラインから使用することができる。
ffmpegならこちらへ 4
https://egg.5ch.net/test/read.cgi/software/1555776689/
2020/11/03(火) 10:02:06.94ID:SyIktYEn0
Windows下でループバック録音によるビットパーフェクトを検証してます
現在WavSpectraで録音するとビットパーフェクトできる環境です
これをCUIにおきかえたくFFMpegでの録音方法を調べています

FFMpegの下記コマンドでは最下位ビットが常時化けるのですが
これを抑止する方法はありますか?
DirectShowを使っている時点でリサンプリング処理が入ってしまうんですかね

ffmpeg -y -f dshow -i audio="Virtual Audio Cable" "out.wav"
2020/11/03(火) 11:43:16.18ID:y36Tqz+s0
憶測だけどdshowの時点でだろうね

もしそうならDirectShowって「再生する(直前の生の)データ」じゃなくて「再生してるデータ」を渡してくるのかな?
それかキャプチャの周期が周波数の小数点以下の割合でずれてるとか?
2020/11/03(火) 12:56:17.84ID:y36Tqz+s0
ファイル形式やコーデック固有のオプションの検索(ffmpeg Documentationに載ってないものも有る)
https://google.com/search?q=site%3Affmpeg.org%2Fdoxygen+";libavformat"+OR+"libavcodec"+"Variable+Documentation"+"const%20AVOption%20options[]"+【ここに調べたいファイル形式(format / muxer / demuxer)やコーデック】

@新しい版のffmpegに対応するためにできるだけ更新日時が新しい検索結果のページに飛ぶ
A「Variable Documentation」という見出しの段落の「AVOption」のInitial value (初期値)を見る
2020/11/03(火) 12:56:58.47ID:SyIktYEn0
>>427
レスありがとうございます。
ffmpegでの録音時にdirectshowではなく
wasapiドライバを指定できれば解決すると思ってるんですが
その方法がわかりません。そもそもできるのかも含めて。
苦し紛れに試した下記も機能せず。
set SDL_AUDIODRIVER=wasapi

WavSpectraでもdirectsoundドライバで録音すると最下位ビットが常時化けます。
ffmpegはdirectshow時にリサンプリングが行われ
数値の扱いにおいて丸め誤差が生まれているのかな思います。
2020/11/03(火) 13:01:23.57ID:SyIktYEn0
>>428
こちらもありがとうございます
これから調べてみます
2020/11/03(火) 14:41:47.40ID:y36Tqz+s0
>>429
色々調査お疲れ様です
ドライバの指定は僕も気になったのでまた調べてみる
そもそも誤差はDirectShow全般じゃなくてffmpegのdshow固有の要因なのかな

>>430
>>428は自分用メモの意味が強くて今回のにはあんまり関係ないかも、ごめんね
(っていうのもffmpeg Devices Documentationのdshowのオプション説明にある情報以上は無かった)
2020/11/03(火) 14:50:42.12ID:y36Tqz+s0
>>428
あと428はformat・codecじゃなくてdeviceだった、正しくは以下
過去スレで僕がDocumentationに載ってないgifのオプションを見つけた時のと同じ類いのページがヒットする

format(gifなど)・codec(gifなど)は
https://www.google.com/search?q=site%3Affmpeg.org%2Fdoxygen+";libavformat"+OR+"libavcodec"+"Variable+Documentation"+"AV_OPT_TYPE_FLAGS"+調べたいformatかcodec

device(dshowなど)は
https://google.com/search?q=site%3Affmpeg.org%2Fdoxygen+";libavdevice"+"Variable+Documentation"+"const%20AVOption%20options[]"+調べたいdevice
2020/11/03(火) 15:53:41.32ID:SyIktYEn0
>>431
こちらこそ色々ありがとうございます。

その後、sox.exe と fmedia.exe でも同様の検証をしましたが
やはり無音の録音で、最下位ビットがランダム状態でした
(WavSpectra(wasapi)ではきれいに0x00が並びます)

またsox ,fmediaとも任意の録音デバイスは指定できますが
wasapiドライバを指定するには至ってません。

唯一soxは環境変数でAUDIODRIVERを指定可能でしたが
私の環境では設定できる値が"waveaudio"の一択でした。
(おそらくミキサー経由のドライバ)

sox ,fmediaが内部コードでどのAPI(DShow,DSound,MME)を使っているかは不明ですが
結局のところミキサーを経由しているのが原因っぽいですね。
2020/11/03(火) 17:15:43.02ID:y36Tqz+s0
>>433
重ねて検証お疲れ様です!
ミキサー通るだけで信号がぶれるなんて雑な設計で困りものだなぁ
さらっと調べた限りじゃWindowsのffmpeg環境だとdshow以外のやり方は見られなかった
2020/11/03(火) 17:32:41.79ID:y36Tqz+s0
またまた >>428 の修正、これで最後
ffmpegのソース斜め読みしてたら#defineのあと「AV_OPT_FLAG_〜」で文脈固有のオプションが定義されてるのが分かったので、下の検索で全部ヒットする

@下記の検索
A新しめのページに飛ぶ
(ここでソースコードのページならそこで"AV_OPT_FLAG_"をページ内検索して自力でオプション定義を探しに行く。説明ページならB以降でちょっと楽できる)
B見出し"Variable"の段落「const AVOption 」に続く「options []」の初期値を参考にする
CBが無ければ見出し"Macros"の段落の(OFFSET(x)じゃない方の)#defineのリンクに飛んでソースコードを確認(リンクから飛べばプログラムが理解できない人でも参考にできる感じの箇所に飛ぶ)

https://google.com/search?q=site:ffmpeg.org/doxygen/+%22define%22+AV_OPT_FLAG_ENCODING_PARAM+OR+AV_OPT_FLAG_DECODING_PARAM+OR+AV_OPT_FLAG_METADATA+OR+AV_OPT_FLAG_AUDIO_PARAM+OR+AV_OPT_FLAG_VIDEO_PARAM+OR+AV_OPT_FLAG_SUBTITLE_PARAM+【ここに調べたいcodecなりformatなりdeviceなり】
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

ニューススポーツなんでも実況