使用 ffmpeg 分析 AVI 中的音频

使用 ffmpeg 分析 AVI 中的音频

我是 的新手ffmpeg。我有一些 AVI 文件,我认为它们应该有音频,但我无法使用 VLC 播放音频。我尝试使用 来ffmpeg分析 AVI 文件中的音频。

import subprocess

def has_audio(filename):
    result = subprocess.run(["ffprobe", "-v", "error", "-show_entries",
                             "format=nb_streams", "-of",
                             "default=noprint_wrappers=1:nokey=1", filename],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT)
    return int(result.stdout) -1

print(has_audio('filename.avi'))

下面是其中一个 AVI 文件的输出。该文件看起来有音频,但也许我读错了输出。我也尝试了此代码问题,这告诉我视频有音频。

我如何使用其中一个ffmpeg应用程序或其他应用程序来确保该文件有音频?

avi @ 0x7fddac005140] non-interleaved AVI
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, avi, from 'filename.avi':
  Metadata:
    date            : 2010-06-29
  Duration: 00:00:06.83, start: 0.000000, bitrate: 10607 kb/s
  Stream #0:0: Video: mjpeg (Baseline) (MJPG / 0x47504A4D), yuvj420p(pc, bt470bg/unknown/unknown), 1920x1080, 9878 kb/s, 30 fps, 30 tbr, 30 tbn
  Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 32000 Hz, 1 channels, s16, 512 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
  Metadata:
    date            : 2010-06-29
    encoder         : Lavf60.3.100
  Stream #0:0: Audio: pcm_s16le, 32000 Hz, mono, s16, 512 kb/s
    Metadata:
      encoder         : Lavc60.3.100 pcm_s16le
size=N/A time=00:00:05.99 bitrate=N/A speed=1.52e+03x       
video:0kB audio:375kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[Parsed_volumedetect_0 @ 0x7fdd9b704080] n_samples: 192000
[Parsed_volumedetect_0 @ 0x7fdd9b704080] mean_volume: -44.3 dB
[Parsed_volumedetect_0 @ 0x7fdd9b704080] max_volume: -16.2 dB
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_16db: 3
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_17db: 0
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_18db: 9
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_19db: 9
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_20db: 15
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_21db: 16
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_22db: 12
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_23db: 25
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_24db: 19
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_25db: 25
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_26db: 22
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_27db: 13
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_28db: 17
[Parsed_volumedetect_0 @ 0x7fdd9b704080] histogram_29db: 13

以下是MediaInfo

