Audio to Video

Converting audio to video using ffmpeg

Converting audio to video using ffmpeg

Suppose that the audio file is input.mp3 and the target video file is output.mp4:

ffmpeg -i input.mp3 -f lavfi -i color=c=black:s=640x360:r=25 -shortest -c:v libx264 -preset veryslow -c:a copy -pix_fmt yuv420p output.mp4

-i input.mp3: Specifies the input audio file.

-f lavfi -i color=c=black:s=640x360:r=25: Generates a black video with a resolution of 640x360 (360p) and a frame rate of 25 fps.

-shortest: Ensures the output video ends when the audio ends.

-c:v libx264: Uses the H.264 codec for video encoding.

-preset veryslow: Sets the encoding speed/quality trade-off.

-c:a copy: This option tells ffmpeg to copy the audio stream directly without re-encoding.

-pix_fmt yuv420p: Ensures compatibility with most players.

Alternative params

To re-encode the audio

Change:

-c:a copy

To:

-c:a aac -b:a 192k

-c:a aac: Uses AAC codec for audio.

-b:a 192k (Optional): Sets the audio bitrate to 192 kbps. Not including this param will use the default bitrate for AAC.

Available presets

The -preset option allows you to choose a balance between encoding speed and compression efficiency when using the H.264 codec (libx264). Here are the commonly available presets:

  1. ultrafast: Very fast encoding, but large file sizes. Lowest compression efficiency.
  2. superfast: Faster than fast, with somewhat larger file sizes.
  3. fast: A good balance between speed and file size.
  4. medium: The default setting, providing a good balance of speed and compression.
  5. slow: Slower encoding, resulting in better compression and smaller file sizes.
  6. slower: Even slower, but achieves better quality per bitrate.
  7. veryslow: Very slow encoding with the best compression efficiency.
  8. placebo: Extremely slow, with negligible gains in quality. Not recommended for practical use.

Specify start and end time range

Suppose the desired time range is 0:10-0:30, add the following param after -i input.mp3 (or maybe position doesn’t matter?):

-ss 00:00:10 -to 00:00:30

-ss 00:00:10: Seeks to the start time (10 seconds) of the audio file.

-to 00:00:30: Specifies the end time (30 seconds) of the audio file.

Bulk convert

To convert ./*.mp3 to videos, use the following shell script:

for file in ./*.mp3; do
    ffmpeg -i "$file" -f lavfi -i color=c=black:s=640x360:r=25 -shortest -c:v libx264 -preset veryslow -c:a copy -pix_fmt yuv420p "${file%.mp3}.mp4"
done

for file in ./*.mp3; do: Loops through each .mp3 file in the current directory.

"$file": Refers to the current file in the loop.

"${file%.mp3}.mp4": Changes the file extension from .mp3 to .mp4 while keeping the rest of the filename intact.

References

ChatGPT

Content Licensed under CC BY-SA 4.0. Code licensed under the MIT License.
Last updated on Sep 19, 2024 07:22 UTC