前言:我已经查看了与此主题相关的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