FFMPEG生成的音频文件比输入文件长

时间:2015-09-25 02:03:16

标签: audio ffmpeg bitrate

前言:我已经查看了与此主题相关的stackoverflow主题。他们都没有回答这个问题或者与这个问题有任何关系。

我在YouTube上制作了LP视频。我最近开始使用.TS(传输流)文件通过答案here进行记录。当通过ffmpeg从文件中提取第二个音频流时,我最终得到的音频文件比我用作输入的视频文件长7秒。用作输入的文件是12:50,音频文件是12:57。

我认为这是因为ffmpeg正在改变文件的比特率。源比特率为167 kb / s,根据控制台输出,ffmpeg将其保存为164.7 kb / s。

我知道我可以手动定义比特率以保存为-b:a:0 167k但我希望这个批处理文件能够与我给它的任何文件一起使用,并且所讨论的流的比特率会有所不同,因为它&# 39;是麦克风/辅助流。我正在批量编写一个实用程序,所以我可以拖放文件来提取第二个音频流,所以我喜欢避免读取比特率,除非有一个ffmpeg命令返回比特率输入文件中易于解析的特定流。

对于编解码器,您可以使用-c:a:0副本,为什么不能在比特率上使用副本?对我来说没有任何意义。

我用来提取音频的命令:

ffmpeg -i "%~1" -map 0:2 -c:a:0 copy "%~n1.aac"

整个批处理文件:

@echo off

REM This code checks to ensure the command-line variables have been properly set.

if [%1]==[] goto ALERT
if [%2]==[] (
    SET outpt="%~n1.aac"
    goto END_COMMENT
)
SET outpt="%~2"

GOTO END_COMMENT

------------------------------------------

The code below actually runs the extraction of the audio stream with the configured values

ffmpeg -i <input_file> -map 0:2 -c:a:0 copy <output_file>

ffmpeg -i <input_file> -map
    The base command, map tells ffmpeg that we wish to define the order of streams
    we with to operate on

0:2
    Defines the stream to work on, 0 is the input, so input 0 (the file) and 2 is the stream (0=video,1+=audio, last stream may be metadata)

-c:a:0 copy
    Codec of audio stream 0 for output should be an exact copy of all applicable settings from input stream

<output_file>
    The name of the file to output. The extension should match the codec. For most intents this will be .aac

------------------------------------------

:END_COMMENT

echo %outpt%

ffmpeg -i "%~1" -map 0:2 -c:a:0 copy %outpt%
goto END

:ALERT
@echo Incorrect usage: At least 1 param is required
@echo     ^<param^> = Required
@echo     [param] = Optional
@echo(
@echo     extract.bat ^<input_file^> [output_file]

:END
pause

根据要求,以下文件是-v 9 -loglevel 99的完整输出(我不知道8 MB的[mpegts @ Address]是如何有用的,但是你走了:https://www.dropbox.com/s/0ous9hc6e2kbyvp/log.txt?dl=0

0 个答案:

没有答案