ffmpeg截取m4a文件总时长未变更

问题

ffmpeg使用过程中截取总时长3:42 m4a文件的前42秒,使用播放器播放显示总时长仍然是3:42秒但是拖动进度条超过42秒后音频直接播放结束。问题音频文件因为版权问题暂不放出。

ffmpeg版本:
使用的是github预编译好的windows版本

ffmpeg version 
git-2020-02-06-343ccfc Copyright (c) 2000-2020 
the FFmpeg developers built with gcc 9.2.1 (GCC) 20200122
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 39.100 / 56. 39.100
  libavcodec     58. 68.100 / 58. 68.100
  libavformat    58. 38.100 / 58. 38.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 74.100 /  7. 74.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100

截取命令:

ffmpeg.exe -t 00:00:42 -i ./input.m4a  -acodec copy out.m4a

解决

交换-i和-t参数顺序,问题解决。交换后命令:

ffmpeg.exe -i ./inoput.m4a -t 00:00:42  -acodec copy out.m4a

验证

为了验证是否所有m4a文件都有问题,本次采用https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/audio-samples.html上的ff-16b-2c-44100hz.m4a示例m4a文件尝试:

  • 该文件在交换参数前后均未发生文中问题

查找原因

经过比对,源文件比特率为95kbps,问题命令行下比特率变为17kbps,正常情况下仍为95kbps,故考虑可能是截取前后比特率变更导致的问题。
转换后比特率估算:95kbps*42/(3*60+42)≈17.97kbps
可以看出应该是输出文件从42s后没有内容但是文件计算比特率时按照bit/time的方式计算的平均值,所以这个不是成因,而是现象

查看文档

官方文档:http://ffmpeg.org/ffmpeg.html

Do not mix input and output files – first specify all input files, then all output files. Also do not mix options which belong to different files. All options apply ONLY to the next input or output file and are reset between files.
不要混合输入文件和输出文件–首先指定所有输入文件,然后指定所有输出文件。 也不要混用属于不同文件的选项。 所有选项仅适用于下一个输入或输出文件,并且在文件之间重置。

ffmpeg [global_options] {[input_file_options] -i input_url} … {[output_file_options] output_url} …

  • 从官方命令行使用可以看出,-t出现在-i前指定的是输入选项,该选项导致输入文件在42s后停止写入,但是输出文件并没有限制,所以输出文件仍为3:42,但后面均为空

结论:

  • ffmpeg命令不熟悉,且未查看官方文档导致的问题
  • 暂时不清楚为何示例文件未出现该问题

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值