使用ffmpeg将mp3转换为mp4-如何在生成的视频上绘制文件名?

时间:2020-05-22 17:01:50

标签: ffmpeg

使用反复试验,我在OSX上使用以下脚本,通过循环播放特定的视频文件,将包含mp3文件的整个文件夹批量转换为mp4:

for i in *.mp3; do /usr/local/bin/ffmpeg -stream_loop -1 -i /path_to_filename.mp4 -c copy -v 0 -f nut - | /usr/local/bin/ffmpeg -thread_queue_size 10K -i - -i "$i" -c copy -map 0:v -map 1:a -shortest "$(basename "$i" )".mp4 ; done; for f in *.mp3.mp4; do mv -v "$f" "${f/.mp3.mp4/.mp4}"; done

我如何还可以打印/添加/刻录不带扩展名(.mp3)的mp3文件名,作为生成的视频屏幕底部的附加视频层,并且如果添加了单词,则很难自动换行太久了?

1 个答案:

答案 0 :(得分:0)

此命令为subtitles filter制作了一个临时SRT文件,该文件将自动处理布局和自动换行:

for i in *.mp3; do echo "1" > subs.srt; echo "00:00:00,000 --> 10:00:00,000" >> subs.srt; echo "${i%.*}" >> subs.srt; ffmpeg -stream_loop -1 -i video.mp4 -i "$i" -filter_complex "[0:v]subtitles=subs.srt:force_style=Alignment=3,format=yuv420p[v]" -map "[v]" -map 1:a -c:v libx264 -c:a copy -shortest -movflags +faststart "${i%.*}.mp4"; done
  • 在包含文件的目录中运行命令可以避免使用basename并创建一个更简单的命令。

  • MP4不普遍支持MP3。如果您的播放器不支持,请考虑将-c:a copy更改为-c:a aac。但我怀疑您将YouTube定位为MP4中的MP3也可以。

  • echo的三个实例效率不高,但在避免换行问题方面很有效。使用printf的一个实例会更好,但是我无法访问macOS来测试其printf的实现。