質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

SDL (Simple DirectMedia Layer)

SDL (Simple DirectMedia Layer)は、C言語で記述されたクロスプラットフォームのマルチメディアライブラリです。画像や音などを 統一してアクセスするためのAPIを提供。LinuxやWindows、各種MacOSなどを公式にサポートしています。

Q&A

0回答

1310閲覧

FFMPEGの再生時に音がでない

kokawa2003

総合スコア217

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

SDL (Simple DirectMedia Layer)

SDL (Simple DirectMedia Layer)は、C言語で記述されたクロスプラットフォームのマルチメディアライブラリです。画像や音などを 統一してアクセスするためのAPIを提供。LinuxやWindows、各種MacOSなどを公式にサポートしています。

0グッド

0クリップ

投稿2019/02/13 08:59

編集2022/01/12 10:55

ffmpeg をWINDOWS7のMINGWで使っていますが音がでないので困っています。
ffmpegのバージョンは4,1です。
たとえば(Msysの)SHELLからFFMPEGでmp4を再生します。

shell

1$ ffplay MOV_0338out2.mp4 2ffplay started on 2019-02-13 at 17:45:39 3Report written to "ffplay-20190213-174539.log" 4ffplay version 4.1 Copyright (c) 2003-2018 the FFmpeg developers 5 built with gcc 8.2.1 (Rev1, Built by MSYS2 project) 20181214 6 configuration: --prefix=/mingw64 --target-os=mingw32 --arch=x86_64 --disable-debug --disable-static --enable-dxva2 --enable-d3d11va --enable-fontconfig --enable-gnutls --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libcaca --enable-libcelt --enable-libfreetype --enable-libgsm --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libspeex --enable-libsrt --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libxvid --enable-libvpx --enable-libwebp --enable-openal --enable-libwavpack --enable-pic --enable-postproc --enable-runtime-cpudetect --enable-shared --enable-static --enable-swresample --enable-version3 --enable-zlib --disable-doc 7 libavutil 56. 22.100 / 56. 22.100 8 libavcodec 58. 35.100 / 58. 35.100 9 libavformat 58. 20.100 / 58. 20.100 10 libavdevice 58. 5.100 / 58. 5.100 11 libavfilter 7. 40.101 / 7. 40.101 12 libswscale 5. 3.100 / 5. 3.100 13 libswresample 3. 3.100 / 3. 3.100 14 libpostproc 55. 3.100 / 55. 3.100 15Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'MOV_0338out2.mp4': f=0/0 16 Metadata: 17 major_brand : isom 18 minor_version : 512 19 compatible_brands: isomiso2avc1mp41 20 encoder : Lavf57.83.100 21 location-eng : +35.6603+139.3289/ 22 location : +35.6603+139.3289/ 23 Duration: 00:00:31.86, start: 0.000000, bitrate: 6191 kb/s 24 Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 6079 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default) 25 Metadata: 26 handler_name : VideoHandler 27 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) 28 Metadata: 29 handler_name : SoundHandler 30SDL_OpenAudio (2 channels, 48000 Hz): WASAPI can't initialize audio client: CoInitialize は呼び出されていません。 31 32SDL_OpenAudio (1 channels, 48000 Hz): WASAPI can't initialize audio client: CoInitialize は呼び出されていません。 33 34SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't initialize audio client: CoInitialize は呼び出されていません。 35 36SDL_OpenAudio (1 channels, 44100 Hz): WASAPI can't initialize audio client: CoInitialize は呼び出されていません。 37 38No more combinations to try, audio open failed 39 3.22 M-V: -0.016 fd= 21 aq= 0KB vq= 1046KB sq= 0B f=0/0 40 3.43 M-V: -0.008 fd= 22 aq= 0KB vq= 1035KB sq= 0B f=0/0