Bit rate: 12884197, Frame rate: 30.000, Format: JPEG
Duration (raw value): 6833
Duration (other values:
['6 s 833 ms',
 '6 s 833 ms',
 '6 s 833 ms',
 '00:00:06.833',
 '00:00:06:25',
 '00:00:06.833 (00:00:06:25)']
Track data:
{'alignment': 'Aligned',
 'bit_depth': 16,
 'bit_rate': 512000,
 'bit_rate_mode': 'CBR',
 'channel_s': 1,
 'codec_id': '1',
 'codec_id_url': 'http://www.microsoft.com/windows/',
 'commercial_name': 'PCM',
 'count': '285',
 'count_of_stream_of_this_kind': '1',
 'delay': 0,
 'delay__origin': 'Stream',
 'delay_relative_to_video': 0,
 'duration': 6000,
 'format': 'PCM',
 'format_settings': 'Little / Signed',
 'format_settings__endianness': 'Little',
 'format_settings__sign': 'Signed',
 'interleave__duration': 1139,
 'kind_of_stream': 'Audio',
 'other_alignment': ['Aligned on interleaves'],
 'other_bit_depth': ['16 bits'],
 'other_bit_rate': ['512 kb/s'],
 'other_bit_rate_mode': ['Constant'],
 'other_channel_s': ['1 channel'],
 'other_delay': ['00:00:00.000', '00:00:00.000'],
 'other_delay__origin': ['Raw stream'],
 'other_delay_relative_to_video': ['00:00:00.000', '00:00:00.000'],
 'other_duration': ['6 s 0 ms',
                    '6 s 0 ms',
                    '6 s 0 ms',
                    '00:00:06.000',
                    '00:00:06.000'],
 'other_format': ['PCM'],
 'other_interleave__duration': ['1139',
                                '1139  ms (34.17 video frames)',
                                '34.17'],
 'other_kind_of_stream': ['Audio'],
 'other_sampling_rate': ['32.0 kHz'],
 'other_stream_size': ['375 KiB (4%)',
                       '375 KiB',
                       '375 KiB',
                       '375 KiB',
                       '375.0 KiB',
                       '375 KiB (4%)'],
 'other_track_id': ['1'],
 'proportion_of_this_stream': '0.04238',
 'samples_count': '192000',
 'sampling_rate': 32000,
 'stream_identifier': '0',
 'stream_size': 384000,
 'streamorder': '1',
 'track_id': 1,
 'track_type': 'Audio'}

答案1

尝试这个:

ffmpeg -i filename.avi -c:v copy -c:a aac file_pcm_to_aac.mp4

这将保持视频原样,但将 PCM WAV 编码为 m4a AAC。

如果不起作用:

ffmpeg -i filename.avi -an -c:v copy file_video_only.mp4 && ffmpeg -i filename.avi -vn filename_audio_only.wav

然后使用 看看它是否能单独播放 wav 文件aplay。如果不行,尝试使用 打开它audacity看看它能否打开。如果audacity不能打开,尝试将其转储为 raw,并指定输入类型。

ffmpeg -f s16le -i filename_audio_only.wav -c:a pcm_s16le output.wav

然后尝试从 RAW 导入,指定它的有符号,16 位,小端,32000 Hz,单声道audacity


可能有些事情要做[avi @ 0x5617e27c4cc0] non-interleaved AVI
这说,“帧速率必须能被音频采样率整除“。

AviSynth 可能能够使用 DirectShow 定位音频具体来说。

摘自上述文章:

现在,如果我在另一个 AVI 中“重新编码”该文件:

ffmpeg -i f.avi -c copy f2.avi

我可以在几毫秒内从 f2.avi 中提取音频!

.avi首先尝试转换为交错是最容易的。


我试了一下,我确信音频转换成功了。这段剪辑只有半秒钟的麦克风碰撞声,所以我不确定。需要在更长的文件上进行测试。

源视频在从那个奇怪的 PCM 音轨正确解复用后,可以在容器305K中正常播放mkv。剩下的就是音频了。WAV 文件很大,所以这是有道理的。提取的变化范围从2.4mb 至 3.0mb... 如果不-f sle16引导输入.avi文件,它将提取大约 400k 的内容,这完全是错误的。

├── [ 2.4M]  audio_file.wav
├── [ 3.3M]  MOVI0000.avi
├── [ 305K]  MOVI0000.mkv

-c copy或之间没有区别-c:a pcm_s16le,文件大小为 2.4mb+(PCM 未压缩,因此除非您更改频道、频率或比特率,否则它是多余的。)

这将正确转换视频:

 ffmpeg -fflags +genpts -i MOVI0000.avi -vf "format=yuv420p" -c:v libx264 -x264opts b-pyramid=normal -g 120 -preset veryslow -b:v 500K -maxrate:v 4M -bufsize 8M -rc-lookahead 60 -refs 3 -bf 2 -b_strategy 2 -subq 11 -mixed-refs 1 -8x8dct 1 -partitions all -direct-pred auto -nal-hrd vbr -aq-mode autovariance -aq-strength 1.1 -trellis 2 -c:a aac -ac 1 -b:a 128k MOVI0000.mkv

如果音频转换不正确,只需替换-c:a aac -ac 1 -b:a 128k即可-an消除它。

答案2

您的输出显示该文件有音频:

  Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 32000 Hz, 1 channels, s16, 512 kb/s

相关内容