このような感じでSDL_OpenAuioに失敗します。
これですが
SHELLからやるときは
export SDL_AUDIODRIVER=directsound
ffplay hogehoge.mp4
で解決するのはわかったのでこれと同じことをソースプログラミングでやりたいです。
該当ソースは

CPP

1int ffplaycore::audio_open(void *opaque, int64_t wanted_channel_layout, int wanted_nb_channels, int wanted_sample_rate, AudioParams *audio_hw_params) 2{ 3 SDL_AudioSpec wanted_spec, spec; 4 const char *env; 5 const int next_nb_channels[] = {0, 0, 1, 6, 2, 6, 4, 6}; 6 7 env = SDL_getenv("SDL_AUDIO_CHANNELS"); 8 if (env) { 9 wanted_nb_channels = atoi(env); 10 wanted_channel_layout = av_get_default_channel_layout(wanted_nb_channels); 11 } 12 if (!wanted_channel_layout || wanted_nb_channels != av_get_channel_layout_nb_channels(wanted_channel_layout)) { 13 wanted_channel_layout = av_get_default_channel_layout(wanted_nb_channels); 14 wanted_channel_layout &= ~AV_CH_LAYOUT_STEREO_DOWNMIX; 15 } 16 wanted_spec.channels = av_get_channel_layout_nb_channels(wanted_channel_layout); 17 wanted_spec.freq = wanted_sample_rate; 18 if (wanted_spec.freq <= 0 || wanted_spec.channels <= 0) { 19 qDebug( "Invalid sample rate or channel count!\n"); 20 return -1; 21 } 22 this->istemp=(VideoState *)opaque; 23 wanted_spec.format = AUDIO_S16SYS; 24 wanted_spec.silence = 0; 25 wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE; 26 wanted_spec.callback = sdl_audio_callback; 27 wanted_spec.userdata = this; 28 while (SDL_OpenAudio(&wanted_spec, &spec) < 0) { 29 qDebug( "SDL_OpenAudio (%d channels): %s\n", wanted_spec.channels, SDL_GetError()); 30 wanted_spec.channels = next_nb_channels[FFMIN(7, wanted_spec.channels)]; 31 if (!wanted_spec.channels) { 32 qDebug( "No more channel combinations to try, audio open failed\n"); 33 return -1; 34 } 35 wanted_channel_layout = av_get_default_channel_layout(wanted_spec.channels); 36 } 37 if (spec.format != AUDIO_S16SYS) { 38 qDebug( "SDL advised audio format %d is not supported!\n", spec.format); 39 return -1; 40 } 41 if (spec.channels != wanted_spec.channels) { 42 wanted_channel_layout = av_get_default_channel_layout(spec.channels); 43 if (!wanted_channel_layout) { 44 qDebug( "SDL advised channel count %d is not supported!\n", spec.channels); 45 return -1; 46 } 47 } 48 49 audio_hw_params->fmt = AV_SAMPLE_FMT_S16; 50 audio_hw_params->freq = spec.freq; 51 audio_hw_params->channel_layout = wanted_channel_layout; 52 audio_hw_params->channels = spec.channels; 53 return spec.size; 54}

このあたりなのでこのSDL_OpenAudioのあたりにDISRECTSOUNDを指定するコードを書けばいいと思われますがどうやればいいかWEBで検索してもよく分かりませんでした。
ご教示いただければ幸いです。
なおFFMPEG自体はMSysのpacman由来のもので特殊なことはしてません。(なのにこの不具合で泣けます

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2019/02/13 09:22

SDL_putenv("SDL_AUDIODRIVER=directsound"); ?
kokawa2003

2019/02/13 09:36

int ffplaycore::audio_open(void *opaque, int64_t wanted_channel_layout, int wanted_nb_channels, int wanted_sample_rate, AudioParams *audio_hw_params) { CoInitialize(NULL); SDL_putenv("SDL_AUDIODRIVER=directsound"); こんな感じで入れてみたけどだめでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問